1202 随机森林与集成思想
📌 一、 课程导入(5 分钟)
回顾旧知:上次课训练的决策树(max_depth=None)在训练集上准确率达到 100%,但在测试集上出现了性能下滑——这就是典型的“过拟合”。单棵决策树过于“个性”,容易被数据中的噪声带偏。
场景类比:
- 单棵决策树 ≈ 一位经验丰富但偶尔固执的资深专家。
- 随机森林 ≈ 召集 100 位专家,各自独立判断,最后通过投票(分类)或取平均(回归)得出最终结论。
核心疑问抛出:
- 如何保证这 100 棵树“各自独立”且各不相同?
- 为什么 100 棵树投票的结果,通常比最强的那一棵树还要准?
- 👨🏫 教师活动:展示上次课中过拟合树的截图(训练集 100%,测试集 94%);抛出“专家投票”类比;板书关键词“Bagging = Bootstrap Aggregating”。
- 🧑🎓 学生活动:回忆并复述决策树的过拟合现象;参与“投票决断”小互动(例如:班级内随机抽取 5 人对某个问题投票,观察准确率是否高于单人)。
通过“专家投票”的生活化类比,降低集成学习的理解门槛。同时点明本节课要解决的痛点(过拟合)正是上节课遗留的问题,形成课程内容闭环。
📖 二、 解决问题过程(一):随机森林的两大核心机制
核心机制 1:样本随机(Bootstrap 自助采样)
- 原始训练集有 N 个样本。每棵树的训练数据,都是通过 有放回 的抽样方式从原始集中抽取 N 个样本。
- 结果:每棵树拿到的训练数据都略有不同(约 63.2% 的原始样本会被抽到,其余为重复或未抽中)。
- 作用:确保每棵树的“成长环境”不同。
核心机制 2:特征随机(Random Subspace)
- 假设总共有 M 个特征。在树的每个节点进行分裂时,不是从全部 M 个特征里选最优,而是先随机抽取
sqrt(M)或log2(M)个特征作为候选,再从这一小撮里挑最好的。 - 作用:强制树与树之间的分裂路径产生更大差异,避免所有树都依赖同一个最强特征。
为什么随机森林抗过拟合?
- 单棵树可能记住噪声,但不同树记住的噪声不同。
- 投票机制将这些“个体噪声”相互抵消,保留“群体共识”,从而在测试集上表现更稳健。
- 👨🏫 教师活动:在黑板上画出示意图(原始数据集 → 多个 Bootstrap 子集 → 多棵并行树 → 投票输出);使用具体数值(如 N=10, M=4)演示抽样过程。
- 🧑🎓 学生活动:在导学案上填写“Bagging”全称(Bootstrap Aggregating);讨论“如果只随机抽样本,不随机抽特征,效果会打折扣吗?”。
将“双重随机性”拆解为两个独立知识点,方便学生分步消化。强调“去相关性”是随机森林的核心竞争力,为后续调参(如 max_features)埋下伏笔。
💻 三、 解决问题过程(二):代码实战——训练随机森林并与决策树对比
实验设置:沿用上节课的鸢尾花数据集(训练/测试集划分保持一致,以便公平对比)。
步骤 1:训练随机森林(默认参数)
步骤 2:加载上节课的决策树模型进行对比(伪代码复用)
现象观察:随机森林的训练集准确率可能略低于单棵完全生长的树(因为每棵树被“削弱”了),但测试集准确率通常更高或持平——这就是泛化能力的提升。
步骤 3:查看随机森林的特征重要性
与单棵树的 feature_importances_ 对比,随机森林的重要性评估更加稳定平滑,不会因为某棵树的结构异常而产生极端值。
- 👨🏫 教师活动:在 Notebook 中分屏同时运行两个模型,并高亮显示测试集准确率数据;对比两张特征重要性柱状图(单棵树 vs 随机森林)。
- 🧑🎓 学生活动:运行代码并记录两组数据;思考“为什么随机森林的训练集准确率有时候反而低于决策树?”(答案:因为每棵树没有完全拟合,降低方差)。
通过“背靠背”的代码对比实验,用客观数据说话,让学生直观感受集成学习的威力。强调“泛化能力”比“训练集分数”更值得关注,建立正确的模型评估观念。
✍️ 四、 解决问题过程(三):课堂实训——调整森林规模观察性能变化
📝 五、 课堂小结(5 分钟)
flowchart LR
root["🌲 随机森林(第二次课)"]
subgraph C1["📖 核心思想"]
direction TB
A1["集成学习:集体决策"]
A2["Bagging:并行训练 + 投票"]
end
subgraph C2["⚙️ 双重随机性"]
direction TB
B1["样本随机:Bootstrap 有放回抽样"]
B2["特征随机:节点分裂时随机选子集"]
end
subgraph C3["📊 对比决策树"]
direction TB
C1_node["单棵树:高方差、易过拟合"]
C2_node["随机森林:低方差、泛化强"]
end
subgraph C4["🔧 核心调参"]
direction TB
D1["n_estimators:树的数量(越多越稳)"]
D2["max_features:特征子集大小"]
end
root --> C1
root --> C2
root --> C3
root --> C4
style root fill:#2e7d32,stroke:#1b5e20,color:#fff,stroke-width:2px,rx:8px,ry:8px
style C1 fill:#e8f5e9,stroke:#4caf50,stroke-width:1px
style C2 fill:#e3f2fd,stroke:#2196f3,stroke-width:1px
style C3 fill:#fff3e0,stroke:#ff9800,stroke-width:1px
style C4 fill:#f3e5f5,stroke:#9c27b0,stroke-width:1px
✏️ 随堂检测与互动练习
📮 六、 课后作业与拓展
📋 七、 板书设计
本课用到的单词
| 英文术语 | 发音(美式) | 中文释义 | 专业语境解释 |
|---|---|---|---|
| Ensemble Learning | /ɑːnˈsɑːmbəl ˈlɜːrnɪŋ/ | 集成学习 | 组合多个基模型以提升整体预测性能的机器学习范式。 |
| Bagging | /ˈbæɡɪŋ/ | 自助聚集法 | Bootstrap Aggregating 的缩写,通过有放回抽样构建多个子数据集并行训练。 |
| Bootstrap | /ˈbuːt.stræp/ | 自助采样法 | 一种统计重采样技术,从原始数据中有放回地抽取等量样本。 |
| Random Subspace | /ˈrændəm ˈsʌb.spes/ | 随机子空间 | 在节点分裂时随机选取部分特征作为候选集合的策略。 |
| Variance | /ˈver.i.əns/ | 方差(泛化误差来源) | 模型对训练数据微小变化的敏感程度,方差高意味着容易过拟合。 |
| n_estimators | /en ˌes.tɪˈmeɪ.tɚz/ | 基学习器数量 | 随机森林中决策树的总棵数,核心超参数。 |
| Majority Voting | /məˈdʒɔː.rə.ti ˈvoʊ.tɪŋ/ | 多数投票法 | 分类问题中集成模型常用的决策策略,少数服从多数。 |