Лучший способ обработки несбалансированного набора данных для многоклассовой классификации в Auto-Sklearn - PullRequest
2 голосов
/ 20 февраля 2020

Я использую Auto-Sklearn и у меня есть набор данных с 42 классами, которые сильно разбалансированы. Как лучше всего справиться с этим дисбалансом? Насколько я знаю, существует два подхода к обработке несбалансированных данных в рамках машинного обучения. Либо с помощью механизма передискретизации, такого как избыточная или недостаточная выборка (или их комбинация), либо для решения его на уровне алгоритма c путем выбора индуктивного смещения, которое потребовало бы глубоких знаний об алгоритмах, используемых в Auto -Sklearn. Я не совсем уверен, как справиться с этой проблемой. В любом случае возможно ли устранить дисбаланс непосредственно в Auto-Sklearn или мне нужно использовать стратегии повторной выборки, предлагаемые, например, imbalanced-learn? Какую оценку метри c следует использовать после расчета моделей? Roc_auc_score для нескольких классов доступен, так как sklearn == 0.22.1. Однако Auto-Sklearn поддерживает только sklearn до версии 0.21.3. Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 21 февраля 2020

Другой метод - установить веса для классов в соответствии с их размером. Усилия очень мало, и, кажется, работает нормально. Я искал установки весов в auto-sklearn, и вот что я нашел:

https://github.com/automl/auto-sklearn/issues/113

Например, в scikit svm у вас есть параметр 'class_weight' :

https://scikit-learn.org/stable/auto_examples/svm/plot_separating_hyperplane_unbalanced.html

Надеюсь, это поможет:)

2 голосов
/ 20 февраля 2020

Одним из способов, с помощью которого я работал в прошлом при работе с сильно несбалансированными наборами данных, является Syntheti c Метод пересчета меньшинств (SMOTE). Вот бумага для лучшего понимания:

SMOTE Paper

Это работает путем синтетической передискретизации класса или классов меньшинства в этом отношении. Чтобы процитировать статью:

Для класса меньшинства передискретизируют, беря каждую выборку класса меньшинства и вводя примеры синтеза c вдоль отрезков, соединяющих любой / все k ближайших соседей класса меньшинства. В зависимости от требуемой величины избыточной выборки, случайным образом выбираются соседи из k ближайших соседей.

Это затем сместится ближе к балансировке вашего набора данных. Существует реализация SMOTE в пакете imblearn в python.

Вот хорошее прочтение о различных алгоритмах передискретизации . Включает передискретизацию с использованием ADASYN , а также SMOTE .

Надеюсь, это поможет.

0 голосов
/ 22 февраля 2020

Для тех, кто заинтересован и в качестве дополнения к полученным ответам, я настоятельно рекомендую следующую статью:

Лемнару, C., & Potolea, R. (2011, июнь). Несбалансированные проблемы классификации: систематика c исследование, проблемы и лучшие практики. В Международной конференции по корпоративным информационным системам (стр. 35-50). Springer, Berlin, Heidelberg.

Авторы утверждают, что:

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

Так как, например, ChaLearn AutoML Challenge 2015 использовал сбалансированную точность, sklearn утверждает, что это подходящая метрика c для несбалансированных данных и Auto -Sklearn был в состоянии вычислить хорошо подходящие модели, я собираюсь попробовать. Даже без передискретизации результаты были намного «лучше» (с точки зрения качества прогноза), чем просто использование точности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...