← 返回题目列表

AdaBoost 的原理是什么?它是怎么「逐步纠错」的?

高频 困难 第 11 / 25 题 更新于 2026/08/02
集成学习AdaBoostBoosting样本权重

简化版

AdaBoost(Adaptive Boosting) 是最经典的 Boosting 算法。核心是串行训练一串弱分类器,每一轮都更关注前一轮分错的样本:给每个样本一个权重,初始相等;每训练完一个弱分类器,就提高被它分错的样本权重、降低分对的权重,让下一个弱分类器把注意力放到「难样本」上。同时给每个弱分类器一个话语权(权重 α):错误率越低的分类器 α 越大。最终把所有弱分类器按 α 加权投票。这样一轮轮「补短板」,把很多弱分类器(如决策树桩)叠成一个强分类器,主要降低偏差。缺点是对噪声和离群点敏感(它们会一直被加权关注)。

详细版

算法流程(二分类,标签 ±1):

1. 初始化样本权重: wᵢ = 1/N (全部相等)
2. for t in 1..T:
   a. 用当前权重训练弱分类器 hₜ
   b. 算加权错误率:  εₜ = Σ wᵢ·[hₜ(xᵢ)≠yᵢ]
   c. 算分类器权重:  αₜ = ½ ln((1-εₜ)/εₜ)   ← 错误率越小 αₜ 越大
   d. 更新样本权重:  wᵢ ← wᵢ·exp(-αₜ·yᵢ·hₜ(xᵢ)) 后归一化
                    → 分错的样本(yᵢhₜ<0)权重变大,分对的变小
3. 最终分类器: H(x) = sign( Σ αₜ·hₜ(x) )   ← 加权投票

两个「自适应」:

自适应对象规则
样本权重分错→加权,分对→减权(下轮聚焦难样本)
分类器权重 αₜ错误率 εₜ 越小 → αₜ 越大(好分类器话语权大)

要点: εₜ 必须 <0.5(比随机好)才有正 α;弱分类器常用决策树桩(单层树)。AdaBoost 本质是指数损失下的前向分步加法模型

完整版教学

一、AdaBoost 的核心思想:让后面的模型专补前面的漏

Boosting 的通用思路是「串行纠错」。AdaBoost 是它最经典的实现,落实「纠错」的方式是——给样本加权,让每一轮的弱分类器把重心放在前面被分错的样本上

打个比方:一个学生做题,第一遍做完,老师把他做错的题标记出来,让他第二遍重点攻克这些错题;第二遍又错了一些,再标记、再重点攻克……每一轮都聚焦「还没掌握的难点」,最后把每一轮的能力按表现加权综合起来,就成了全能选手。AdaBoost 就是这个过程的算法化。

二、两个「自适应」权重:样本权重 + 分类器权重

AdaBoost 名字里的 Adaptive(自适应) 体现在它同时动态调整两种权重

① 样本权重 wᵢ:决定每个样本在训练下一个弱分类器时的「重要性」。

  • 初始所有样本权重相等(1/N)。
  • 每轮训练后:被分错的样本权重调大(下轮更被关注),被分对的样本权重调小
  • 这样弱分类器的注意力会一轮轮转移到「难啃的样本」上。

② 分类器权重 αₜ:决定每个弱分类器在最终投票里的「话语权」。

  • 错误率越低的弱分类器,αₜ 越大(越可信、话语权越大)。
  • 最终预测是所有弱分类器按 αₜ 加权投票,而非平权。

这两个自适应配合,就实现了「聚焦难样本 + 好模型多话语权」。

三、逐行拆解算法

以二分类(标签 y∈{-1,+1})为例:

第 1 步:初始化。 所有样本权重相等 wᵢ = 1/N

第 2 步:迭代 T 轮,每轮:

  • (a) 训练弱分类器 hₜ:在当前样本权重下训练(权重大的样本影响大)。
  • (b) 算加权错误率εₜ = Σ wᵢ·[hₜ(xᵢ)≠yᵢ]——被分错样本的权重之和。注意是加权的,所以「分错高权重样本」代价更大。
  • (c) 算分类器权重
αₜ = ½ · ln( (1-εₜ) / εₜ )
  • εₜ 越小(分类器越准),(1-εₜ)/εₜ 越大,αₜ 越大。

  • εₜ=0.5(跟瞎猜一样)时 αₜ=0(没用);εₜ<0.5 才有正贡献。

  • (d) 更新样本权重

wᵢ ← wᵢ · exp( -αₜ · yᵢ · hₜ(xᵢ) )   然后归一化
  • 若样本分对(yᵢhₜ(xᵢ)=+1):指数为 exp(-αₜ)<1权重变小
  • 若样本分错(yᵢhₜ(xᵢ)=-1):指数为 exp(+αₜ)>1权重变大
  • 归一化保证权重和为 1。

第 3 步:最终分类器——所有弱分类器加权投票:

H(x) = sign( Σₜ αₜ · hₜ(x) )

四、为什么这样能降偏差、变强

  • 每一轮都针对性地补前面的短板(难样本),整体的训练误差指数级下降——可以证明只要每个弱分类器 εₜ<0.5,AdaBoost 的训练误差有指数上界,会快速趋于 0。这就是它降偏差、把弱模型叠成强模型的原理。
  • 弱分类器通常用决策树桩(decision stump,单层决策树)——极弱(只切一刀),但一堆树桩按 AdaBoost 组合起来能拟合复杂边界。

五、更深一层:指数损失下的前向分步加法模型

AdaBoost 有个漂亮的理论解释:它等价于以「指数损失」为目标、用「前向分步算法」逐步构建的加法模型

  • 加法模型:最终模型是弱分类器的加权和 Σαₜhₜ(x)
  • 前向分步:一次只优化一个新弱分类器和它的权重(固定前面已学的),贪心地逐步逼近。
  • 指数损失 L = exp(-y·f(x)):对它做前向分步优化,推导出来的样本权重更新和分类器权重公式,正好就是 AdaBoost 的那两条公式

这个视角把 AdaBoost 从「启发式加权」提升为「有明确损失函数的优化」,也为后来的 GBDT(把损失换成任意可导损失、用梯度来做 Boosting) 铺平了道路。

六、优缺点与常见追问

优点:精度高、不易过拟合(相对而言)、简单、无需太多调参、弱分类器可以很简单。

缺点

  • 对噪声和离群点敏感——这是最大的缺点。噪声/离群样本常被分错,于是权重被一轮轮不断放大,弱分类器被迫去拟合这些噪声,损害泛化。
  • 串行、不能并行,训练较慢。

常见追问

  • AdaBoost 为什么对噪声敏感? 因为它持续加大错分样本权重,而噪声天生难分对,权重被无限放大,模型去硬拟合噪声。
  • 弱分类器要多弱? 常用决策树桩;太强会过拟合、失去 Boosting 的意义。
  • 和 GBDT 区别? AdaBoost 调样本权重、对应指数损失;GBDT 拟合负梯度(残差)、可用任意可导损失,更通用(详见 GBDT 专题)。
  • εₜ>0.5 怎么办? 说明弱分类器比随机还差,应停止或重新采样(二分类可取反)。

七、手算一轮样本权重更新

4 个样本初始权重都为 0.25,弱分类器错 1 个,带权错误率 ε=0.25,因此分类器权重 α=0.5 ln(0.75/0.25)≈0.5493。更新前归一化时,错分样本乘 e^α≈1.732,正确样本乘 e^-α≈0.577;归一化后错分样本权重变为 0.5,其余各约 1/6。下一轮就会更关注那个错分点。

alpha_t = 0.5 * ln((1 - epsilon_t) / epsilon_t)
w_i <- w_i * exp(-alpha_t * y_i * h_t(x_i))
H(x) = sign(sum_t alpha_t * h_t(x))
对象/方案核心机制选择或风险
ε<0.5α>0弱分类器优于随机,正向加入
ε=0.5α=0本轮没有贡献
ε>0.5α<0二分类时通常翻转预测或停止/重训
均匀权重 → 训练弱分类器 → 算带权错误率
        → 更新模型权重 α → 放大错分样本 → 归一化 → 下一轮

记忆钩子:AdaBoost 的“纠错”同时发生在两处:错分样本权重上升,表现更好的弱分类器投票权更大。

八、常见误区与追问

  • 误区:AdaBoost 每轮只使用上轮错分样本。 所有样本仍在,只是权重不同。
  • 误区:弱分类器训练误差越低越好且没有下限问题。 若完美分类会使公式趋于无穷,实现需提前停止或做数值保护。
  • 追问:为什么要求二分类弱学习器优于随机? ε<0.5 才得到正 α,翻转一个劣于随机的二分类器可恢复该条件。
  • 追问:它为什么怕标签噪声? 持续错分的噪声点会不断获得更高权重。
  • 追问:多分类还能用吗? 可以使用 SAMME/SAMME.R 等扩展,权重公式与二分类版本不同。

九、加强记忆

AdaBoost = 串行训练弱分类器 + 逐轮聚焦难样本,两个「自适应」:样本权重(分错→加权、分对→减权,下轮更关注难样本)和分类器权重 αₜ = ½ln((1-εₜ)/εₜ)(错误率越低话语权越大),最终按 αₜ 加权投票 sign(Σαₜhₜ)。样本权重更新 w←w·exp(-αyh)(分对乘 e^{-α} 变小、分错乘 e^{α} 变大)。它主要降偏差,训练误差指数下降,弱分类器常用决策树桩。理论上是指数损失下的前向分步加法模型(为 GBDT 铺路)。最大缺点:对噪声/离群点敏感(错分样本权重被无限放大、硬拟合噪声),且串行不能并行