← 返回题目列表

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

高频 困难 第 11 / 25 题 更新于 2026/09/25
集成学习AdaBoostBoosting样本权重
学习 AI 实战项目

简化版

AdaBoost 串行训练弱分类器并维护样本权重:错分样本下轮相对权重上升,分对样本下降;每轮分类器再按加权错误率得到投票系数 α。最终预测是 sign(Σα_t h_t(x))。它能把树桩等简单模型组合成更强的分类器,常显著缓解欠拟合,但偏差和方差都可能变化。指数损失持续强调低间隔样本,因此标签噪声和异常点可能获得过大影响。

详细版

算法流程(二分类,标签 ±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) )

四、为什么组合能力会逐轮增强

  • 每一轮都在当前加权分布上寻找优于随机的分类器。经验训练错误率可由各轮归一化因子的乘积给出上界;只有弱学习优势持续有正下界时,上界才指数衰减。训练错误下降说明拟合能力增强,但不能把单次训练错误直接叫作统计偏差,泛化还取决于间隔、噪声和基学习器复杂度。
  • 弱分类器通常用决策树桩(decision stump,单层决策树)——极弱(只切一刀),但一堆树桩按 AdaBoost 组合起来能拟合复杂边界。

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

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

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

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

六、优缺点与常见追问

优点:能把简单基学习器组合成非线性模型,推导清楚,树桩等弱学习器即可工作;在合适数据上具有竞争力。

缺点:

  • 对标签噪声和异常点可能敏感。持续低间隔或错分的样本会获得更高相对权重,模型可能把容量用于拟合污染点;权重经过归一化并非数值上必然无限大,但影响可能过度集中。
  • 串行、不能并行,训练较慢。

常见追问:

  • AdaBoost 为什么对噪声敏感? 指数损失会持续强调负间隔样本,错标点可能长期占据较高相对权重。
  • 弱分类器要多弱? 树桩是经典选择,也可用更深树。深度提高会改变每轮交互能力与方差,应和轮数及正则一起验证。
  • 和 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 的两个自适应量是样本权重和分类器投票系数 α_t=½ln((1-ε_t)/ε_t);更新 w_i←w_i exp(-α_t y_i h_t(x_i)) 后归一化,最终取 sign(Σα_t h_t)。它是指数损失下的前向分步加法模型,常以树桩逐轮增强表达能力,但“训练错误下降”不等于偏差必然同比下降。持续错分点可能占据过高相对权重,各轮又有顺序依赖,因此需要监控噪声敏感性与训练成本。