You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sklearn中roc_curve与roc_auc_score结果不一致问题咨询

问题原因及解决办法

最可能的原因:roc_curve未指定正标签,默认取了标签中的最大值

你的testY标签是1和2,roc_auc_score明确指定了pos_label=1(正标签为1),但roc_curve默认会把y_true中的最大值(也就是2)当作正类。这时候roc_curve计算的是类别2的ROC曲线,对应的AUC值是1 - 0.5856 ≈ 0.4144,画出来的曲线自然会在对角线下方,看起来AUC小于0.5,和roc_auc_score的结果刚好互补。

验证方法

调用sklearn.metrics.auc(fpr, tpr)计算roc_curve输出的曲线AUC,如果结果接近0.4144,就坐实了这个问题。

解决步骤

在调用roc_curve时显式指定pos_label=1,和roc_auc_score保持一致:

from sklearn.metrics import roc_curve, roc_auc_score, auc
import matplotlib.pyplot as plt

# 假设你的testY和predY已定义
fpr, tpr, thresholds = roc_curve(testY, predY, pos_label=1)  # 关键:指定正标签为1
roc_auc = roc_auc_score(testY, predY, pos_label=1)

# 绘制ROC曲线
plt.plot(fpr, tpr, label=f'ROC curve (AUC = {roc_auc:.4f})')
plt.plot([0, 1], [0, 1], 'k--')  # 对角线
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.legend(loc='lower right')
plt.show()

其他可能的小概率原因

  • 绘制曲线时搞反了FPR和TPR的顺序:比如误写成plt.plot(tpr, fpr),这会导致曲线形态异常,看起来AUC不对,检查绘图代码的x、y轴参数即可。
  • predY的含义和预期不符:比如你以为predY是类别1的概率,但实际是类别2的概率。这种情况下,要么把predY换成1 - predY,要么在两个函数中都把正标签设为2,保持逻辑一致。

内容的提问来源于stack exchange,提问作者hhaamm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:53:14