sklearn如何计算二元分类器的roc曲线下的面积?

时间:2017-12-10 19:39:47

标签: python scikit-learn

这可能看作是另一个问题的重复here。但是,我已经看了那里的答案,仍然无法理解Scikit-learn如何通过仅测试一个阈值来计算roc曲线下的面积,该阈值是:

y_pred = clf.predict(X_test) roc_auc_score(y_test, y_pred)

为什么它不采用多个值(多个y_test,y_pred是由多个阈值产生的)?任何简化的解释都会非常感激。

1 个答案:

答案 0 :(得分:0)

在这种情况下,roc_auc_score()的第二个参数应该是 由clf.predict_proba(X_test)获得的预测概率。 在此函数内计算不同的阈值 这种预测概率的基础。 documentation中有一个例子:

import numpy as np
from sklearn.metrics import roc_auc_score
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])
roc_auc_score(y_true, y_scores)
0.75

要了解roc_auc_score如何计算,可能会有所帮助 看看roc_curve它自己。这可以通过该功能完成 sklearn.metrics.roc_curve()。取自documentation

的示例
import numpy as np
from sklearn import metrics
y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
fpr
array([ 0. ,  0.5,  0.5,  1. ])
tpr
array([ 0.5,  0.5,  1. ,  1. ])
thresholds
array([ 0.8 ,  0.4 ,  0.35,  0.1 ])

(尽管y在后​​一个示例中有所不同,但它仍然是二进制文件 分类,2为正类。)

从后一个例子中可以看出,采用了不同的阈值 来自提供的scores

ROC Curve将通过在y轴上放置真阳性率tpr并在图的x轴上放置假阳性率fpr来生成。