Система фильтрации спама - байесовский классификатор

Система фильтрации спама - байесовский классификатор

16 апреля 2022 г.

Что за хрень такой байесовский классификатор?


Правило Байеса, «теория, которая никогда не умирала»


Простая теория оценки знаний 17-го века, подвергавшаяся критике на протяжении большей части 20-го века.


Это помогает людям оценивать свои первоначальные идеи, а также обновлять и модифицировать их с помощью новой информации, чтобы принимать более эффективные решения.


Исходные убеждения + недавние объективные данные = Новое улучшенное убеждение.


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


Он был открыт и опубликован двумя священнослужителями и математиками-любителями, англичанином Томасом Байесом и его другом из Уэльса Ричардом Прайсом в 18 веке.


Французский математик Пьер-Симон Лаплас разработал его в том виде, в котором он используется сегодня. Теперь мы могли бы назвать это теорией Байеса-Прайса-Лапласа, или сокращенно GLP.


Частично первоначальная полемика связана с тем, что в 40-х годах 18 века развернулась острая полемика о невероятности христианских чудес. Вопрос заключался в том, есть ли в естественном мире свидетельства, которые помогли бы нам прийти к рациональным выводам о Боге-творце, который в 18 веке был известен как «причина» или «первопричина».


Мы не знаем, пытался ли Байес доказать существование Бога как причины. Но мы знаем, что он пытался математически решить проблему причины и следствия;


Во время холодной войны ВВС США потеряли водородную бомбу у берегов Паломарес, а ВМС США начали тайно разрабатывать байесовскую теорию поиска подводных объектов.


В 2009 году в южной части Атлантического океана пропал рейс 447 Air France с 228 людьми на борту. ВМС США достаточно разработали байесовскую теорию поиска, чтобы положить конец двухлетнему безуспешному поиску AF447 за неделю подводного поиска.


Сегодня мы используем его для огромного количества вещей, таких как фильтрация спама и обучение систем автопилота.


Если вы хотите узнать больше об истории, стоящей за этим, посмотрите [это видео] (https://www.youtube.com/watch?v=BcvLAw-JRss).


Хорошо, хорошо. Но вы не ответили на предыдущий вопрос!


Наивная байесовская классификация


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


Несмотря на свою «наивность», наивный метод Байеса, как правило, очень хорошо работает на практике.


«все модели ошибочны, но некоторые из них полезны» — Джордж Бокс


Круто, дерзайте!


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


P.S. У вас может быть сколько угодно классов. Как Gmail делает с акциями, обновлениями, форумами или социальными сетями.


  • Исходные убеждения: * Для простоты предположим, что половина писем, которые мы получаем, являются спамом. 1:1.

Теперь нам нужно получить вероятность того, что каждое из этих слов появится в спаме или ветке. Самый простой способ — подсчитать, сколько раз каждое слово встречается в данных, и разделить полученное число на общее количество слов.


| слово | спам | ветчина |


| бесплатно | 184 | 12 |


| всего | 104342 | 294554 |


В этом примере вероятность появления слова «Бесплатно» в спам-сообщении составляет 1 из 567 слов. То же упражнение для ветчины: 1 из 24


Последние объективные данные: Если мы обнаружим слово «Бесплатно» в нашем сообщении, это повысит вероятность спама на 23,6 (567/24).


1/1 (первоначальные предположения: половина сообщений, которые мы получаем, являются спамом) * 23,6 (мы только что нашли мир «Бесплатно» в нашей электронной почте) = 23,6.


В среднем на каждое любительское сообщение приходится около 23,6 спам-сообщений, или, если использовать целые числа, 236 (23,6*10) спам-сообщений на каждые 10 любительских сообщений. Итак, вероятность будет: 236 / (236 + 10) \ * 100 = 95,9%


Чтобы обработать остальные слова в электронном письме, мы можем использовать точно такую ​​же процедуру. Апостериорные шансы после одного слова (то, что мы только что вычислили) станут априорными шансами (или начальным убеждением) для следующего слова и так далее.


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


Это известно как ошибка базовой ставки, и вы можете прочитать больше об этом [здесь] (https://en.wikipedia.org/wiki/Base_rate_fallacy).


Но давайте будем проще,


«Земля и расширение»


Как я могу играть с этим?


Я только что нашел classifier-reborn, жемчужину, которая делает его довольно простым. И [этот] (https://www.kaggle.com/datasets/venky73/spam-mails-dataset) набор данных.


Ну вот:


``рубин


требуют «возрождения классификатора»


требуется 'CSV'


Загрузить набор данных


набор данных = CSV.parse(File.read("spam_ham_dataset.csv"), заголовки: правда)


Создадим наш классификатор Байеса/БИС


classifier = ClassifierReborn::Bayes.new('Спам', 'Ветчина')


Обучить классификатор


набор данных[1..-1].each_with_index do |электронная почта, индекс|


если набор данных[индекс]["метка"] == "спам"


classifier.train "Спам", набор данных[индекс]["текст"]


еще


classifier.train "Ветчина", набор данных[индекс]["текст"]


конец


конец


Играть с этим


ставит "Вставьте свой адрес электронной почты здесь (txt)"


помещает classifier.classify получает


Вы также можете проверить [этот репозиторий] (https://github.com/sausheong/naive-bayes), чтобы увидеть, как он выглядит без драгоценного камня: p


Говоря о спаме... Я собираюсь запустить доску объявлений для разработчиков, которые хотят работать удаленно, и я ищу отзывы, взгляните!


Пока.



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE