Scikit Learn: асимметричный отчет о высокой точности
Я использую scikit-learn для выполнения двоичной классификации, однако метки не распределены равномерно по всему набору данных. В тех случаях, когда я заинтересован в прогнозировании класса меньшинства, у меня есть некоторые опасения по поводу показателя средней точности, предоставляемого metrics.average_precision_score
, Когда я запускаю эксперименты и распечатываю отчет о классификации, я вижу хорошие результаты по точности в целом, но это явно видно из модели, которая хорошо подходит для прогнозирования класса большинства, что-то вроде этого:
precision recall f1-score support
label of interest 0.24 0.67 0.35 30
non-label 0.97 0.81 0.88 300
average precision
Затем сообщается, что где-то вокруг 0.9752
, Об этом среднем показателе точности сообщается в отношении класса большинства, который на самом деле не тот класс, который я заинтересован в идентификации. Есть ли способ изменить metrics.average_precision_score
функция сообщать метрику относительно класса интересов меньшинства? Любая идея будет принята с благодарностью - спасибо за чтение.
2 ответа
Разобрался с решением после долгих коворок. Я использовал инструмент предварительной обработки LabelEncoder()
автоматически кодировать метки для учебных и тестовых наборов. Я выполняю двоичную классификацию, поэтому меткам просто нужно кодировать 0
или же 1
, Однако при этом функция автоматически кодирует класс большинства 1
и класс меньшинства как 0
, Для случаев, когда я заинтересован в прогнозировании класса меньшинства (что часто бывает), это искажает отчет average precision
функция в пользу любого класса большинства, заинтересован ли я в прогнозировании этого или нет.
Это заставило меня задать еще один вопрос о "переворачивании" 0
а также 1
значения в массиве, которым назначены мои метки, и, о чудо, это работает. Итак, суть в том, чтобы быть более преднамеренным, чтобы убедиться, что класс, который я интересуюсь предсказанием, всегда кодируется как 1
и убедившись, что другой класс закодирован как 0
,
Вы можете получить набор average=None
чтобы получить среднюю точность оценки в классе ( документы). Имейте в виду, однако, что средние оценки точности учитывают все возможные пороги, в то время как в отчете о классификации показан только один порог, который, вероятно, смещен в сторону большинства.