☰
集成学习:Bagging 和 Boosting 思想介绍
2026/10/28 10:09:38 网站建设 项目流程

1. 引言:集成学习是什么

集成学习是机器学习中一类非常有效的策略,其核心思想是「三个臭皮匠,顶个诸葛亮」。通过组合多个基础模型(弱学习器)的预测结果,集成学习往往能获得比单个模型更优的泛化能力和稳定性。在众多集成方法中,Bagging和Boosting是最具代表性的两大流派,它们分别从「并行降低方差」和「串行降低偏差」两个角度出发,构建出强大的集成模型。

2.Bagging和Boosting理解前提:偏差与方差

模型的泛化误差可以分解为偏差与方差两部分:

  • 偏差:模型平均预测和真实值之间的差距。反映模型本身的拟合能力。偏差高通常意味着欠拟合,模型过于简单,没有捕捉到数据中的规律。

  • 方差:用不同训练集训练出的模型,预测结果波动有多大。反映模型对训练数据扰动的敏感程度。方差高通常意味着过拟合,模型记住了太多训练集中的噪声,换一批数据预测结果就大幅波动。

  • Bagging 与 Boosting 的分野,正对应着对这两种误差成分的不同侧重。

“预测求职者起薪” 举例 计算偏差和方差

背景:假设某位求职者按照真实规律,起薪应是8千元。为了看清概念,暂时忽略现实中的随机因素。用同一种算法、同样的设置,换三批训练数据,分别训练三个模型,再预测这同一个人。

训练时用的数据对同一个人的预测
第一批4千元
第二批5千元
第三批6千元

注意:人没换,算法没换,换的是训练数据。

偏差如何计算?先看平均预测离真实规律多远

先算这三个模型的平均预测:

真实规律给出的值是8,所以:

−3表示:平均来看,这种方法低估了3千元。

做误差分解时,通常用的是“偏差的平方”:

因此,偏差关心的是:把训练数据变化的影响平均掉以后,模型还偏不偏。偏差是模型预测中的“系统性偏离”。

方差怎么算?看预测围绕自己的平均值晃得多厉害

三个预测是4、5、6,它们自己的平均值是5。分别计算每次预测离这个平均值多远:

预测减去平均预测5差值平方
4−11
500
611

把平方差求平均:

这里减的是平均预测5,而不是实际的8。

方差是模型对训练数据变化的敏感程度。

这是两者最关键的区别:

  • 算偏差:平均预测与真实规律比较。
  • 算方差:每次预测与平均预测比较。

什么?你不会还不懂吧?

好吧,那我们把抽象的东西具体化,好好告诉你一下什么是方差、什么是偏差。

我们假设,你有一把尺子。

假如说,尺子的刻度没有那么精确,离正确刻度差多少,这个就叫偏差。随便你去测量什么,尺子对于正确的值始终是有偏离的。比如你这把尺子每米少正确刻度3cm,你测你的身高,就会低了一些;你测其他人的身高,也会按比例低一些。

偏差:是尺子本身每米少3cm,属于系统性偏离。你不管什么时候测、测谁,它都会稳定地让你测小一点。

那么你在使用尺子的时候,在不同环境下使用可能得到不同结果,这个结果的波动程度就叫方差。比如某个周日下午阳光明媚,你测量了一下你的臂围,38cm,真不赖。晚上你喝了点酒,大半夜11点12点了,也不开个灯,迷迷糊糊地又测量了你的臂围,结果这次读成36cm,下次又读成40cm,跟下午的38cm也对不上。

方差:是你晚上喝了酒、没开灯、手抖、看错刻度,导致每次测出来的数忽高忽低、不稳定。这个波动的程度,就是方差。

3. 相关概念:集成学习中出现的那些名词

  • 弱学习器:指那些仅比随机猜测略好的模型,例如深度很浅的决策树。
  • 偏差(Bias):衡量模型预测值与真实值之间的系统性偏离,高偏差通常意味着模型过于简单、欠拟合。
  • 方差(Variance):衡量模型对训练数据波动的敏感程度,高方差通常意味着模型过于复杂、过拟合。
  • 集成策略:如何组合多个弱学习器的输出,常见方式包括投票法、平均法和加权组合。

4. Bagging 思想(并行 · 降方差)

4.1 核心原理

Bagging(Bootstrap Aggregating,自助采样聚合):主要想让容易波动的模型更稳定。

核心思想是「并行训练、投票决策」,Bagging 的核心操作是“有放回重采样 + 并行训练 + 聚合”。

给定训练集 D(大小为 n),Bagging执行以下步骤:

  1. Bootstrap 采样:从 D 中有放回地随机抽取 nn 个样本,得到一个与原始集大小相同的子集 Dj​。重复 m 次,得到 m 个训练子集。每个子集约包含原始数据中约63.2%的不重复样本。

  2. 并行训练基学习器:在每个 Dj上独立训练一个基模型 hj。基学习器通常选择高方差、低偏差的模型(如深度很深甚至不剪枝的决策树),因为 Bagging 要“消耗”的正是方差。

  3. 聚合输出:分类任务用投票,回归任务用平均,得到最终预测。

简单理解一下:Bagging思想,多个基学习器预测相互独立,改变模型对于真实规律的距离较小,但是多个基学习器训练数据是从总训练集中随机有放回抽取的,所以多个基学习器的训练集是既有交集又有差集的,训练出的结果相当于受到相同的噪音+不同噪音的影响,最后聚合输出,降低了模型对训练数据变化的敏感程度,所以说Bagging思想的收益是降低方差来的。

  • 单棵深树可能因为训练数据略有变化,就长出很不同的结构。Bagging让多棵树分别学习,再合并意见,使部分波动互相抵消,因此通常说它主要降低方差。树之间越相似,能抵消的波动往往越有限。
  • 由于每个基学习器只看到训练集的一部分样本,它们各自会存在一定的偏差和噪声,但通过平均或投票,这些随机误差会相互抵消,从而显著降低模型的方差,有效缓解过拟合问题。
  • 为什么能降方差?如果 m 个基模型的预测是相互独立的,取平均后方差会降到原来的约 1/m。Bootstrap 样本之间并非完全独立,因此实际降幅达不到这个理论值,但在实践中仍然非常有效。Bagging 在平均意义上不改变偏差,它的收益几乎全部来自方差的压缩

4.2 算法流程

Bagging 的典型流程可以概括为以下步骤:

  1. 从原始训练集中有放回地随机抽取 n 个样本,生成一个新的子训练集。
  2. 重复上述采样过程 m 次,得到 m 个不同的子训练集。
  3. 在每个子训练集上独立训练一个基学习器。对于新的预测样本,让所有基学习器分别预测,然后通过投票(分类)或平均(回归)得到最终结果。

4.3 代表算法:随机森林

随机森林是 Bagging 最著名的代表算法。它在 Bagging 的基础上进一步引入了「特征随机选择」机制:在构建每棵决策树时,每次分裂只从全部特征中随机选取一个子集进行最优划分。这种双重随机性进一步降低了树与树之间的相关性,使得集成模型的方差更小、泛化能力更强。

from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier(n_estimators=100, max_features="sqrt", random_state=42) model.fit(X_train, y_train) y_pred = model.predict(X_test)

5. Boosting 思想(串行逐渐纠错 · 降偏差)

5.1 核心原理

Boosting:让后面的模型继续学习前面没学好的地方,逐步改进整体预测。

Boosting(提升)的核心思想是「串行训练、逐步纠错」。与 Bagging 并行训练不同,Boosting 按顺序训练一系列基学习器,每个新的基学习器都重点关注前一个学习器犯错的样本,从而逐步降低整体模型的偏差。最终将所有基学习器加权组合,得到一个强学习器。

与 Bagging 的“各自学习,再合意见”相比,Boosting 的后一轮训练需要参考前面已经取得的结果,因此各轮之间有先后依赖。

Boosting的核心操作:「先训练一个模型 → 找到当前不足 → 训练下一个模型来补 → 累积预测」。

给定训练集 D,Boosting 通常执行以下步骤:

  1. 训练第一个基学习器:先学习数据中的一部分规律,得到初步预测。
  2. 找出当前模型的不足:判断哪些样本没有处理好,或者预测还差多少。
  3. 训练下一个基学习器:让新模型重点学习这些不足。
  4. 累积模型输出:按照各模型的系数或学习率合并预测,再继续下一轮,最终得到整体模型。

Boosting 更关注于「难样本」:每一轮训练都会调整样本权重,预测对了:权重下降,预测错了权重提升,让之前被分错的样本在下一轮获得更高的权重,从而迫使新模型更关注这些困难样本。

简单理解一下:Boosting思想每次使用的都是全量的训练集去训练基学习器,对于不同数据集合对于模型的影响改变基本不大,每次训练都是找出上一个基学习器的不足进行加权二次训练,但是对于模型整体的整体预测的系统偏离,多轮迭代进行优化,所以说Boosting思想的收益是降低偏差来的。

4.2 算法流程

Boosting 的典型流程可以概括为以下步骤:

  1. 初始化所有训练样本的权重为均匀分布。
  2. 在当前样本权重下训练一个基学习器。
  3. 根据该学习器的错误率调整样本权重:被分错的样本权重增大,被分对的样本权重减小。
  4. 重复上述过程,直到达到预设的迭代次数。
  5. 将所有基学习器按其准确率加权组合,得到最终模型。

4.3 代表算法:AdaBoost 与 GBDT

AdaBoost 是最早的 Boosting 算法之一,它通过调整样本权重来串行训练弱学习器,并按错误率分配模型权重。而 GBDT(梯度提升决策树)则从梯度下降的角度出发,每一轮拟合前一轮预测的负梯度(残差),逐步逼近真实目标。

from sklearn.ensemble import GradientBoostingClassifier model = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, random_state=42) model.fit(X_train, y_train) y_pred = model.predict(X_test)

6. Bagging 与 Boosting 的对比

对比维度BaggingBoosting
训练方式并行训练,各基学习器相互独立串行训练,后一个依赖前一个的结果
主要目标降低方差,缓解过拟合降低偏差,提升拟合能力
样本使用有放回随机采样,各子集独立全部样本参与,但权重动态调整
基学习器要求可并行训练,对弱学习器要求不高通常要求弱学习器略优于随机猜测
对噪声敏感度对噪声和异常值较稳健对噪声和异常值较敏感
代表算法随机森林AdaBoost、GBDT、XGBoost

7. 如何选择

在实际项目中,选择 Bagging 还是 Boosting,需要结合数据特点与业务需求:

  • 如果训练数据噪声较多、存在异常值,且希望模型更稳健,优先考虑 Bagging(如随机森林)。
  • 如果数据质量较高、希望追求极致的预测精度,且能接受更长的训练时间,Boosting(如 XGBoost、LightGBM)通常是更好的选择。
  • 如果特征维度很高,随机森林的特征随机选择机制能有效降低过拟合风险。
  • 如果对训练速度有较高要求,Bagging 的并行特性更适合大规模数据。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询