Обнаружение спама|сообщения, не являющиеся спамом

Существует два основных типа моделей NBC.

Модель событий Бернулли (BEM) и Полиномиальная модель событий (MEM)

Преимущества

Простой и понятный, метод реализации ясен, без особой помощи фреймворка, с низкой дисперсией.

Недостатки

Если делать текстовую классификацию, то такие модели не могут анализировать семантику, и они не подходят для сверхбольших данных.

Терминология и обозначения

Функция индикатора

1{.}: если выражение внутри {} истинно, 1{} дает 1, иначе 0
Например:

1{2=2} -> 1, 1{2=3} ->0

∑1{.}: количество элементов, при которых выражение внутри {} является истинным.
Например:

∑1{x=2}: подсчет всех элементов, равных 2 в коллекции.

Модель событий Бернулли (BEM)

Подсчитайте долю присутствия наблюдаемых событий в выборке.

Параметры или веса

∅: представляет вероятность присутствия X при заданном Y в образцах.

n: количество n образцов.

∅ с j|y=1: событие j для положительного события.

∅ с j|y=0: событие j для отрицательного события.

∅ y: представляет вероятность событияY .

∅ с y=1: ​​событие положительное.

∅ с y=0: событие для отрицательного значения.

Полиномиальная событийная модель (MEM)

Подсчитайте количество (количество) долей наблюдаемых событий в выборке.

Параметры или веса

∅: Представляет вероятность количества X данного Y в выборках.

n: количество n образцов.

∅ с j|y=1: событие j для положительного события.

∅ с j|y=0: событие j для отрицательного события.

∅ y: представляет вероятность событияY .

∅ с y=1: ​​событие положительное.

∅ с y=0: событие для отрицательного значения.

Эксперимент

Получается, что у нас есть набор выборочных данных, и каждая выборка содержит независимые события (Xs) и метку, которая также представляет событие (Y).

Связь между X и Y заключается в том, что эти события происходят в контексте Y.

Метка может быть двоичной или полиномиальной. В этой статье мы выбрали двоичную, чтобы упростить задачу. И мы предопределили все возможные события наших выборок, допустим, есть n событий.

Ярлык или Y: положительный (1) или отрицательный (0).

Каждая выборка имеет случайные события из этих n событий.

Цель

Вводим случайные события (….n) единиц и узнаем вероятность положительного или отрицательного Y=1 или 0.

правило Байеса

P(Y|X) = [ P(X|Y) P(Y) ] / P(X)

P(X) = P(X|Y=0) + P(X|Y=1)

Затем

Построить модель

В своем эксперименте я использую наивный байесовский классификатор для обнаружения спама | сообщения, не являющиеся спамом.

Скачать: https://dl.dropbox.com/s/igq20e1nvwjwxw4/spam_ham_dataset.csv

Здесь нет цикла обучения, такого как глубокое обучение, линейная регрессия или логистическая регрессия. Чтобы обучить модели наивного байесовского классификатора, мы реализуем метод (👆) на языке ML, таком как Python, Matlab.

Структура

Модель построена на чистом Python.

Используйте Tensorflow Tokenizer для преобразования текста (предложений) в числа.

Например, есть несколько предложений:

Быстрая коричневая лиса прыгает через ленивую собаку.

Это прекрасный сад, который я когда-либо видел.

Извините за очередное отсутствие.

…..

Токенизатор будет кодировать эти предложения в:

[2, 5, 6, 7, 3, 9, 10, 15, 19]

[20, 22, 56, 36, 222, 123, 999, 345]

[100, 58, 10, 245, 93]

С помощью tokenizer мы можем вызвать index_word, чтобы получить сопоставление между словами и их представляющими индексами, например, «извините» равно 100, «the» равно 10 (появляется два раз).

Метод

preprocess(sentences, labels): первый метод, вызываемый после создания экземпляра модели.

предложения: все примеры сообщений

метки: Y, 1 или 0. 1: спам, 0: не спам

fit(self, X, Y, X_cv, Y_cv): Обучить модель, следуя методу (👆), чтобы вычислить вероятность каждого допустимого слова.

X: данные обучения, данные были закодированы с индексами.

Y: Метки, связанные с X.

X_cv: данные перекрестной проверки, данные были закодированы с помощью индексов.

Y: Метки, связанные с X_cv.

Используйте F-Score для проверки метрики данных перекрестной проверки.

predict(self, X): прогнозировать X с моделью. X представляет собой набор тестовых данных.

Возвращает кортеж со списком вероятностей предсказания и списком 1 или 0.1: спам, 0: не спам.