假设我们开始
import numpy as np
from sklearn import metrics
现在我们设置真正的 y 并预测 scores :
y = np.array([0, 0, 1, 1])
scores = np.array([0.1, 0.4, 0.35, 0.8])
(注意 y 已经从你的问题向下移了1 . 这是无关紧要的:无论是预测1,2还是0,1都可以获得完全相同的结果(fpr,tpr,阈值等),但是某些 sklearn.metrics 函数是拖累的如果不使用0,1 . )
我们在这里看看AUC:
>>> metrics.roc_auc_score(y, scores)
0.75
如在你的例子中:
fpr, tpr, thresholds = metrics.roc_curve(y, scores)
>>> fpr, tpr
(array([ 0. , 0.5, 0.5, 1. ]), array([ 0.5, 0.5, 1. , 1. ]))
这给出了以下图:
plot([0, 0.5], [0.5, 0.5], [0.5, 0.5], [0.5, 1], [0.5, 1], [1, 1]);
通过构造,有限长度y的ROC将由矩形组成:
对于足够低的阈值,一切都将被归类为负数 .
随着阈值不断增加,在离散点处,一些负分类将变为正数 .