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 чтобы получить среднюю точность оценки в классе ( документы). Имейте в виду, однако, что средние оценки точности учитывают все возможные пороги, в то время как в отчете о классификации показан только один порог, который, вероятно, смещен в сторону большинства.

Другие вопросы по тегам