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

Python训练随机森林时ROC曲线与AUC计算结果不匹配问题咨询

核心原因是你后两种计算ROC的方法存在逻辑错误,第一种方法的计算逻辑才是正确的,你认为的"偏差"实际是后两种方法的错误结果导致的误解:

  1. 首先明确ROC曲线的计算要求:ROC的本质是遍历所有可能的分类阈值,统计对应阈值下的FPR和TPR绘制曲线,因此输入必须是模型输出的正类预测概率/置信度分数,不能是最终的硬分类标签。
  • 你用的第二种方法,直接把rf1.predict(X_test)输出的0/1硬分类结果传入metrics.roc_curve,相当于强制把所有样本的预测分数归为0和1两类,只能得到两个有效统计点,绘制的不是真正的ROC曲线,计算出的AUC属于被严重低估的错误结果。
  1. 第三种方法和第二种结果一致是代码顺序错误导致的巧合:
    你写的代码顺序是先调用rf.predict_proba(X_test)获取概率,再执行rf1 = model2_bert.fit(X_train, y_train)训练模型。如果你的rf变量是未训练的初始化模型,或者和rf1不是同一个训练后的实例,那拿到的y_prob本身就是错误的,计算出的ROC结果自然不对,刚好和第二种错误方法的结果接近。另外第三种方法里的metrics.plot_roc_curve(rf1, X_test, y_test)和你第一种用的RocCurveDisplay.from_estimator逻辑完全等价,都是自动调用训练好的模型输出预测概率计算ROC,如果正常运行结果应该和第一种完全一致。

关于你提到的AUC过高不符合预期的问题:

你当前用的随机森林参数bootstrap=False+max_depth=None本身就会极大提升模型复杂度,极容易过拟合训练集,出现AUC接近甚至等于1的情况可以从以下方向排查:

  • 检查是否存在数据泄露:比如训练集和测试集有重叠、特征中包含和标签直接相关的泄露特征
  • 检查测试集规模:如果测试集样本量极小,随机预测也可能出现AUC=1的巧合
  • 检查标签分布:如果数据集类别极度不平衡,也可能出现AUC虚高的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:24:04