05
随机森林
装袋法的升级版——每棵树只看“部分特征”,让树们更有多样性
🎮 互动演示:随机森林的两层随机性
随机森林 = 装袋法 + 随机特征选择。点击下方按钮,看看每棵树的训练数据和候选特征有何不同:
房价预测:4 个特征 × 10 个样本,观察每棵树的“随机性”来自哪里
🎲 第一层随机:Bootstrap 抽样
和装袋法一样,每棵树从原始数据中有放回抽样,只用约 63% 的数据训练。
🎲 第二层随机:特征子集
每次节点分裂时,只从 m=2 个随机特征中选最优,不用全部 4 个。
点击按钮,看每棵树的数据和特征都不一样!
⚠️ 常见误解:随机森林不是“每棵树用全部数据”!它和装袋法一样,每棵树只用 Bootstrap 抽样得到的部分数据训练。两层随机性共同保证了树的多样性。
下面 6 棵树各自用了不同的特征组合——装袋法每棵树用全部 4 个特征,随机森林每棵树只随机选 m=2 个:
💡 “三个臭皮匠”需要尽可能互不相关!如果每棵树都选最强的特征(如“犯罪率”),它们会高度相似,集成效果差。随机特征选择强迫树们“各显神通”。
📌 关键关系:当 m = 全部特征数 时,随机森林退化为普通装袋法(因为没有了特征随机性)。
变量重要性(Feature Importance)
随机森林虽然牺牲了单棵树的可解释性,但可以通过变量重要性了解哪些特征最有影响力:
📊 波士顿房价案例:最重要的特征是 LSTAT(低收入人口比例) 和 RM(平均房间数)。方法:对每个特征,计算其在所有树中导致的基尼指数下降幅度,取平均。
土木工程案例:混凝土强度预测
用一个实际的土木工程场景来对比单棵决策树和随机森林的表现:
📋 数据描述
任务:预测混凝土试块的28天抗压强度(回归问题)
数据:500个混凝土试块的检测记录
特征:水灰比、水泥用量(kg/m³)、骨料粒径(mm)、养护天数、外加剂用量(%)、砂率(%)、坍落度(mm)、环境温度(°C)
目标:预测抗压强度(MPa)
模型性能对比(决定系数 \(R^2\),越接近1越好):
💡 随机森林将单棵树的R²从0.72提升到0.89,泛化能力显著增强,还可通过特征重要性发现“水灰比”和“养护天数”是最关键因素。
06
提升法(Boosting)
专注于“补差”——每一轮都重点学习上一轮的错误案例
先回顾:装袋法 vs 提升法——两种完全不同的思路
前面我们学的装袋法是"大家各干各的,最后投票"。提升法则完全不同——
🏗️
装袋法:并行施工队
请 10 个施工队同时独立建造,最后取平均质量。
每个队看到略有不同的图纸(随机抽样),但互不交流。
目标:大家各有小失误,平均后就稳定了 → 降低方差
📋
提升法:质检整改循环
第 1 轮质检发现 3 处缺陷 → 第 2 轮重点整改这 3 处 → 第 3 轮再查漏补缺…
每一轮都盯着上一轮的问题,逐步完善。
目标:专攻薄弱环节,精度越来越高 → 降低偏差
⚠️ 关键区别:装袋法的每个模型是“独立的”——互不影响;提升法的每个模型是“接力的”——后一个专门修正前一个的错误。所以提升法必须串行,无法并行。
AdaBoost:自适应提升
AdaBoost 是最经典的提升法。核心思想用一句话概括:“哪里不会补哪里”——分错的样本下一轮给更多关注。
→
2
训练弱分类器
基于当前权重训练一个简单模型(如只有一层的“树桩”)
→
3
调整权重
分错的样本 → 权重放大⬆
分对的样本 → 权重缩小⬇
→
→
5
加权投票
所有弱分类器按“话语权”加权投票,得出最终结果
💡 类比:就像老师改完卷子后,把错题标记出来让学生重点复习,第二次考试时重点考上次的错题。如此反复几轮,学生就把所有知识点都掌握了。
🎮 互动演示:AdaBoost 权重更新动画(点击“下一轮”观察变化)
16 个建筑质检样本:● 蓝色 = 合格,● 红色 = 不合格。
⭕ 圆圈越大 = 权重越高 = 下一轮重点关注!白色边框 = 本轮被分错的样本。
初始状态:给所有 16 个样本分配相等权重(每个 1/16 = 6.25%)。第一个弱分类器将对它们平等对待——没有哪个样本更重要。点击“下一轮训练”,看看第一个弱分类器分错了哪些样本,以及权重如何变化!
🎮 互动演示:弱分类器的“话语权”怎么定?
每个弱分类器在最终投票时有不同的“话语权” \(\alpha\)。错误率越低的分类器,话语权越大——就像考试成绩好的同学,推荐更值得信赖。
拖动滑块改变错误率,观察话语权如何变化
弱分类器错误率 ε
0.30
这个分类器训练完后,样本权重怎么更新?
✅ 分对的样本
权重 × 0.655
权重缩小 → 下轮少关注
❌ 分错的样本
权重 × 1.527
权重放大 → 下轮重点关注
错误率30%:这个分类器有一定话语权,正确样本权重缩小,错误样本权重放大。
📌 公式(了解即可):\(\alpha_t = \frac{1}{2}\ln\frac{1-\epsilon_t}{\epsilon_t}\)。错误率 \(\epsilon\) 越小 → \(\alpha\) 越大 → 这个分类器在最终投票中越重要。
🎮 互动演示:3 个弱分类器如何"加权投票"?
经过 3 轮训练,我们得到了 3 个弱分类器,每个都有不同的"话语权" α。现在来了一个新样本——点击每个分类器看它的判断,最后看加权投票的结果!
场景:一块混凝土试块,它的强度是否合格?
📐 加权投票计算(合格 = +1,不合格 = −1):
👆 逐个点击 3 个分类器,看看它们各自怎么判断,最后加权投票的结果是什么!
AdaBoost 的优缺点
✓ 优点
降低偏差,逐步攻克难样本,准确率高
自动特征选择,忽略噪声特征
不太容易过拟合(理论上有上界保证)
可以用各种弱学习器(不限于决策树)
✗ 缺点
必须串行训练,速度比装袋法慢
对噪声和异常值敏感:异常样本会被不断放大权重,可能带偏整个模型
对弱分类器有要求:准确率至少 > 50%,否则会越训越差
⚠️ 噪声陷阱:如果数据中有标记错误的样本(比如不合格的混凝土被标成了合格),AdaBoost 会在每一轮都给它更多关注,试图“学会”这个错误——这就是为什么在噪声多的数据上,随机森林往往比 AdaBoost 更稳健。
🎮 互动演示:残差拟合——GBM 的核心思想
AdaBoost 通过调整样本权重来补差。GBM(梯度提升)换了一种更直接的方式:让每棵新树去拟合前面所有树的“残差”(预测值与真实值的差距)。
💡 通俗理解:第 1 棵树预测“这块混凝土强度约 30 MPa”,实际是 35 MPa,差了 5。第 2 棵树的任务不是重新预测强度,而是专门预测这个 +5 的差距。第 3 棵树再预测剩余的差距……如此叠加,预测越来越准。
点击“添加下一棵树”,观察预测值(绿点)逐步逼近真实值(蓝点)
● 蓝点 = 真实强度值
● 绿点 = 当前预测值
┆ 红色虚线 = 残差(还差多少)
当前:0 棵树。点击按钮开始逐步拟合!
每棵新树都只负责“补上一轮的差距”,所以红色虚线会越来越短——残差越来越小,预测越来越准!
从 AdaBoost 到 XGBoost:提升法家族的演进
1
AdaBoost(1995)开创者
通过调整样本权重让弱分类器逐步攻克难例。简单优雅,但对噪声敏感。
2
GBM — 梯度提升机(2001)突破
不再调权重,改为让每棵新树拟合残差。支持各种损失函数(分类、回归均可),更灵活。
3
XGBoost(2016)工业级
在 GBM 基础上加入正则化防止过拟合,用二阶泰勒展开加速优化,支持并行和 GPU。Kaggle 竞赛的“屠榜利器”。
4
LightGBM / CatBoost(2017+)更快更强
LightGBM(微软):直方图加速 + 叶子优先生长,训练速度提升 10 倍以上,适合大数据。CatBoost(Yandex):对类别特征有天然支持。
🏆 XGBoost 在实际工程中的应用:桥梁健康监测(基于传感器数据预测结构状态)、地震损伤等级预测、混凝土耐久性评估等。在 2015-2019 年间,Kaggle 竞赛超过半数获胜方案使用了 XGBoost。