Обнаружение спама|сообщения, не являющиеся спамом
Существует два основных типа моделей 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: не спам.