Попытка использовать наивный байесовский ученик в R, но прогноз () дает результаты, отличные от предполагаемых в модели

Я пытаюсь использовать Naive Bayes Learner от e1071 для анализа спама. Это код, который я использую для настройки модели.

library(e1071)
emails=read.csv("emails.csv")
emailstrain=read.csv("emailstrain.csv")
model<-naiveBayes(type ~.,data=emailstrain)

есть два набора электронных писем, в каждом из которых есть «утверждение» и тип. Один предназначен для обучения, а другой - для тестирования. когда я бегу

model

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

table(predict(model,emails),emails$type)

я понимаю

    ham  spam
ham 2086 321
spam 2   0

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

    ham  spam
ham 2735 420
spam 0   6

что ненамного лучше, чем с тестовым набором. Я думаю, что что-то не так с тем, как работает функция прогнозирования.

как настроены файлы данных и несколько примеров того, что находится внутри:

type,statement
ham,How much did ur hdd casing cost.
ham,Mystery solved! Just opened my email and he's sent me another batch! Isn't he a sweetie
ham,I can't describe how lucky you are that I'm actually awake by noon
spam,This is the 2nd time we have tried to contact u. U have won the £1450 prize to claim just call 09053750005 b4 310303. T&Cs/stop SMS 08718725756. 140ppm
ham,"TODAY is Sorry day.! If ever i was angry with you, if ever i misbehaved or hurt you? plz plz JUST SLAP URSELF Bcoz, Its ur fault, I'm basically GOOD"
ham,Cheers for the card ... Is it that time of year already?
spam,"HOT LIVE FANTASIES call now 08707509020 Just 20p per min NTT Ltd, PO Box 1327 Croydon CR9 5WB 0870..k"
ham,"When people see my msgs, They think Iam addicted to msging... They are wrong, Bcoz They don\'t know that Iam addicted to my sweet Friends..!! BSLVYL"
ham,Ugh hopefully the asus ppl dont randomly do a reformat.
ham,"Haven't seen my facebook, huh? Lol!"
ham,"Mah b, I'll pick it up tomorrow"
ham,Still otside le..u come 2morrow maga..
ham,Do u still have plumbers tape and a wrench we could borrow?
spam,"Dear Voucher Holder, To claim this weeks offer, at you PC please go to http://www.e-tlp.co.uk/reward. Ts&Cs apply."
ham,It vl bcum more difficult..
spam,UR GOING 2 BAHAMAS! CallFREEFONE 08081560665 and speak to a live operator to claim either Bahamas cruise of£2000 CASH 18+only. To opt out txt X to 07786200117

Мне бы очень хотелось предложений. Спасибо большое за вашу помощь


person Josh Zachariah    schedule 25.09.2013    source источник
comment
1. Мы не знаем, что находится внутри emails.csv и emailstrain.csv. 2. Вы забыли часть после того, как я получил это   -  person zero323    schedule 25.09.2013
comment
его обновлено сейчас. Я не думаю, что переполнение стека действительно позволит мне загрузить весь набор данных.   -  person Josh Zachariah    schedule 25.09.2013
comment
Никому не нужен весь ваш набор данных :) Но его должно хватить, чтобы воспроизвести вашу проблему. Обычно вам следует прочитать следующее: stackoverflow.com/questions/5963269/   -  person zero323    schedule 25.09.2013
comment
Что ж, это многое объясняет. Дай мне время собраться с мыслями.   -  person zero323    schedule 26.09.2013


Ответы (1)


На самом деле функция прогнозирования работает нормально. Не поймите меня неправильно, но проблема в том, что вы делаете. Вы строите модель по этой формуле: type ~ ., верно? Понятно, что у нас в левой части формулы, поэтому давайте посмотрим на правую часть.

В ваших данных у вас есть только переменные - type и statement, и поскольку type является зависимой переменной, единственной вещью, которая считается независимой переменной, является statement. Пока все ясно.

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

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

Если вы хотите использовать какой-либо метод машинного обучения для работы с естественным языком, вам необходимо предварительно обработать свои данные. В зависимости от вашей проблемы это может, например, означать стемминг, лемматизацию, вычисление статистики n-грамм, tf-idf. Учебный классификатор - это последний шаг.

person zero323    schedule 25.09.2013