Ch04 机器学习修订于 二〇二六年七月二日
概念-随机森林
一句话理解
随机森林(Random Forest)是多棵决策树的 Bagging 集成:每棵树用随机抽样的样本和随机选择的特征训练,最终通过投票(分类)或平均(回归)输出结果。它是快速获得可靠 baseline 的首选算法,也是工业界最常用的可解释性模型之一。
核心原理
Bagging:Bootstrap Aggregating
随机森林的基础是 Bagging(Bootstrap 聚合):
-
Bootstrap 采样:从原始数据集中有放回地随机抽取 N 个样本,形成训练子集。每棵树得到一个不同的训练子集,平均每棵树只用了约 63.2% 的原始数据(剩余的 36.8% 称为 Out-of-Bag 数据)。
-
训练多棵树:对每个训练子集独立训练一棵决策树(通常不剪枝,允许树长到最大深度)。
-
聚合(Aggregating):
- 分类:多数投票(Majority Voting)
- 回归:简单平均(Simple Averaging)
双重随机性
随机森林的”随机”来自两个层面:
| 层面 | 随机化方式 | 目的 |
|---|---|---|
| 样本随机 | Bootstrap 采样(有放回) | 每棵树看到不同的数据,减少方差 |
| 特征随机 | 每个分裂节点随机选择 m 个特征(m ≈ sqrt(p) 或 p/3) | 降低树之间的相关性,进一步减少方差 |
这种双重随机性使得随机森林的方差远低于单棵决策树,同时保持很低的偏差。
为什么集成有效?
单棵决策树的问题:
- 高方差:对训练数据的微小变化敏感,容易过拟合
- 不稳定:不同的训练集可能产生完全不同的树结构
Bagging 的解决方案:
- 通过平均多棵树,抵消了单棵树的随机波动
- 只要树之间不完全相关,集成的方差随树的数量增加而降低
- 方差 = σ²/N + (1-1/N)ρσ²(N 为树数量,ρ 为树间相关性)
随机森林 vs 单棵决策树 vs XGBoost 对比
| 维度 | 随机森林 | 单棵决策树 | XGBoost |
|---|---|---|---|
| 训练方式 | 并行(Bagging) | 单棵树 | 串行(Boosting) |
| 树之间关系 | 独立,投票 | 不适用 | 依赖,每棵树修正前一棵的误差 |
| 偏差(Bias) | 低 | 低 | 低 → 极低 |
| 方差(Variance) | 低 | 高 | 极低 |
| 过拟合风险 | 低 | 高 | 中(需调参) |
| 训练速度 | 快(可并行) | 极快 | 慢(串行) |
| 可解释性 | 中等(特征重要性) | 高(可视化整棵树) | 低(黑盒集成) |
| 超参数敏感度 | 低 | 低 | 高 |
| 默认参数效果 | 好 | 差 | 一般 |
| 小数据表现 | 好 | 差 | 容易过拟合 |
| 大数据表现 | 好 | 差 | 极好 |
| 缺失值处理 | 需预处理 | 需预处理 | 原生支持 |
| 类别特征 | 需编码 | 需编码 | 需编码 |
特征重要性(Feature Importance)
随机森林的一大优势是能提供可靠的特征重要性评估,这是工业界非常看重的能力。
两种计算方法
1. 平均不纯度减少(Mean Decrease in Impurity, MDI)
在构建树时,每个分裂节点记录该特征带来的不纯度减少量(分类用 Gini,回归用 MSE),对所有树取平均。计算快,但偏向高基数特征。
2. 排列重要性(Permutation Importance)
对每个特征,随机打乱其值,观察模型性能下降多少。性能下降越多,特征越重要。计算慢,但更准确,不受特征基数影响。
特征重要性的应用
- 特征选择:剔除重要性低的特征,简化模型
- 业务洞察:理解哪些因素对预测结果影响最大
- 模型解释:向非技术人员解释模型决策逻辑
- 数据质量检查:如果某个特征重要性异常高,可能是数据泄露
Out-of-Bag(OOB)误差
随机森林的独特优势:无需单独的验证集就能评估模型性能。
OOB 误差原理:
- 每棵树只用了约 63.2% 的样本训练
- 剩余 36.8% 的样本(OOB)对该树是”未见过”的
- 用所有树的 OOB 预测结果的聚合,可以无偏估计模型泛化性能
- 等同于交叉验证,但计算成本几乎为零
2026 年地位
2026 年,随机森林仍保持以下核心地位:
- 快速 baseline 首选:任何新任务,先用随机森林跑一个 baseline,参数少、训练快、效果好
- 可解释性需求场景:金融风控、医疗诊断等需要解释模型决策的场景,随机森林比 XGBoost 更直观
- 特征重要性探索:在新数据集上,用随机森林的特征重要性快速了解哪些特征有用
- 小数据场景:样本量小(< 1000)时,随机森林比深度学习稳定得多
- 异常检测:Isolation Forest(基于随机森林的异常检测算法)广泛用于工业异常检测
关键超参数
| 参数 | 含义 | 典型值 | 说明 |
|---|---|---|---|
| n_estimators | 树的数量 | 100-500 | 越多越好,但收益递减 |
| max_depth | 树最大深度 | None(不限制) | 随机森林通常不限制深度 |
| max_features | 每节点分裂时考虑的特征数 | sqrt(p) 或 p/3 | 分类用 sqrt,回归用 p/3 |
| min_samples_split | 内部节点最小样本数 | 2-10 | 越大越保守 |
| min_samples_leaf | 叶子节点最小样本数 | 1-5 | 增大可防止过拟合 |
| bootstrap | 是否使用 Bootstrap | True | 随机森林核心参数 |
| oob_score | 是否计算 OOB 分数 | True | 建议开启 |
相关笔记
- 第4章 · 机器学习核心算法 — 机器学习算法知识体系
- 决策树 (Decision Tree) — 随机森林的基础模型
- 概念-XGBoost — 梯度提升树集成
- Bagging (Bootstrap Aggregating) — Bagging 集成方法
- Boosting (提升法) — Boosting 集成方法
- Isolation Forest (孤立森林/隔离森林) — 基于随机森林的异常检测
来源
- Breiman 随机森林论文 (2001): https://link.springer.com/article/10.1023/A:1010933404324
- scikit-learn 随机森林文档: https://scikit-learn.org/stable/modules/ensemble.html#forest
- Elements of Statistical Learning 第 15 章: https://hastie.su.domains/ElemStatLearn/
- Permutation Importance 论文: https://arxiv.org/abs/1801.01489