使用 Sklearn 的 ROC 曲线下面积?
Area under the ROC curve using Sklearn?
我无法弄清楚为什么 Sklearn
函数 roc_auc_score
returns 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呢?我在这里弄错了什么?
ROC 曲线的 auc 仅衡量模型对数据点排序的能力,相对于您的积极 class。
在您的示例中,正 class 的分数始终大于负 class 数据点。因此,1 的 auc_roc_score 是正确的。
pd.DataFrame({'y_true':y_true,'y_scores':y_scores}).sort_values('y_scores',ascending=False)
y_scores y_true
7 0.996728 1
2 0.994081 1
5 0.892211 0
6 0.825326 0
4 0.738141 0
0 0.181011 0
1 0.155061 0
3 0.050250 0
如果您查看 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.
我无法弄清楚为什么 Sklearn
函数 roc_auc_score
returns 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呢?我在这里弄错了什么?
ROC 曲线的 auc 仅衡量模型对数据点排序的能力,相对于您的积极 class。
在您的示例中,正 class 的分数始终大于负 class 数据点。因此,1 的 auc_roc_score 是正确的。
pd.DataFrame({'y_true':y_true,'y_scores':y_scores}).sort_values('y_scores',ascending=False)
y_scores y_true
7 0.996728 1
2 0.994081 1
5 0.892211 0
6 0.825326 0
4 0.738141 0
0 0.181011 0
1 0.155061 0
3 0.050250 0
如果您查看 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.