Scikit-learn:roc_auc_score

use*_*449 7 python machine-learning scikit-learn auc

我正在使用scikit-learn中的roc_auc_score函数来评估我的模型表现.不管怎么说,无论是使用predict()还是predict_proba(),我都会获得不同的值

p_pred = forest.predict_proba(x_test)
y_test_predicted= forest.predict(x_test)
fpr, tpr, _ = roc_curve(y_test, p_pred[:, 1])
roc_auc = auc(fpr, tpr)

roc_auc_score(y_test,y_test_predicted) # = 0.68
roc_auc_score(y_test, p_pred[:, 1])    # = 0.93
Run Code Online (Sandbox Code Playgroud)

可以提出建议吗?

提前致谢

AN6*_*6U5 7

首先看一下predict和predict_proba之间的区别.前者预测特征集的类,而后者预测各种类的概率.

您正在看到y_test_predicted的二进制格式中隐含的舍入错误的影响.y_test_predicted由1和0组成,其中p_pred由0到1之间的浮点值组成.rc_auc_score例程改变阈值并生成真阳性率和误报率,因此得分看起来非常不同.

考虑以下情况:

y_test           = [ 1, 0, 0, 1, 0, 1, 1]
p_pred           = [.6,.4,.6,.9,.2,.7,.4]
y_test_predicted = [ 1, 0, 1, 1, 0, 1, 0]
Run Code Online (Sandbox Code Playgroud)

注意,通过考虑所有截止阈值来生成ROC曲线.现在考虑0.65的阈值......

p_pred案例给出:

TPR=0.5, FPR=0, 
Run Code Online (Sandbox Code Playgroud)

并且y_test_predicted案例给出:

TPR=.75 FPR=.25.  
Run Code Online (Sandbox Code Playgroud)

您可能会看到,如果这两个点不同,那么两条曲线下的面积也会大不相同.

但要真正理解它,我建议查看ROC曲线本身以帮助理解这种差异.

希望这可以帮助!