首页 > 解决方案 > 使用 Sklearn 的 ROC 曲线下的面积?

问题描述

我无法弄清楚为什么Sklearn函数在以下情况下roc_auc_score返回:1

y_true = [0, 0, 1, 0, 0, 0, 0, 1]

y_scores = [0.18101096153259277, 0.15506085753440857, 
            0.9940806031227112, 0.05024950951337814, 
            0.7381414771080017, 0.8922111988067627, 
            0.8253260850906372, 0.9967281818389893]

roc_auc_score(y_true,y_scores)

最后的三个分数0.7381414771080017, 0.8922111988067627, 0.8253260850906372与标签不匹配0, 0, 0。那么,AUC 怎么可能是 1?我在这里做错了什么?

标签: pythonscikit-learnrocauc

解决方案


如果您查看 ROC 本身,就更容易理解原因:

> roc_curve(y_true, y_scores)

(array([0., 0., 0., 1.]),
 array([0. , 0.5, 1. , 1. ]),
 array([1.99672818, 0.99672818, 0.9940806 , 0.05024951]))

返回的元组中的第一个值是FPR,第二个是TPR,第三个是值变化的阈值点。

对于 0.99672818 的阈值,FPR 确实是 0.5,而不是 0,这会让您认为 ROC 的 AUC 不是 0。但是,FPR/TPR 点只是线 0, 0 -> 0, 1 -> 1, 1,其下方的区域确实是 1。


推荐阅读