不同的结果 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_score
和 plot_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 非常不同的结果