随机森林分类模型中OOB score与accuracy、f1 score的区别
关于OOB score的理解偏差说明
你之前的理解确实有偏差。OOB(袋外)得分是随机森林类集成模型的内置泛化能力评估方式,和验证集质量没有关系:
随机森林训练每棵决策树时,都会对原始训练集做bootstrap有放回抽样,统计上每次抽样会有大约36.8%的样本从未被选中,这部分样本就是袋外样本。OOB得分就是用所有树的袋外样本做预测,汇总所有样本的预测结果后计算出的评估值,本质是不需要额外划分验证集的低开销验证方案,和5折交叉验证的评估结果接近,小数据集场景下实用性很高。
三个概念的核心差异
三者根本不是同一个维度的定义,核心区别可以从两个维度拆分:
1. 指标类型 vs 计算数据集
accuracy、F1 score属于分类任务的评价指标本身,可以在任意数据集上计算:你可以在训练集上算训练accuracy,在测试集上算测试F1,也可以在OOB样本上算OOB F1,没有绑定的数据集要求:- accuracy:预测正确的样本数占总样本数的比例,仅适合类别平衡场景,类别不平衡时会产生严重误导
- F1 score:精确率和召回率的调和平均值,对少数类的预测效果更敏感,是类别不平衡场景的首选指标
OOB score属于用特定数据集(袋外样本)计算出的得分,它本身没有限定指标类型:你可以把OOB得分设为accuracy,也可以设为F1、AUC等任意你需要的指标。比如scikit-learn中随机森林的默认oob_score_返回的是OOB样本上的accuracy,你也可以自行计算OOB样本的F1作为OOB得分。
实操建议
- 训练阶段可以直接用OOB得分做调参参考,不需要额外从训练集拆分验证集,节省数据量,效率更高
- 不管用OOB得分还是交叉验证做训练阶段的评估,最终模型的正式效果都要以从未参与训练的独立留存测试集上计算的accuracy/F1为准,这才是最贴近上线后真实表现的指标
- 类别不平衡场景下,无论是计算OOB得分还是测试集指标,都优先选择F1,避免用accuracy得到错误的乐观判断
内容的提问来源于stack exchange,提问作者nibs
相关产品推荐
相关产品推荐

