У меня есть набор данных (взвешенные слова tf-idf) с несколькими классами, которые я пытаюсь предсказать.Мои занятия несбалансированы.Я хотел бы использовать подход классификации «один против остальных» с некоторыми классификаторами (например, с многозначным наивным байесовским), используя OneVsRestClassifier из sklearn.
Кроме того, я хотел бы использовать пакет imbalanced-learn (скорее всего, одну из комбинаций повышающей и понижающей дискретизации) для улучшения моих данных.Обычный подход использования imbalanced-learn:
from imblearn.combine import SMOTEENN
smote_enn = SMOTEENN(random_state=0)
X_resampled, y_resampled = smote_enn.fit_resample(X, y)
Теперь у меня есть набор данных с примерно одинаковым количеством случаев для каждой метки.Затем я использовал бы классификатор для данных с передискретизацией.
from sklearn.multiclass import OneVsRestClassifier
from sklearn.naive_bayes import MultinomialNB
ovr = OneVsRestClassifier(MultinomialNB())
ovr.fit(X_resampled, y_resampled)
Но: теперь существует огромный дисбаланс для каждой этикетки, когда она установлена, потому что у меня всего более 50 этикеток.Правильно?Я полагаю, что мне нужно применять метод повышения / понижения для каждого лейбла, а не делать это один раз в начале.Как я могу использовать пересчет для каждой метки?