Фильтрация спама Naive Bays

Я пытаюсь реализовать свой первый спам-фильтр, используя наивный байесовский классификатор. Я использую данные, предоставленные репозиторием данных машинного обучения UCI (http://archive.ics.uci.edu/ml/datasets/SMS+Spam+Collection). Данные представляют собой таблицу характеристик, соответствующих нескольким тысячам спам-сообщений и сообщений, не относящихся к спаму. Поэтому мои возможности ограничены теми, что указаны в таблице.

Моя цель - реализовать классификатор, который может вычислять P (S∣M), вероятность того, что сообщение будет спамом. До сих пор я использовал следующее уравнение для вычисления P (S∣F), вероятности того, что функция попадет в спам.

P (S∣F) = P (F∣S) / (P (F∣S) + P (F∣H)) из http://en.wikipedia.org/wiki/Bayesian_spam_filtering

где P (F∣S) - это вероятность того, что функция будет задана как спам, а P (F∣H) - это вероятность того, что функция будет предоставлена ​​радиолюбителям. У меня возникли проблемы с преодолением разрыва между знанием P (S∣F) и P (S∣M), где M - это сообщение, а сообщение - это просто набор независимых функций.

Вкратце, я хочу просто умножить характеристики вместе. Но это сделало бы большинство цифр очень маленькими, я не уверен, что это нормально.

Короче говоря, это вопросы, которые у меня есть прямо сейчас.
1.) Как преобразовать набор P (S∣F) в P (S∣M). 2.) После расчета P (S∣M), как мне определить порог для моего классификатора? 3.) К счастью, мой набор функций был выбран за меня, как мне выбрать или найти свой собственный набор функций?

Я также был бы признателен за ресурсы, которые могли бы мне помочь. Спасибо за ваше время.


person user3381317    schedule 28.03.2014    source источник


Ответы (1)


Вы хотите использовать наивный байесовский метод:

http://en.wikipedia.org/wiki/Naive_Bayes_classifier

  1. Вероятно, это выходит за рамки этого ответа, чтобы объяснить это, но по сути вы умножаете вероятность того, что каждая функция вместе дает спам, и умножаете ее на априорную вероятность спама. Затем повторите для ветчины (т.е. умножьте каждую характеристику ветчины вместе и умножьте это на априорную вероятность ветчины). Теперь у вас есть два числа, которые можно нормализовать до вероятностей, разделив каждое на сумму обоих. Это даст вам вероятность S | M и S | H. Снова прочтите статью выше. Если вы хотите избежать потери числового значения, возьмите журнал каждой условной и априорной вероятности (с любым основанием) и сложите вместо умножения исходных вероятностей. Добавление журналов эквивалентно умножению исходных чисел. Это не даст вам в конце числа вероятности, но вы все равно можете взять тот, у которого больше значение, в качестве предсказанного класса.

  2. Вам не нужно устанавливать порог, просто классифицируйте каждый экземпляр по тому, что более вероятно, спаму или радиолюбительству (или тому, что дает вам большую вероятность журнала).

  3. На это нет однозначного ответа. Для этой проблемы разумно использовать модель набора слов. Избегайте очень редких (встречающихся в ‹5 документов), а также очень частых слов, таких как, и a. Для их удаления часто используется список стоп-слов. Также может помочь алгоритм выбора функции. Удаление сильно коррелированных функций поможет, особенно с помощью наивного байесовского метода, который очень чувствителен к этому.

person Simon    schedule 29.03.2014