Я нашел, что Он и Гарсия (2009) являются полезным обзором обучения в несбалансированных классовых проблемах. Вот несколько определенно не всеобъемлющих вещей для рассмотрения:
Основанные на данных подходы:
Можно отобрать класс большинства или класс меньшинства. (Брейман указал, что это формально эквивалентно назначению неоднородных затрат на неправильную классификацию.) Это может вызвать проблемы: недопущение выборки может привести к тому, что учащийся упустит аспекты класса большинства; передискретизация увеличивает риск переобучения.
Существуют методы «информированной недостаточной выборки», которые уменьшают эти проблемы. Одним из них является EasyEnsemble , который независимо выбирает несколько подмножеств из класса большинства и создает несколько классификаторов, комбинируя каждое подмножество со всеми данными класса меньшинства.
SMOTE (Техника избыточной выборки синтетического меньшинства) или SMOTEBoost (комбинируя SMOTE с бустингом) создают синтетические экземпляры класса меньшинства путем создания ближайших соседей в пространстве признаков. SMOTE реализован в R в пакете DMwR (который сопровождает книгу Луиса Торго «Интеллектуальный анализ данных с использованием R, обучение с использованием конкретных примеров», CRC Press 2016 ).
Подходы к модели
Примените специфичные для класса веса в вашей функции потерь (большие веса для случаев меньшинства).
Для подходов, основанных на деревьях, вы можете использовать расстояние Хеллингера в качестве примесной функции узла, как рекомендовано в Cieslak et al. «Деревья решений по расстоянию Хеллингера надежны и нечувствительны к перекосам» ( код Weka здесь .)
Используйте классификатор одного класса , изучая (в зависимости от модели) плотность вероятности или границу для одного класса и рассматривая другой класс как выбросы.
Конечно, не используйте точность как показатель для построения модели. Каппа Коэна - разумная альтернатива.
Модельные подходы к оценке
Если ваша модель возвращает прогнозируемые вероятности или другие оценки, выберите порог принятия решения, который обеспечивает соответствующий компромисс ошибок (используя набор данных, независимый от обучения и тестирования). В R пакет OptimalCutpoints реализует ряд алгоритмов, в том числе чувствительных к стоимости, для определения отсечки.
Насколько я понимаю, это активная область исследований в сообществе машинного обучения, и нет хороших ответов, а есть большое и растущее число потенциальных решений. Скорее всего, вы получите лучшие ответы, если укажете конкретные алгоритмы, которые вы рассматриваете.
Если вы используете параметрическую модель (логистическая регрессия), это не должно вызывать проблем, и вы можете просто изменить пороговое значение в зависимости от функции потерь (стоимость ложных отрицательных значений и ложных положительных результатов).
Если вы используете алгоритмы машинного обучения, это может быть сложнее. Макс Кун изо всех сил пытается обобщить проблему в главе 16 «Прикладное прогнозное моделирование». Но сложная тема для подведения итогов. Если вы не хотите покупать книгу, код R доступен в пакете AppliedPredictiveModeling для этой главы и может быть достаточным в зависимости от вашего знакомства с R и используемых алгоритмов.
Обычно обсуждение вращается вокруг заниженной / избыточной выборки +/- чувствительных к стоимости алгоритмов. С такими вариациями, как Jous-Boost также возможно
Пример такого рода обсуждения: Чен и др. «Использование случайного леса для изучения несбалансированных данных» http://statistics.berkeley.edu/sites/default/files/tech-reports/666.pdf
источник
Вы можете взглянуть на реализацию scikit-learn. обратите внимание на аргумент class_ weight, который может иметь значения словаря весов классов или 'auto':
класс sklearn.svm.SVC (C = 1.0, ядро = 'rbf', степень = 3, гамма = 0.0, coef0 = 0.0, сжатие = True, вероятность = False, tol = 0.001, cache_size = 200, class_weight = None, подробный = False, max_iter = -1, random_state = Нет)
Вы можете поиграть со значением аргумента class_weight, который может быть словарем веса класса или 'auto'. В режиме 'auto' алгоритм обучения автоматически присваивает веса каждому классу на основе количества выборок в каждом из них.
scikit-learn имеет несколько других алгоритмов классификации, некоторые из которых принимают веса классов.
источник