У меня есть набор данных, который имеет атрибут бинарного класса. Имеется 623 случая с классом +1 (рак положительный) и 101 671 случай с классом -1 (рак отрицательный).
Я пробовал различные алгоритмы (Наивный Байес, Случайный лес, AODE, C4.5), и все они имеют недопустимые ложноотрицательные отношения. Случайный лес имеет наивысшую общую точность прогноза (99,5%) и самое низкое соотношение ложных отрицательных результатов, но все же не соответствует 79% положительных классов (т. Е. Не обнаруживает 79% злокачественных опухолей).
Есть идеи, как я могу улучшить эту ситуацию?
Спасибо!
Ответы:
Классовый дисбаланс - очень распространенная проблема. Вы можете либо пересчитать положительный класс (или отрицательный), либо добавить веса классов.
В этом случае следует помнить, что точность не очень полезная метрика. Вы могли бы рассмотреть счет AUC или F1 .
Изменение порога принятия решения может показаться привлекательным, но, очевидно, приведет к (в этом случае, вероятно, радикально) увеличению ложных срабатываний (хотя, возможно, FP не так плохи, как FN в случае медицинского диагноза, если тесты не слишком дорогие).
Более глубокий анализ вариантов в случае дисбаланса класса представлен здесь .
источник
Хотя на самом деле ответом всегда является
true
илиfalse
, вы можете сделать атрибуты вашего класса не метками, а числами с плавающей запятой, то есть 1,0 и 0,0 (или 100 и 0). То есть вы можете сформулировать это как проблему регрессии , а не как проблему классификации.Тогда прогнозируемый результат также будет числами в этом спектре, то есть вероятностями, а не метками. Ваша текущая реализация по существу эквивалентна регрессионной модели с порогом 0,5.
При таком выводе вы или ваш клиент можете определить допустимый порог (например, 0,3). Конечно, ложных срабатываний будет больше, но для некоторых приложений, таких как обнаружение рака, это оптимально.
Избыточная выборка (положительные значения) или недостаточная выборка (отрицательные значения) также являются способами исправить это, но должны быть выполнены вдумчиво, могут принести в жертву точность и все же пожертвовать контролем для перемещения порога после создания данных и обучения.
источник
Недостаточная и избыточная выборка как метод уже упоминались, но я подумал, что укажу на часто используемый вариант:
SMOTE : Синтетическая методика передискретизации меньшинств
Он был представлен в этом документе в 2002 году . Вот фрагмент из резюме:
Вы можете использовать его легко в Python, используя в
imbalanced-learn
пакет , который содержится в CONTRIB модуле Scikit-Learn и должен быть установлен отдельно.Этот пакет включает методы для комбинирования избыточной / недостаточной выборки, а также набор утилит для генерации пакетов данных, которые могут поступать в Keras / Tensorflow.
источник