Проблема классификации текстовых данных с использованием различных алгоритмов машинного обучения
Если вы начинающий специалист по данным, вы наверняка сталкивались с какими-то «текстовыми данными», такими как твиты, заголовки газет, обзоры и т. Д. И вы, возможно, слышали о регулярных проектах, таких как классификация спам-фильтров, анализ настроений и т.
В этом проекте я взял набор данных об отзывах пользователей об использовании наркотиков (лекарственных) через твиты 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.
Удачного обучения !!!