Наивная байесовская классификация (фильтрация спама) - Какой расчет верен? - PullRequest
1 голос
/ 13 мая 2010

Я реализую наивный байесовский классификатор для фильтрации спама. У меня есть сомнения по поводу некоторых расчетов. Пожалуйста, объясните мне, что делать. Вот мой вопрос

В этом методе вы должны рассчитать

alt text

P (S | W) -> Вероятность того, что сообщение является спамом, если в нем встречается слово W.

P (W | S) -> Вероятность того, что слово W встречается в спам-сообщении.

P (W | H) -> Вероятность того, что слово W встречается в сообщении Хэма.

Итак, чтобы вычислить P (W | S), какое из следующего является правильным:

  1. (Количество W, встречающихся в спаме) / (общее количество W, встречающихся во всех сообщениях)

  2. (Количество раз, когда слово W встречается в спаме) / (Общее количество слов в спам-сообщении)

Итак, чтобы рассчитать P (W | S), я должен сделать (1) или (2)? (Я думал, что это (2), но я не уверен.)

Кстати, я обращаюсь http://en.wikipedia.org/wiki/Bayesian_spam_filtering за информацией.

Я должен завершить реализацию к этим выходным: (


Не должно ли повторное вхождение слова 'W' увеличить рейтинг спама в сообщении? В твоем подходе это не так, верно?

Допустим, у нас есть 100 обучающих сообщений, из которых 50 - спам, а 50 - Хэм. и сказать word_count каждого сообщения = 100.

И скажем, в спам-сообщениях слово W встречается 5 раз в каждом сообщении, а слово W встречается 1 раз в сообщении Ham.

Таким образом, общее количество раз, когда W встречается во всем спам-сообщении = 5 * 50 = 250 раз.

И общее количество раз, когда W встречается во всех сообщениях Ham = 1 * 50 = 50 раз.

Общее количество W во всех обучающих сообщениях = (250 + 50) = 300 раз.

Итак, как в этом сценарии как рассчитать P (W | S) и P (W | H)?

Естественно, мы должны ожидать, P(W|S) > P(W|H) верно?

Ответы [ 3 ]

5 голосов
/ 13 мая 2010

P(W|S) = (Количество спам-сообщений, содержащих W) / (Количество всех спам-сообщений)

2 голосов
/ 23 февраля 2012

Хотя это довольно старый вопрос, ни один из ответов не является полным, поэтому стоит их исправить.

Наивный байесовский алгоритм - это не один алгоритм, а семейство алгоритмов , основанное на том же байесовском правиле:

enter image description here

, где C - это класс (в этом примере - ветчина или спам), а x со стрелкой - вектор атрибутов (в простейшем случае - слова). P(C) - это просто доля сообщений класса C во всем наборе данных. P(x) - вероятность появления сообщения с атрибутами, описываемыми вектором x, но, поскольку этот параметр одинаков для всех классов, мы можем опустить его на данный момент. Но этот вопрос о P(x|C), и как рассчитать его по данному вектору x текущего сообщения?

На самом деле ответ зависит от конкретного типа алгоритма NB. Существует несколько из них, в том числе многомерный Бернулли NB , многомерный Гаусс NB , полиномиальный NB с числовыми и логическими атрибутами и другие. Подробности расчета P(x|C) для каждого из них, а также сравнение классификаторов NB для задачи фильтрации спама см. в этой статье .

1 голос
/ 13 мая 2010

В этой байесовской формуле W - это ваша «особенность», то есть то, что вы наблюдаете.

Сначала вы должны тщательно определить, что такое W. Часто у вас есть много альтернатив.

Допустим, при первом подходе вы говорите, что W - это событие "сообщение содержит слово Виагра". (То есть W имеет два возможных значения: 0 = "сообщение не содержит слова V ..." 1 = "сообщение содержит хотя бы вхождение этого слова").

В этом сценарии вы правы: P (W | S) равно "Вероятность того, что слово W появится (хотя бы один раз) в спам-сообщении." И чтобы оценить (лучше, чем "рассчитать"), вы посчитаете, как говорит другой ответ, "(Количество спам-сообщений, содержащих хотя бы одно слово V) / (Число всех спам-сообщений ) "

Альтернативный подход: определить «W = количество вхождений слова Виагра в сообщении». В этом случае мы должны оценить P (W / S) для каждого значения W (P (W = 0 / S) P (W = 1 / S) P (W = 2 / S) ... Сложнее, нужно больше образцов, лучше (надеюсь) производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...