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

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

Для этого теста я собрал около 1000 сообщений с форумов по настольному теннису и гребле на каноэ. Чтобы проверить производительность различных моделей, я использовал векторизаторы TF-IDF и CVEC. Во всех случаях TF-IDF привел к более высокой точности тестовых наборов данных. Я использовал GridSearchCV для настройки моделей, чтобы найти оптимальные параметры для каждой из 9 моделей ниже. Классификатор голосования использовал три лучшие модели (на основе точности).

Меня не удивило, что TF-IDF работает лучше, чем CVEC. Интуитивное наказание общих слов и возвышение более редких слов имеет смысл для проблемы классификации НЛП.

Я был удивлен тем, как работает AdaBoost. Тем не менее, я кормил его ТЕЛЕЖКОЙ. Если бы я использовал Random Forest в качестве базового классификатора, я считаю, что он мог бы работать лучше. Кроме того, все мои модели были переобучены, а AdaBoost лучше всего работает со слабыми учениками, поэтому тестировать этот алгоритм может быть неподходящим вариантом использования. Возможно, мне следовало попробовать вместо этого Extra Trees, учитывая переоснащение, которое я испытал.

Ниже приведена разбивка модели по модели, отсортированная от самого высокого показателя к самому низкому:

Логистическая регрессия:

Логистическая функция является ядром логистической регрессии.
Логистическая регрессия предполагает, что X1 — Xn линейно связаны с логарифмическими шансами, что y = 1, что все ошибки независимы друг от друга, что распределение ошибок соответствует распределению Бернулли, и что все независимые переменные не зависят друг от друга.

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

Наивный байесовский метод (многочлен):

Используя теорему Байеса, модели классификации Наивного Байеса обычно используются в задачах классификации НЛП. Модель предполагает, что каждое из слов в тексте независимо. Поскольку модель обычно хорошо работает на тестовых данных в задачах НЛП, мы готовы сделать это предположение. Для нашей модели мы будем использовать полиномиальную наивную байесовскую модель, поскольку столбцы X являются целыми числами. Если бы у нас были другие типы данных, мы бы использовали модели Бернулли или гауссовские наивные байесовские модели.

Классификатор голосования:

Использование классификатора голосования для голосования между MultiNomial NB, Linear Regression и RF (три модели, которые дали нам самую высокую точность теста). Этот классификатор запускает три введенные нами модели, сравнивает классификации и голосует за победителя. Если две модели указывают, что стойка предназначена для гребли на каноэ, а одна указывает, что это настольный теннис, то результатом будет то, что мы классифицируем стойку как каноэ.

Поскольку TF-IDF показал лучшие результаты (наивысшая точность теста) для трех моделей, которые мы используем в классификаторе голосования, здесь мы используем только TF-IDF.

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

Случайный лес использует классическое дерево решений и добавляет бутстрэппинг (выборка X строк с заменой) и рандомизированный выбор признаков. На основе гиперпараметра «n_features», который я установил в GridSearch, было создано несколько деревьев. Используя гиперпараметр max_depth, я задаю количество признаков, которые будут учитываться в деревьях. Модели случайного леса обычно имеют более низкую дисперсию, чем классические деревья решений или деревья решений в мешках. Поскольку я видел высокую дисперсию в моделях наивного Байеса и логистической регрессии, модель случайного леса показалась мне хорошим вариантом для проверки данных.

Классификатор AdaBoost:

Классификатор AdaBoost сначала сопоставляет данные с классификатором DecisionTree, а затем сопоставляет больше копий дерева, присваивая более высокие веса случаям, которые были неправильно классифицированы в более ранних запусках. Это должно дать нам модель, которая работает более точно на тестовых данных (невидимых).

В дополнение к настройке гиперпараметров, которые мы установили в более ранних моделях, я также ввел значения для количества оценок, которые мы хотим использовать, сколько уровней может содержать наше дерево и n_learning_rate (сколько вносит вклад каждый классификатор).

Заключение

В целом все модели показали себя хорошо. Они значительно превзошли базовую точность 0,50, с которой я их сравнивал. Было очень интересно посмотреть, как они выступили относительно друг друга. Я ожидал, что алгоритмы повышения и голосования превзойдут более «базовые» модели. Я был удивлен, что логистическая регрессия оказалась наиболее точной. Это упражнение, безусловно, то, что я буду выполнять в будущих проектах — запуск и сравнение нескольких моделей — важный шаг к поиску высокопроизводительной модели.