Я пытаюсь реализовать свой первый спам-фильтр, используя наивный байесовский классификатор. Я использую данные, предоставленные репозиторием данных машинного обучения 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.) К счастью, мой набор функций был выбран за меня, как мне выбрать или найти свой собственный набор функций?
Я также был бы признателен за ресурсы, которые могли бы мне помочь. Спасибо за ваше время.