#python #nltk #prediction #text-classification
#python #nltk #прогнозирование #текст-классификация
Вопрос:
У меня есть простое предсказание, где набор данных состоит из 2300 выборок для каждого класса, например, всего = 4600 (двоичная классификация). Первый класс охватывает все типы новостей, за исключением другого класса, который является очень узкой темой. Я использовал классификатор наивного Байеса NLTK для выполнения задачи, где классификатор берет образцы с одним горячим кодированием. Хотя классификатор хорошо зарекомендовал себя в тестовой части набора данных (точность 94%), он с треском проваливается при классификации новостей обхода (в рабочей среде). Я думаю, проблема связана с тем, что два класса несбалансированы в реальном word. Если причина в этом, то как преодолеть эту проблему? как сбалансировать мой набор данных? Предположим, что я могу дополнительно собрать много образцов для широкого класса (A), но очень мало образцов для узкого класса (B).
Ответ №1:
Вы можете использовать технику синтетической передискретизации меньшинства, SMOTE, чтобы увеличить размер класса меньшинства.
from imblearn.over_sampling import SMOTE
sm = SMOTE()
x1, y1 = sm.fit_sample(X_train, Y_train)
Кроме того, наивный байесовский алгоритм не является хорошим алгоритмом для несбалансированных классов, попробуйте использовать случайный лес (без SMOTE) или деревья с градиентным усилением (с SMOTE).
Комментарии:
1. Итак, SMOTE — это классификатор?
2. Нет, классификаторы — это наивные байесовские, деревья с градиентным усилением, нейронные сети, SVM, логистическая регрессия, деревья решений и т.д. SMOTE — это алгоритм, который учитывает евклидово расстояние для создания большего количества примеров в классе minority, следуя аналогичному распределению вашего существующего класса minority.
3. Я понял основную концепцию SMOTE, но как применить SMOTE для образцов, представленных с использованием one-hot-encoding? или я должен представить их по-другому?
4. Затем вы можете использовать алгоритм EM (максимизации ожиданий).