Простой Байесовский метод (Naive Bayes) Выполнила: студентка группы 09-515(1) Измайлова Дарья Данные: В качестве исходных данных были взяты стихотворения Анны Ахматовой и Карла Сэндберга. Цель работы: предложить читателям такой инструментарий, который позволит по заданному слову правильно определить автора прочитанного стихотворения: 1. Anna Akhmatova 2. Carl Sandburg name – фамилия и имя автора стихотворения poem – текст стихотворения Переменная отклика: name. Данные были считаны из файла English Poems.csv и сохранены в переменную MyPoems: Переменную отклика name удобно представить в числовой форме: Структура получившегося вектора выглядит следующим образом: Необходимо подсчитать, сколько всего стихотворений каждого автора было представлено в файле: Далее нужно проанализировать тексты всех 122 стихотворений. Для этого был установлен дополнительный пакет «tm», функции которого будут использованы в дальнейшей работе. Тексты всех стихотворений будут записаны в переменную MyPoems_corpus в виде вектора: Нужно преобразовать все символы к нижнему регистру: Чтобы разделить каждое стихотворение на слова, надо исключить из них: 1.Все цифры 2.Служебные слова, входящие в список stopwords(): 3.Знаки препинания 4.Лишние пробелы Преобразовываем «очищенные» данные к формату PlainText и строим разреженную матрицу частот для всех слов, входящих в корпус стихотворений: Для того чтобы проверить правильность работы алгоритма необходимо: 1.Поделить исходные данные на обучающую выборку и тестовые данные. Обучающая выборка: 86 стихотворений Тестовые данные: 36 стихотворений 2.Поделить строки разреженной матрицы MyPoems_dtm на обучающую выборку и тестовые данные. 3.Поделить данные «очищенного» корпуса corpus_clean на обучающую выборку и тестовые данные. Проводится расчет доли стихотворений А.Ахматовой и стихотворений К.Сэндберга в обучающей выборке и на тестовых данных: По полученным результатам, которые отличаются незначительно друг от друга, можно сделать вывод, что выборки являются пригодными для построения и анализа модели. С помощью установленного пакета «wordcloud» вызывается функция wordcloud() для построения облака точек для «очищенной» обучающей выборки с минимальным порогом частоты встречающихся слов (20) (Рис.1): А также для «очищенной» тестовой выборки (Рис.2): Рис.1 Рис.2 По полученным облакам слов видно, что некоторые слова достаточно часто встречаются в обеих выборках. Значит, они не могут быть индикатором для определенного автора стихотворений. Выберем из тестовых данных те слова, которые встречаются в стихотворениях А.Ахматовой и К.Сэндберга, и построим соответствующие облака: Рис 3. Слова из тестовых данных, которые часто встречаются в стихотворениях К.Сэндберга Рис 4. Слова из тестовых данных, которые часто встречаются в стихотворениях А.Ахматовой. Если посмотреть на Рис.3 и Рис.4, то можно заметить, что некоторые слова, часто встречающиеся в стихотворениях А.Ахматовой, не встречаются совсем в стихотворениях К.Сэндберга, например: heart, forgive, lips, love. И наоборот, есть слова, которые часто встречаются у К.Сэндберга, но не используются у А.Ахматовой: death, ride, moon. Эти слова могут использоваться как индикаторы в методе Байеса. Найдем в разреженной матрице все слова из обучающей выборки MyPoems_dtm_train, что встречаются не менее 5 раз: MyPoems_dict – словарь. Мы будем принимать во внимание лишь слова, которые входят в него. Выберем данные обучающей выборки и тестовой выборки разреженной матрицы, преобразуем данные в них из числовых в категориальные и вызовем метод наивного Байеса: Сделаем прогноз: Прогноз выполнен не совсем точно. Из 36 стихотворений предсказано: А.Ахматова: 14 верно, 3 неверно К.Сэндберг: 15 верно, 4 неверно Итого: 29 верно, 7 неверно. 19,4 % всего прогнозов сделано неверно. Добавим несколько новых данных в конец файла English Poems.csv (123-130 строки): Произведем все те же операции, что делали с данными до этого. Получим следующее облако слов: Применив метод наивного Байеса, получаем следующие прогнозы: Если рассматривать только последние 8 прогнозов (по новым данным), то из 8 правильно будут предсказаны только 7. Метод наивного Байеса показал результат немного лучше, чем метод К-ближайших соседей.