不同的结果 roc_auc_score 和 plot_roc_curve

Posted

技术标签:

【中文标题】不同的结果 roc_auc_score 和 plot_roc_curve【英文标题】:Different result roc_auc_score and plot_roc_curve 【发布时间】:2020-06-22 05:05:41 【问题描述】:

我正在训练一个 RandomForestClassifier (sklearn) 来预测信用卡欺诈。然后,当我测试模型并检查 rocauc 分数时,当我使用 roc_auc_scoreplot_roc_curve 时,我得到不同的值。 roc_auc_score 给我大约 0.89,而 plot_curve 将 AUC 计算为 0.96 为什么会这样?

标签都是 0 和 1,预测也是 0 或 1。 代码:

clf = RandomForestClassifier(random_state =42)
clf.fit(X_train, y_train[target].values)
pred_test = clf.predict(X_test)
print(roc_auc_score(y_test, pred_test))
clf_disp = plot_roc_curve(clf, X_test, y_test)
plt.show()

代码的输出(roc_auc_Score 就在图表上方)。

【问题讨论】:

【参考方案1】:

您将预测类而不是预测概率提供给 roc_auc_score.

来自Documentation:

y_score: 类似数组的形状 (n_samples,) 或 (n_samples, n_classes)

目标分数。在二元和多标签情况下,这些可以是概率估计值或非阈值决策值(由某些分类器上的决策函数返回)。

将您的代码更改为:


clf = RandomForestClassifier(random_state =42)
clf.fit(X_train, y_train[target].values)
y_score = clf.predict_prob(X_test)
print(roc_auc_score(y_test, y_score[:, 1]))

【讨论】:

必须使用更高级别的概率。所以应该是roc_auc_score(y_test, y_score[:,1] 是的,你是对的。谢谢,更新了答案。【参考方案2】:

ROC 曲线和 roc_auc_score 将预测概率作为输入,但正如我从您的代码中看到的那样,您提供的是预测标签。你需要解决这个问题。

【讨论】:

以上是关于不同的结果 roc_auc_score 和 plot_roc_curve的主要内容,如果未能解决你的问题,请参考以下文章

在随机森林中使用 predict() 与 predict_proba() 计算时,ROC_AUC_SCORE 不同

为啥当我将 GridSearchCV 与 roc_auc 评分一起使用时,grid_search.score(X,y) 和 roc_auc_score(y, y_predict) 的分数不同?

tensorflow model.evaluate 和 model.predict 非常不同的结果

roc_auc_score - y_true中只有一个类

LinearSVC 和 roc_auc_score() 用于多类问题

评分='roc_auc' 的 cross_val_score 和 roc_auc_score 有啥区别?