Классовый дисбаланс в контролируемом машинном обучении


47

Это вопрос в целом, не относящийся к какому-либо методу или набору данных. Как мы решаем проблему дисбаланса классов в обучении с использованием контролируемой машины, где число 0 составляет около 90%, а число 1 составляет около 10% в вашем наборе данных. Как оптимально обучить классификатор.

Одним из способов, которым я следую, является выборка, чтобы сбалансировать набор данных, а затем обучить классификатор и повторить это для нескольких выборок.

Я чувствую, что это случайно, есть ли рамки для решения подобных проблем.

Ответы:


45

Есть много рамок и подходов. Это повторяющаяся проблема.

Примеры:

  • Отбор проб . Выберите подвыборку из наборов нулей, чтобы их размер соответствовал набору единиц. Существует очевидная потеря информации, если вы не используете более сложную структуру (например, я бы разделил первый набор на 9 меньших, взаимоисключающих подмножеств, обучил модель для каждого из них и объединил модели).
  • Чрезмерная выборка . Производите искусственные, пока пропорция не будет 50% / 50%. Мой предыдущий работодатель использовал это по умолчанию. Для этого есть много фреймворков (я думаю, что SMOTE является самым популярным, но я предпочитаю более простые приемы, такие как Noisy PCA ).
  • Один класс обучения . Просто предположите, что ваши данные имеют несколько реальных точек (единиц) и множество случайных шумов, которые физически не существуют, просочились в набор данных (все, что не является шумом). Используйте алгоритм для удаления шума из данных вместо алгоритма классификации.
  • Обучение с учетом затрат . Используйте функцию асимметричной стоимости, чтобы искусственно сбалансировать процесс обучения.

Некоторые освещенные обзоры, в порядке возрастания технической сложности \ уровня детализации:

Да, и, кстати, 90% / 10% не является несбалансированным. Наборы данных о мошеннических операциях с картами часто разделяются на 99,97% / 0,03%. Это не сбалансировано.


Только что заметил, что Noisy PCA, который я цитировал, может рассматриваться как Oversampling, Regularization или Jitter, в зависимости от деталей реализации.
Лукас Галлиндо

Спасибо Лукасу за ресурсы. Очень помогает. У меня есть особая проблема, когда все мои образцы помечены как «1». Однако в действительности эти образцы имеют минимальную примесь, то есть существуют записи, которые на самом деле должны быть «0», но помечены как «1». Я считаю, что такого рода проблемы относятся к одной классовой классификации. Правильно ли мое понимание. Есть ли общая структура, используемая для их идентификации, изначально я пытался кластеризовать, но это не работает.
NG_21

1
Все эти алгоритмы должны иметь некоторые данные, помеченные как ноль, а некоторые как данные со 100-процентной достоверностью о правильности метки (или что-то очень близкое к 100%). У вас есть все, но вы знаете, что небольшой процент этих данных помечен неправильно, другая ситуация. Без каких-либо знаний о области применения я бы атаковал ее с помощью обнаружения аномалий, а затем пометил аномалии как ноль. Затем попробуйте какой-нибудь алгоритм классификации (возможно, One Class Learning). Обладая знаниями о предметной области, я бы прежде всего обратился за помощью к эксперту по предметной области.
Лукас Галлиндо

13

Это сильно зависит от метода обучения. Большинство подходов общего назначения имеют один (или несколько) способов справиться с этим. Распространенным решением является назначить более высокий штраф за неправильную классификацию для класса меньшинства, заставляя классификатор распознавать их (SVM, логистическая регрессия, нейронные сети, ...).

Изменение выборки также возможно, как вы упомянули. В этом случае избыточная выборка для класса меньшинства обычно является лучшим решением, чем недостаточная выборка для класса большинства.

Некоторые методы, такие как случайные леса, не нуждаются в каких-либо модификациях.


Благодарю. Можете ли вы указать на любой ресурс, где это объясняется некоторыми примерами. Есть ли способ добиться этого в R / Python, не прибегая к написанию алгоритма с нуля.
NG_21

1
Проверьте первую функцию в этом пакете R: cran.r-project.org/web/packages/unbalanced/unbalanced.pdf
Лукас Галлиндо

7
Почему Случайный лес не нуждается в каких-либо модификациях? Я думаю, что вы все еще можете назначить вес класса
Mac

4

Часто проблема заключается не в частоте, а в абсолютном количестве случаев в классе меньшинства. Если у вас нет достаточного отклонения в цели по сравнению с изменением характеристик, это может означать, что алгоритм не может классифицировать вещи очень точно.

Одна вещь состоит в том, что штраф за неправильную классификацию может использоваться на этапе классификации, а не на этапе оценки параметра, если таковой имеется. Некоторые методы не имеют понятия параметра, они просто создают прямые метки классов или вероятности классов.

Когда у вас есть вероятностный оценщик, вы можете принять решение о классификации на основе теоретико-информационного обоснования или комбинации стоимости бизнеса.


1

Добавьте два трюка: 1. используйте CDF, посчитайте частоту в ваших данных обучения или используйте очень большую проверку (если ваш набор тестов не изменится, но набор проверки должен иметь то же распределение с набором обучения), затем сортируйте свой прогноз и получите первые X% (вы считаете частоту ранее) для одного класса, а другие - это / 2. взвешенная выборка, модель будет стремиться к взвешенной выборке, вы можете использовать выборочную дисперсию v. например. весит = 1/2 (1- (vmax - vi) / vmax)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.