Здравствуйте, коллеги, рассказчики данных, в этом посте я хочу поделиться своими выводами о моделировании классификации с помощью веб-парсинга сообщений из двух разных подразделов Reddit и определения их происхождения. Подразделение Reddit, представляющее интерес, - это r / fakehistoryporn и r / NatureIsFuckingLit.

Подписка на Reddit выбрана не случайно. Я энтузиаст истории и любитель природы.

Итак, переход прямо в рабочий процесс выглядит следующим образом:

  • API веб-парсинга Reddit для подэлементов Reddit r / fakehistoryporn и r / natureisfuckinlit
  • Выполните базовое НЛП и примените машинное обучение к задаче двоичной классификации

Чтобы очистить информацию о потоках с Reddit.com, мы используем запросы и пакеты json.

Затем мы перебираем объект json, чтобы найти элементы, и, наконец, загружаем его в csv.

Теперь перейдем к базовому EDA и моделированию:

Давайте сначала загрузим наши данные в DataFrame pandas;

Затем мы горячо кодируем нашу целевую переменную, которая является частью Reddit, которую мы хотим предсказать в нашей модели двоичной классификации, и настраиваем наши функции (X) и цель (y).

Наконец-то мы проводим разделение данных на поезд-тест.

Теперь мы хотим выполнить базовое НЛП в нашем корпусе текста функций и разметить каждое слово путем их векторизации. Мы применяем векторизатор подсчета и векторизатор TFIDF для нашей модели.

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

Я сделаю здесь пару моделей и дам ссылку на мой код github для остальных моделей.

Модели, которые я построил для этого набора данных, представляют собой классическую логистическую регрессию для его способности интерпретировать бета-коэффициент, классификатор случайного леса, классификатор опорных векторов и полиномиальный наивный байесовский метод за его блестящую обработку текстовых данных. Наша цель - анализировать ключевые токены при прогнозировании суб-Reddit и максимизировать точность классификатора.

Ниже приводится ссылка на книгу: https://github.com/danturti/Reddit_Classification_Modelling_and_Web_Scraping

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

Основная идея здесь - дать легкое введение в классификационное моделирование.

Итак, давайте импортируем наш Count Vectorizer и подгоним его.

Затем мы бы импортировали больше пакетов scikit-learn для моделирования и выводов.

У нас хорошая точность ~ 0,94. Теперь давайте посмотрим еще немного.

Мы можем заметить, что некоторые ключевые токены для суб-Reddits

  • fakehistoryporn tokens: около 1944 года, реклама, гитлер, до нашей эры, 1943, американец, битва, немецкий, нацистский, 1939, 1968, солдат, римлянин, президент, армия
  • Жетоны NatureIsFuckingLit: акула, парк, зимородок, исландия, молния, побережье, краб, черепаха, оса, рыба, сова, гусеница, стрекоза, осьминог, птица, радуга, природа, закат, малыш, паук, дерево, красиво

Это соответствует характеру наших подписок Reddits. Следовательно, мы можем сделать вывод, что модель работает, как ожидалось.

Теперь давайте проанализируем матрицу путаницы;

Мы видим, что логистическая регрессия с CountVectorizer очень точна при прогнозировании характера, однако есть некоторые ошибки с историей.

Давайте быстро проанализируем другую модель (случайный лес) и воспользуемся здесь векторизатором TFIDF. Я воспользуюсь конвейерным поиском и поиском по сетке, чтобы упростить мою модель и точно настроить гиперпараметры. Вышеупомянутый шаг не является обязательным, но я намерен дать вам понимание того же уровня на начальном уровне при реализации моделей в будущем.

Итак, давайте продолжим и импортируем наши пакеты для реализации нашей модели.

Итак, похоже, наша логистика работает лучше, чем наш Случайный лес. Есть два способа решить задачу классификации. Я настоятельно рекомендую свой код решения для вышеупомянутого для большей ясности и ознакомления с другими моделями, такими как Support Vectors (SVM) и Multinomial Naive Bayes.

Когда я реализовал то же самое, я пришел к нескольким выводам, которыми хотел бы поделиться.

  • Логистика и SVM с TFIDF Vectorizer - наши лучшие исполнители с высочайшей точностью классификации публикаций и субреддитов - точность почти 96%.
  • TFIDF играет ключевую роль в удалении служебных слов, таких как местоимения, которые очень распространены на самоуверенных (основанных на комментариях) веб-сайтах, таких как Reddit, и которые не должны иметь большого веса и, следовательно, должны быть уменьшены. Отсюда лучшие результаты.
  • При логистическом подходе мы получаем коэффициенты, которые оценивают, как наши независимые переменные (особенности текста) влияют на нашу зависимую переменную (правильный субреддит). Поэтому это очень хорошая модель для использования, потому что набор данных не очень велик, и модель не перегружена многими функциями.
  • Используя SVM, каждый текст в нашем наборе данных представлен как вектор с тысячами измерений, каждое из которых представляет собой частоту одного из слов текста. Он работает очень хорошо, поскольку наш набор данных не очень надежен. Пространство с большими габаритами означает, что это отличная модель, позволяющая избежать чрезмерной подгонки.
  • Модель случайных лесов, которая представляет собой метод упаковки, включающий ансамбль деревьев, работает с очень разумной точностью, оценивая точную модель путем перетасовки текстовых функций. Он обязательно будет более мощным для более надежного набора данных (корпуса)
  • Наивная байесовская модель дает нам точность 95% как с Count, так и с TFIDF Vectorizer, что довольно хорошо.


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

Надеюсь, вам понравился этот пост. Продолжайте майнить и продолжайте взламывать!