Scikit-learn : roc_auc_score



我使用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

请告诉我好吗?

Thanks in advance

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

您将看到在y_test_predict的二进制格式中隐含的舍入误差的影响。y_test_predict由1和0组成,而p_pred由0到1之间的浮点数组成。roc_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]

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

p_pred给出:

TPR=0.5, FPR=0, 

和y_test_predict_case给出:

TPR=.75 FPR=.25.  

你可能会看到,如果这两个点不同,那么两条曲线下的面积也会有很大的不同。

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

希望这对你有帮助!

相关内容

  • 没有找到相关文章

最新更新