这可能看作是另一个问题的重复here。但是,我已经看了那里的答案,仍然无法理解Scikit-learn如何通过仅测试一个阈值来计算roc曲线下的面积,该阈值是:
y_pred = clf.predict(X_test)
roc_auc_score(y_test, y_pred)
为什么它不采用多个值(多个y_test,y_pred是由多个阈值产生的)?任何简化的解释都会非常感激。
答案 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
来生成。