Как сбалансировать тематический набор данных двух классов, когда одна из тем слишком широкая, а другая очень узкая?

#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 (максимизации ожиданий).