scikit-learn roc_auc_score() возвращает значения точности

Я пытаюсь вычислить площадь под кривой ROC, используя sklearn.metrics.roc_auc_score, используя следующий метод:

roc_auc = sklearn.metrics.roc_auc_score(actual, predicted)

где actual — двоичный вектор с классификационными метками, а predicted — бинарный вектор с классификационными метками, предсказанными моим классификатором.

Однако значение roc_auc, которое я получаю, ТОЧНО похоже на значения точности (доля выборок, чьи метки предсказаны правильно). Это не разовая вещь. Я пробую свой классификатор на разных значениях параметров и каждый раз получаю один и тот же результат.

Что я здесь делаю неправильно?


person Muhammad Waqar    schedule 11.03.2014    source источник


Ответы (1)


Это связано с тем, что вы передаете решения своего классификатора, а не рассчитанные им баллы. Недавно на SO был задан вопрос и связанный запрос на включение в scikit-learn.

Суть кривой ROC (и области под ней) заключается в том, что вы изучаете компромисс между точностью и полнотой при изменении порога классификации. По умолчанию в задаче бинарной классификации, если оценка вашего классификатора равна > 0.5, то прогнозируется class1, иначе прогнозируется class0. При изменении этого порога вы получаете кривую, подобную этой. Чем выше кривая (больше площадь под ней), тем лучше этот классификатор. Однако, чтобы получить эту кривую, вам нужен доступ к оценкам классификатора, а не к его решениям. В противном случае, каким бы ни был порог принятия решения, решение остается прежним, а AUC ухудшается до точности.

Какой классификатор вы используете?

person mbatchkarov    schedule 11.03.2014
comment
Я не использую встроенный классификатор. Это скорее эвристика, применимая к моему конкретному эксперименту, и она не дает никаких доверительных значений, а только классификационную метку. Есть ли у вас какие-либо предложения здесь? - person Muhammad Waqar; 11.03.2014
comment
Кроме того, проблема возникает только тогда, когда я передаю сбалансированные данные (одинаковое количество примеров +ve и -ve) в roc_auc_score(). Если я передаю несбалансированные данные (но бинарные векторы), результаты точности и AUC будут другими. - person Muhammad Waqar; 11.03.2014
comment
Вы можете осмысленно рассчитать AUC, если у вас нет доверительных значений, AFAIK. Однако есть и другие показатели производительности. - person mbatchkarov; 11.03.2014
comment
Спасибо за вашу помощь. - person Muhammad Waqar; 12.03.2014