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

tidymodels框架下同一数据集调用fit()与predict()得到的模型性能存在差异

结果差异的核心原因

这一差异是两类预测结果的生成逻辑完全不同导致的,属于ranger随机森林引擎的内置特性,和tidymodels框架的实现无关:

  • 你从rf_fit$fit$predictions中提取的是ranger默认输出的袋外(OOB, Out-of-Bag)预测结果:
    随机森林训练过程中,每棵决策树仅使用bootstrap重抽样得到的约2/3训练样本构建,剩余1/3未参与单棵树训练的样本被称为该树的袋外样本。ranger会汇总所有树对各自袋外样本的预测结果,最终得到全量训练样本的OOB预测值。这类预测的样本从未参与过对应树的训练,因此结果相当于对模型泛化能力的无偏估计,不会引入过拟合偏差,你得到的0.903的AUC更贴近模型在未知数据上的真实表现。
  • 你通过predict()得到的rf_training_pred是全模型对训练集的常规推理结果:
    该预测调用了训练完成的全部1000棵决策树,对所有训练样本做推理。所有训练样本都至少参与过一部分树的训练过程,而随机森林的拟合能力足够强,可以完全记忆训练集的特征规律,因此在训练集上的预测AUC可以达到1.0,这是模型在训练集上的表观性能,存在明显的过拟合偏差,不能代表模型的真实泛化能力。

如果你不需要ranger自动计算OOB预测,可以在定义模型引擎时关闭该功能:

rf_mod <- rand_forest(trees = 1000) %>% 
  set_engine("ranger", oob.error = FALSE) %>% 
  set_mode("classification")

关闭后rf_fit$fit$predictions会返回空值,也可以验证该字段确实对应OOB预测结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:06:02