Проблема классификации текстовых данных с использованием различных алгоритмов машинного обучения

Если вы начинающий специалист по данным, вы наверняка сталкивались с какими-то «текстовыми данными», такими как твиты, заголовки газет, обзоры и т. Д. И вы, возможно, слышали о регулярных проектах, таких как классификация спам-фильтров, анализ настроений и т.

В этом проекте я взял набор данных об отзывах пользователей об использовании наркотиков (лекарственных) через твиты Twitter. Это пример контролируемого обучения с двумя классами, помеченными как «0» (лекарство не вызвало побочных эффектов) и «1» (лекарство вызвало побочный эффект).

Давайте начнем с методологии, примененной в этом проекте. Я использовал язык программирования Python с библиотеками Numpy, Pandas, Sci-kit, Matplotlib & Seaborn, NLTK.

Исследовательский анализ данных - После загрузки файла .csv в Pandas мы видим, что в наборе данных всего два столбца. Используя счетный график Сиборна, он показывает, что это несбалансированный набор данных с классом «0» в большинстве и классом «1» в меньшинстве. Мы увидим его значение на более позднем этапе проекта. Столбец твита содержит очищенные данные без хэштегов.

  • Предварительная обработка

Обработка текста или очистка строк важны перед тем, как перейти к задаче построения модели. Я использовал NLTK Snowball Stemmer для нормализации лексикона, чтобы привести различные варианты слов в единую форму, например «говорить», «разговаривать», «говорить» в «разговор», удаляя суффиксы вроде -ed, -ing. (Мы также можем попробовать технику лемматизации).

Также я попытался удалить числа. Специальные символы, такие как -,: и т. Д., Были заменены пробелами, чтобы избежать объединения двух слов. Например, «индуцированный азитромицином», «-» заменяется пробелом, иначе оно становится неузнаваемым словом.

Ссылка на полный код Python приведена в конце статьи.

Еще один важный шаг предварительной обработки - удаление шумовых слов, которые либо очень часто встречаются во всех твитах / документах, либо очень редки. Вы можете проверить список таких случаев как для приведенных ниже случаев, так и для следующего кода, чтобы удалить их из нашего набора данных. Это поможет в классификации. Последним шагом будет токенизация каждого предложения или строки в массив строк.

  • Создание конвейера

Для преобразования текста в числа я воспользовался техникой TfidfVectorizer. Я создал массив конвейеров, который включает некоторые из хорошо известных моделей машинного обучения, такие как классификатор случайного леса, логистическая регрессия и т. Д.

Эффективность модели

Мы попытаемся рассчитать различные параметры, такие как оценка F1, оценка точности, отзыв, время обучения и время тестирования для всех моделей в наборе тестовых данных. Я использовал Matplotlib для визуализации производительности каждой модели по всем показателям.

Вывод

  • Судя по результатам F1, все модели работают довольно хорошо, причем Ridge Classifier и SVC являются лучшими. Регуляризация, используемая в классификаторе Ридж и опорных векторах в SVC, делает эти два мощных алгоритма машинного обучения. Но мы знаем, что эти данные несбалансированы, и здесь важна точность / отзыв. Класс 1 - меньшинство.
  • Если посмотреть на Precision, Random Forest явно показывает лучшие результаты. Методы ансамбля часто бывают мощными из-за метода усреднения по нескольким деревьям. Но Precision говорит только о положительном классе, а высокая точность может по-прежнему работать плохо, когда мы рассматриваем ложноотрицательные (где прогноз равен 0, а фактический - 1).

  • Показатель отзыва будет гораздо лучшим показателем здесь, поскольку класс 1 находится в меньшинстве и определяет «побочный эффект, вызванный лекарством», который важен для бизнес-кейса, который мы хотели бы свести к минимуму ложноотрицательных результатов в модели. Полная модель NB (наивный байесовский метод для несбалансированных данных) из-за большего веса, присвоенного технике класса меньшинства, а классификатор Ridge из-за регуляризации имеет высокие оценки отзыва. Скорее всего, они будут лучшими моделями для сценариев реальной жизни.
  • Время обучения также является важным показателем на этапе реализации проекта. Реальный бизнес будет постоянно требовать обучения модели через определенный период времени с новыми данными, поступающими из источника. Здесь, как и ожидалось, SVC и Random Forest занимают больше всего времени на обучение из-за своей сложности.
  • Время тестирования играет важную роль на этапе прогнозирования, и только SVC здесь является исключением из-за сложности вычислений.
  • На основе анализа мы можем выбрать для этих данных Ridge Classifier или Compliment Naive Bayes в основном из-за высокого показателя отзыва. И, учитывая оценку F1 для всей модели, чем выше, тем лучше.

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

Для набора данных и полного кода Python вы можете пройти по следующей ссылке GitHub.



Удачного обучения !!!