Skip to content
随机森林
2026年8月18日 root

随机森林

通过构建多棵互不相关的决策树,并将它们的预测结果进行汇总(分类问题采用多数投票,回归问题采用平均值)来得出最终结论

核心机制(两个随机性):

  • 数据随机(Bootstrap采样):从原始数据集中有放回地随机抽取N个样本,构建每棵树的训练子集(约63.2%的样本会被抽到,剩余37.8%称为袋外数据OOB)。

  • 特征随机(特征子空间):在每棵树的每个分裂节点,不是从所有特征中选最优,而是随机选取一小部分特征(如sqr总特征、log2总特征数),再从这个小集合中找最优分裂特征。 这两大随机性确保了树与树之间低相关性,使得整体集成后的模型方差大幅降低,不易过拟合。

常见参数

参数默认值作用调参建议
n_estimators100弱学习器(决策树)的数量。越多越稳定,但计算量线性增加首要调参。通常越大越好(如 500~1000),配合 n_jobs 并行加速,关注边际收益递减点
bootstrapTrue是否采用有放回采样(Bagging)。若设为 False,则使用全部数据训练每棵树(失去袋外评估能力)通常保持 True。若数据量极大且追求速度,可设为 False
oob_scoreFalse是否使用袋外数据(Out-of-Bag)进行泛化误差评估。数据量足够时建议开启(True),可省去交叉验证的时间成本
warm_startFalse是否复用上次训练结果增量增加树(不重置模型)用于调试时逐渐增加 n_estimators 观察效果,平时保持 False
max_depthNone树的最大深度。None 表示直到叶子节点纯净或样本数小于阈值高频调参。数据量大时建议限制(如 10~30),防止单棵树过拟合
min_samples_split2内部节点再划分所需的最小样本数样本量大时可调大(如 5~50),抑制细粒度划分
min_samples_leaf1叶子节点最少样本数调大(如 5~20)能使模型更平滑,抗噪声
min_weight_fraction_leaf0.0叶子节点最少样本权重总和占总样本权重的比例(加权时用)通常默认即可,处理不平衡数据时可配合 class_weight 调整
max_leaf_nodesNone最大叶子节点总数。限制节点数量优先于 max_depth控制树的上界复杂度,优先用 max_depth 和 min_samples_leaf 即可
min_impurity_decrease0.0节点分裂所需的最小不纯度下降值设置 >0 可减少无效分裂,提升泛化
ccp_alpha0.0最小代价复杂度剪枝的稀疏度参数(>=0)Sklearn 0.22+ 新增,非零值可实现后剪枝,比前置限制更有效(建议 0.001~0.01 试)
max_features'sqrt'(分类), 'log2'(回归)每次分裂随机选取的特征子集大小(int/float/string)随机森林最重要的参数。值越小,树之间差异越大,方差降低但偏差略升
分类:建议 sqrt 或 0.3~0.5 总特征数
回归:建议 1/3 或 log2
criterion'gini'(分类), 'squared_error'(回归)分裂质量评估指标
分类可选:'gini', 'entropy'
回归可选:'squared_error', 'absolute_error', 'friedman_mse'
通常默认 Gini 或 MSE 足够高效;entropy 略慢但生成树更平衡;friedman_mse 对回归梯度提升友好
random_stateNone随机种子(控制数据采样、特征采样、分裂点)必须设置(如 42),否则结果无法复现
n_jobsNone(=1)并行训练的 CPU 核心数设为 -1 使用所有核心,显著加速 n_estimators 较大时的训练
verbose0训练日志冗余度(0/1/2)调参时设为 1 查看进度,生产环境设 0
class_weightNone分类任务中各类别的权重('balanced' 或字典)处理极度不平衡数据时必调,设为 'balanced' 自动按样本数反比加权

判断模型质量

  • 看“训练集 vs 测试集”的分数差距:如果训练集准确率 99%,测试集只有 70%,说明严重过拟合(虽然随机森林抗过拟合,但树太深、样本太少时依然会)。

  • 看 OOB 分数(袋外评分):这是随机森林的“免费午餐”。开启 oob_score=True 后,OOB 分数与测试集分数的接近程度,直接反映了模型的泛化可信度。两者越接近,说明模型越稳健。

  • 看交叉验证(CV)的标准差:做 5 折交叉验证,如果 5 次分数的标准差很大(比如 0.9, 0.7, 0.95, 0.6, 0.85),说明模型对数据划分极其敏感,预测极不稳定,不可信。

  • 可信标准:如果树间平均相关系数 > 0.8,说明每棵树偏差极大,集成后虽然准确率还行,但遇到新数据(哪怕轻微分布偏移)会瞬间崩溃。此时你需要增大 max_features 的随机性,或增加样本扰动。

与模型质量的关系

参数与 最大回撤 的关系与 精准率 的关系与 召回率 的关系与 盈亏比 的关系
n_estimators (↑ 增多)反比(回撤降低)集成规模越大,预测方差越小,曲线越平滑弱反比(趋向稳定)边际效应递减,过多时噪声抵消,精准率趋向稳定均值弱正比(略有提升)更多树的投票能捕捉到更微弱的有效信号正比(盈亏比提升)回撤下降直接拉高了收益风险比
max_depth (↑ 加深)强正比(回撤飙升)这是回撤的头号杀手! 树越深,越拟合分钟级噪声,导致回撤急剧放大正比(但不稳定)在验证集上,深度增加会提高精确率的波动性(时高时低)弱正比(先升后降)初期深度增加能抓到更多信号,但超过12层后召回率会因过拟合而暴跌强反比(盈亏比暴跌)回撤大涨叠加收益不稳,盈亏比会断崖式下跌
min_samples_split (↑ 增大)反比(回撤降低)节点分裂要求更严,树结构更保守,避免为噪声分裂弱反比(轻微下降)限制分裂后,树的精细度下降,可能误杀部分精准信号反比(召回率下降)模型变得更“迟钝”,漏掉的机会增多(交易次数减少)正比(盈亏比提升)虽然交易变少,但留下的都是高确定性机会,单笔盈利扩大
min_samples_leaf (↑ 增大)极强反比(回撤大幅降低)这是压住回撤的王牌! 叶子样本变多,决策边界极度平滑,彻底切断噪声路径反比(精准率下降)预测更保守,不会轻易给出极端高置信度的信号,精准率会适度回落强反比(召回率下降)必然以牺牲捕捉弱信号为代价,交易次数会明显减少强正比(盈亏比拉升)亏损交易被最大程度过滤,留下来盈利单的赔率显著提升
max_features (从 all 改为 'sqrt')极强反比(回撤骤降)这是本次修改的第二大功臣。 强制去相关化,树间抱团过拟合被瓦解,泛化能力质变弱正比(稳定提升)每棵树看到的特征更随机,投票结果的置信度更真实可靠弱反比(轻微下降)特征变少,可能错过依赖特定特征组合的极少数信号强正比(盈亏比提升)模型稳定性大幅增强,回撤收窄直接拉高了盈亏比

Last updated: