集成学习入门:Bagging、Boosting 到底在组合什么

从多个模型共同决策的直觉出发,理解 Bagging、Boosting、随机森林和梯度提升模型的基本区别。

学习路线:传统机器学习基础(21~34) · 第 33 课
第 33 课集成学习课程视频封面,展示多个模型共同投票和接力修正的两种组合思路。
Learning Path

传统机器学习基础(21~34)

补齐文本分类项目背后的数据处理、算法、评估和模型选择知识。

学完本阶段你能做到:拿到一份结构化表格数据,独立完成清洗、特征工程、建模、评估、模型选择和保存,并用规范流程比较多个算法。

推荐读法:建议系统读。做项目时遇到数据和模型选择问题,也可以按需回查。

查看完整阶段 · 14 篇
Lesson Guide

这一课怎么学

先看目标,再带着问题读正文。读完后用练习确认自己真的理解了。

本节你会学到

  • 说清楚「集成学习入门:Bagging、Boosting 到底在组合什么」解决的核心问题
  • 知道它在「传统机器学习基础(21~34)」中的位置
  • 把 分类与回归、机器学习、监督学习 这些关键词联系起来

前置知识

  • 建议先读完上一篇:随机森林为什么比单棵树更稳
  • 能区分输入、输出、数据和模型目标。

概念回顾

  • 【分类与回归】判断邮件是不是垃圾邮件是分类,预测房价是多少是回归。 前面或后面会反复用到它。
  • 【机器学习】机器学习的重点不是手写所有规则,而是准备数据、定义目标,让模型自己找到可复用的模式。 前面或后面会反复用到它。
  • 【监督学习】如果训练数据里有“题目”和“答案”,模型学会以后再给它新题目,它就尝试给出答案。 前面或后面会反复用到它。

常见误区

  • 不要只记定义,要追问它解决了什么问题。
  • 不要把概念孤立背下来,要放回数据到结果的完整链路里。

课后练习

  • 用 3 句话向一个零基础朋友解释「集成学习入门:Bagging、Boosting 到底在组合什么」。
  • 打开概念库里的「分类与回归」,补一遍它和本文的关系。
  • 读下一课「模型评估与交叉验证:不要只相信一次划分」前,先写下你认为它会解决的问题。

自检练习与参考答案

1. 用一句话说清「集成学习入门:Bagging、Boosting 到底在组合什么」解决了什么问题。

合格答案不是复述标题,而是说清它在“数据进入模型、模型学习、结果评估或项目落地”中的作用。

2. 这篇文章和上一课或下一课是什么关系?

它应该为下一课「模型评估与交叉验证:不要只相信一次划分」铺路:读完后要知道下一课为什么自然出现。

下一步建议读「模型评估与交叉验证:不要只相信一次划分」。

前面我们学了决策树和随机森林。随机森林已经不是一个单独模型,而是一组树共同投票。

这背后有一个更大的概念:集成学习

一句话理解集成学习:不只依赖一个模型,而是把多个模型的判断组合起来,让整体结果更稳或更强

第 33 课视频 - 集成学习入门:Bagging、Boosting 到底在组合什么

为什么要组合多个模型

单个模型经常有自己的偏差。

决策树容易过拟合,KNN 对特征尺度敏感,线性模型表达能力有限。一个模型在某些样本上判断很好,在另一些样本上可能就不稳定。

集成学习的想法是:

多个模型各自学习
  -> 各自给出预测
  -> 用投票、平均或加权方式合并结果

就像做判断时不只听一个人的意见,而是让多个视角互相补充。

集成学习主要解决两类问题

机器学习里常说两个词:偏差和方差。

偏差高,说明模型本身太简单,学不到真实规律。方差高,说明模型太敏感,容易被训练数据里的偶然细节带偏。

集成学习常见的两个方向是:

方法 主要目标 直觉
Bagging 降低方差 多个模型并行学习,最后投票或平均
Boosting 降低偏差 一个模型接着一个模型学习,后面的模型重点修正前面的错误

随机森林属于 Bagging。梯度提升树、AdaBoost、XGBoost、LightGBM 更接近 Boosting 思路。

Bagging 是什么

Bagging 是 Bootstrap Aggregating 的缩写。

它可以拆成两步:

  1. Bootstrap:从训练集中有放回抽样,生成多份不同的数据子集;
  2. Aggregating:分别训练多个模型,再把结果汇总。

有放回抽样的意思是:同一个样本可能被抽到多次,也可能一次都没被抽到。

这样每个模型看到的数据都不完全一样,学出来的规律也会有差异。最后把这些模型的结果平均或投票,就能减少单个模型的偶然波动。

随机森林为什么属于 Bagging

随机森林就是 Bagging 思路的典型例子。

它做了两层随机:

  1. 每棵树用不同的样本子集训练;
  2. 每次分裂节点时,只随机看一部分特征。

这样每棵树都不完全相同。分类时,多数投票;回归时,取平均。

from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(
    n_estimators=200,
    max_depth=8,
    random_state=42,
    n_jobs=-1,
)

n_estimators 就是树的数量。树越多,结果通常越稳,但训练和预测也会更慢。

Boosting 是什么

Boosting 的直觉不一样。

Bagging 是多个模型并行训练,彼此相对独立。Boosting 更像接力:第一个模型先学一遍,后面的模型重点关注前面没学好的地方。

可以这样理解:

模型 1:先做一版预测
模型 2:重点修正模型 1 的错误
模型 3:继续修正前面还没解决的错误
...
最终结果:把多个模型按权重组合

Boosting 通常能得到很强的效果,但也更容易受噪声影响。因为它会不断盯着错误样本,如果错误来自脏数据或错标签,模型可能越学越偏。

AdaBoost 的直觉

AdaBoost 会让后面的模型更关注前面分错的样本。

如果某个样本被前一轮分错,它在下一轮中的权重会变大。新模型就会更努力地学这些困难样本。

这像是老师批改作业后发现某些题错得多,下一轮训练就重点练这些题。

Gradient Boosting 的直觉

Gradient Boosting 不是直接提高错分样本权重,而是让新模型去拟合前面模型的残差或错误方向。

回归任务里可以粗略理解为:

第一棵树预测一个结果
第二棵树学习第一棵树还差多少
第三棵树继续学习剩余误差

所以 Boosting 是逐步修正,而不是一次训练很多个独立模型。

Bagging 和 Boosting 怎么选

初学阶段可以先记一张表:

对比 Bagging Boosting
训练方式 多个模型并行 模型按顺序接力
典型代表 随机森林 AdaBoost、GBDT、XGBoost
主要作用 降低方差,让结果更稳 降低偏差,让模型更强
对噪声 相对更稳 可能更敏感
调参难度 通常较低 通常更高

如果你只是想快速建立一个稳定基线,随机森林很适合。

如果你已经有比较干净的数据,并且想进一步提高表格任务效果,可以尝试 Boosting 类模型。

在文本分类里怎么用

传统文本分类里,常见流程是:

文本清洗
  -> 分词
  -> TF-IDF
  -> 分类器

分类器可以是逻辑回归,也可以是随机森林、梯度提升树等集成模型。

不过文本 TF-IDF 特征通常非常高维且稀疏,线性模型经常已经很强。集成树模型不一定总是更好,需要实际验证。

所以不要因为“集成学习听起来更高级”就默认替换模型。更好的做法是统一评估:

models = {
    "logistic": LogisticRegression(max_iter=1000),
    "random_forest": RandomForestClassifier(n_estimators=200),
}

然后用同一套训练集、测试集、指标比较。

常见错误

以为模型越多一定越好

集成学习不是简单堆数量。模型越多,训练成本越高,收益也可能越来越小。

忽略数据质量

Boosting 会重点学习错误样本。如果错误来自脏数据、错标签或数据泄漏,模型可能会把错误学得更认真。

只看准确率

类别不平衡时,集成模型也可能只偏向大类。仍然要看 precision、recall、F1 和混淆矩阵。

这一课先记住

集成学习不是一种具体模型,而是一类组合思想。

最重要的区别是:

Bagging:多个模型并行,降低方差,让结果更稳
Boosting:多个模型接力,修正错误,让结果更强

下一步进入文本分类项目之前,我们还要补一课:计算机怎样读取中文文本,以及编码、清洗和标准化为什么是 NLP 项目的第一步。

Discussion

留言讨论