Объедините алгоритмы повторной выборки и спецификации c для дисбаланса классов - PullRequest
1 голос
/ 22 апреля 2020

Я работаю над проблемой классификации текста с несколькими метками (Всего целевых меток 90). Распределение данных имеет длинный хвост и около 1900 тысяч записей. В настоящее время я работаю над небольшой выборкой из примерно 100 тыс. Записей с похожим целевым распределением.

Некоторые алгоритмы обеспечивают функциональность для обработки дисбаланса классов, например PA C, LinearSV C. В настоящее время я также делаю SMOTE для генерации выборок для всех, кроме большинства, и RandomUnderSampler для подавления дисбаланса в классе большинства.

Правильно ли использовать оба параметра алгоритма и конвейер imblearn одновременно для обработки дисбаланса класса?

feat_pipeline = FeatureUnion([('text', text_pipeline)])

estimators_list = [
                   ('PAC',PassiveAggressiveClassifier(max_iter=5000,random_state=0,class_weight='balanced')),
                   ('linearSVC', LinearSVC(class_weight='balanced'))
                  ]
estimators_ensemble = StackingClassifier(estimators=estimators_list, 
                                         final_estimator=LogisticRegression(solver='lbfgs',max_iter=5000))
ovr_ensemble = OneVsRestClassifier(estimators_ensemble)

classifier_pipeline = imblearnPipeline([
        ('features', feat_pipeline),
        ('over_sampling', SMOTE(sampling_strategy='auto')), # resample all classes but the majority class;
        ('under_sampling',RandomUnderSampler(sampling_strategy='auto')), # resample all classes but the minority class;
        ('ovr_ensemble', ovr_ensemble)
    ])

1 Ответ

2 голосов
/ 22 апреля 2020

Правильно ли использовать оба параметра алгоритма и конвейер imblearn одновременно для обработки дисбаланса класса?

Давайте уделим минуту, чтобы подумать, что это может означать, и если это действительно имеет смысл.

Specifi c алгоритмы (или настройки алгоритмов) для обработки дисбаланса класса, естественно, ожидают некоторого фактический дисбаланс в данных.

Теперь, если вы уже искусственно сбалансировали свои данные (с SMOTE, недосэмплинг большинства класса и т. Д. c), с чем столкнутся ваши алгоритмы в конце день - это сбалансированный набор данных, а не несбалансированный. Излишне говорить, что эти алгоритмы не могут «знать», что этот баланс в конечных данных, которые они видят, является искусственным; так что, с их точки зрения, нет дисбаланса - следовательно, нет необходимости в каком-либо специальном рецепте для запуска.

Итак, дело не в том, что это неправильно , но в таком в этом случае эти специфические c алгоритмы / настройки на самом деле не будут полезны, в том смысле, что у них не будет ничего лишнего в отношении обработки дисбаланса классов.

Цитирование из более старого ответа моего (совершенно другой вопрос, но общая идея держится горизонтально):

Поле глубоких нейронных сетей еще (очень) молодое, и это правда, что оно еще не установило sh его руководящие принципы "наилучшей практики"; добавьте тот факт, что благодаря удивительному сообществу, в реализациях с открытым исходным кодом есть все виды инструментов, и вы можете легко оказаться в (по общему признанию) заманчивой ситуации, смешивая вещи только потому, что они оказываются доступными. Я не обязательно говорю, что это то, что вы пытаетесь сделать здесь - я просто призываю к большей осторожности при объединении идей, которые, возможно, не были предназначены для совместной работы ...

...