Мультиклассовая классификация текстов с MLlib и PySpark

0
3210
Добавить в избранное

MLlib, PySpark и многоклассовая классификация криминальных сводок с помощью нескольких алгоритмов. Не пропустите! Будет интересно.

Мультиклассовая классификация текстов с PySpark

Мы обрабатываем так много информации ежедневно, что возможность передавать и анализировать ее в реальном времени стала очень ценной. Apache Spark это умеет, благодаря чему стремительно набирает популярность. Он достаточно быстр для выполнения исследовательских запросов без выборки. Многие эксперты Data Science рекомендуют его.

Мы будем использовать библиотеку машинного обучения Spark (MLlib) для многоклассовой классификации текста c помощью PySpark. Если вы хотите увидеть реализацию со Scikit-Learn, взгляните на этот материал.

Данные

Задача состоит в том, чтобы классифицировать описания преступлений в Сан-Франциско по 33 предопределенным категориям. Исходные данные можно загрузить из Kaggle.

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

  • Входные данные: описание преступления. Например, STOLEN AUTOMOBILE (украденный автомобиль).
  • Выходные данные: категория. Например, VEHICLE THEFT (транспортная кража).

Для решения мы будем использовать различные методы извлечения признаков и алгоритмы контролируемого машинного обучения Spark.

Получение и извлечение данных

Загрузить CSV-файл очень просто с помощью csv-пакетов Spark.

Набор данных загружен, можно начинать анализ. Убираем ненужные столбцы и выводим первые 5 строк:

Чтобы распечатать схему в формате дерева, нужно использовать функцию printSchema().

Получим самые многочисленные категории преступлений:

А вот ТОП-20 описаний:

Классификация по этапам

Spark Machine Learning Pipelines API похож на Scikit-Learn. Наша классификация состоит из трех шагов:

  1. RegexTokenizer – токенизация с использованием регулярного выражения;
  2. StopwordsRemover – удаление стоп-слов;
  3. CountVectors – расчет векторов (метод «мешок слов»).

StringIndexer

StringIndexer кодирует столбец строковых меток в столбец индексов. Они находятся в интервале [0, numLabels) и отсортированы по частоте, поэтому самая частая метка получает индекс 0.

В нашем случае столбец меток (Категории) будет перекодирован в индексы от 0 до 32. Самая популярная метка LARCENY/THEFT (кража).

Обучающие и тестовые наборы

Размер тренировочной выборки: 5185

Размер тестовой выборки: 2104

Обучение и оценка моделей

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

Логистическая регрессия с использованием векторов слов

0.9610787444388802

Отличный результат!

Логистическая регрессия с использованием метода TF-IDF

0.9616202660247297

Результат такой же.

Кросс-валидация

Теперь проведем кросс-валидацию, чтобы настроить гиперпараметры.

0.9851796929217101

Производительность улучшилась.

Наивный Байесовский подход

0.9625414629888848

Случайный лес

0.6600326922344301

Random forest – очень хороший, надежный и универсальный метод, однако для многомерных разреженных данных это не лучший выбор.

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

Исходный код проекта можно найти на  Github.

Перевод статьи Susan LiMulti-Class Text Classification with PySpark

Много интересных статей по Data Science

Интересуетесь Data Science?

Подпишитесь на нашу рассылку, чтобы получать больше интересных материалов:

И не беспокойтесь, мы тоже не любим спам. Отписаться можно в любое время.




Добавить комментарий