Несбалансированные классы - Как минимизировать ложные негативы?

11

У меня есть набор данных, который имеет атрибут бинарного класса. Имеется 623 случая с классом +1 (рак положительный) и 101 671 случай с классом -1 (рак отрицательный).

Я пробовал различные алгоритмы (Наивный Байес, Случайный лес, AODE, C4.5), и все они имеют недопустимые ложноотрицательные отношения. Случайный лес имеет наивысшую общую точность прогноза (99,5%) и самое низкое соотношение ложных отрицательных результатов, но все же не соответствует 79% положительных классов (т. Е. Не обнаруживает 79% злокачественных опухолей).

Есть идеи, как я могу улучшить эту ситуацию?

Спасибо!

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

Ответы:

9

Классовый дисбаланс - очень распространенная проблема. Вы можете либо пересчитать положительный класс (или отрицательный), либо добавить веса классов.

В этом случае следует помнить, что точность не очень полезная метрика. Вы могли бы рассмотреть счет AUC или F1 .

Изменение порога принятия решения может показаться привлекательным, но, очевидно, приведет к (в этом случае, вероятно, радикально) увеличению ложных срабатываний (хотя, возможно, FP не так плохи, как FN в случае медицинского диагноза, если тесты не слишком дорогие).

Более глубокий анализ вариантов в случае дисбаланса класса представлен здесь .

jamesmf
источник
3

Хотя на самом деле ответом всегда является trueили false, вы можете сделать атрибуты вашего класса не метками, а числами с плавающей запятой, то есть 1,0 и 0,0 (или 100 и 0). То есть вы можете сформулировать это как проблему регрессии , а не как проблему классификации.

Тогда прогнозируемый результат также будет числами в этом спектре, то есть вероятностями, а не метками. Ваша текущая реализация по существу эквивалентна регрессионной модели с порогом 0,5.

При таком выводе вы или ваш клиент можете определить допустимый порог (например, 0,3). Конечно, ложных срабатываний будет больше, но для некоторых приложений, таких как обнаружение рака, это оптимально.

Избыточная выборка (положительные значения) или недостаточная выборка (отрицательные значения) также являются способами исправить это, но должны быть выполнены вдумчиво, могут принести в жертву точность и все же пожертвовать контролем для перемещения порога после создания данных и обучения.

Адам Биттлингмайер
источник
0

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

SMOTE : Синтетическая методика передискретизации меньшинств

Он был представлен в этом документе в 2002 году . Вот фрагмент из резюме:

В этой статье показано, что комбинация нашего метода избыточной выборки для младшего (ненормального) класса и недостаточной выборки для большинства (нормального) класса может обеспечить лучшую производительность классификатора (в пространстве ROC), чем только недостаточная выборка для большинства класса.


Вы можете использовать его легко в Python, используя в imbalanced-learnпакет , который содержится в CONTRIB модуле Scikit-Learn и должен быть установлен отдельно.

imbalanced-learn - это пакет Python, предлагающий ряд методов повторной выборки, обычно используемых в наборах данных, демонстрирующих сильный дисбаланс между классами.

Этот пакет включает методы для комбинирования избыточной / недостаточной выборки, а также набор утилит для генерации пакетов данных, которые могут поступать в Keras / Tensorflow.

n1k31t4
источник