平面上红蓝两类点交织,一条直线怎么切都剩几个错分点。与其硬找一条「完美边界」,不如:先找一条还过得去的切线,把切错的点加重,再找下一条,最后把多条切线按表现好坏加权叠起来。
这就是 自适应提升(Adaptive Boosting,AdaBoost)的核心动作:顺序加弱学习器,每轮根据上一轮对错改样本权重,错得多的下一轮更受关注。
段末注释:AdaBoost 属于 Boosting 族(Freund & Schapire,约 1995–1997):同质弱学习器串行训练,侧重降偏置。本系列 Boosting 专篇按出现顺序编号。后文沿用 AdaBoost。
配图目录:./1204.机器学习-集成学习-2.Boosting-1.AdaBoost/。
1. 一句话定位
| 维度 | 一句话 |
|---|---|
| 学习范式 | 监督学习;Boosting 集成 |
| 输入 → 输出 | 特征 $\mathbf{x}$ → 加权弱分类器之和,再取符号得类别(亦可扩回归变体) |
| 在优化什么 | 让后续弱学习器盯紧当前难分样本;最终 $H(x)=\mathrm{sign}(\sum_m \alpha_m h_m(x))$ |
出现背景:Freund & Schapire(约 1995–1997)提出 AdaBoost(决策论推广见 JCSS 1997)。当时单个弱分类器往往只略好于乱猜,该方法通过加重错分样本、顺序再学、按表现加权合成,把一批弱规则提升成可用的强分类器。
比喻:像会考补习——第一次模考错的题,下次课加练;每轮老师(弱学习器)按班级进步给不同话语权,最后综合意见。
2. 直觉:加重错分 → 再学 → 加权合成



典型基学习器是浅决策树桩(max_depth=1):单个很弱,合起来可以拟合弯曲边界。
3. 核心链路
训练集 $T={(x_i,y_i)}_{i=1}^n$,$y_i\in{-1,+1}$。
① 初始化权重(每人一样重):
$$
w_{1i}=\frac{1}{n}
$$
② 第 $m$ 轮:在当前权重 $D_m$ 下训练弱学习器 $h_m$,算加权错误率 $\epsilon_m$,再定该轮话语权:
$$
\alpha_m=\frac{1}{2}\ln\frac{1-\epsilon_m}{\epsilon_m}
$$
$\epsilon_m$ 越小,$\alpha_m$ 越大。其中算出来的$\alpha_m$ 就是这轮训练得到的弱选择器在最终预测中的所占权重。
③ 更新样本权重(错分的乘上 $e^{\alpha_m}$ 量级,对的压低),再规范化:
$$
w_{m+1,i}=\frac{w_{m,i}}{Z_m}\exp(-\alpha_m y_i h_m(x_i))
$$
④ 最终决策:
使用所有训练的弱选择器进行预测,然后使用②中,评估的每个选择器的权重,进行加权合并,得到最终的强分类器:
$$
H(x)=\mathrm{sign}\left(\sum_{m=1}^{M}\alpha_m h_m(x)\right)
$$
段末注释:与 GBDT 不同——AdaBoost 改的是样本权重;GBDT 改的是下一轮要拟合的残差/梯度目标。
4. 手算完整实例:一维二分类(2 轮)
A. 问题与原始表
特征 $x$ 为实数,标签 $y\in{-1,+1}$。
| 样本 $i$ | $x_i$ | $y_i$ |
|---|---|---|
| 1 | 0 | $-1$ |
| 2 | 1 | $+1$ |
| 3 | 2 | $-1$ |
| 4 | 3 | $+1$ |
B. 初始化
$$
w_{1i}=\frac14,\quad i=1,2,3,4
$$
弱学习器用决策树:选阈值 $\theta$ 与左右符号,使加权错误率最小。
C. 训练过程
第 1 轮
取 $\theta=0.5$,规则 $h_1(x)=-1\ (x<0.5),\ +1\ (x\ge0.5)$。
| $i$ | $h_1(x_i)$ | 对错 | $w_{1i}$ |
|---|---|---|---|
| 1 | $-1$ | 对 | 0.25 |
| 2 | $+1$ | 对 | 0.25 |
| 3 | $+1$ | 错 | 0.25 |
| 4 | $+1$ | 对 | 0.25 |
$\epsilon_1=0.25$,$\alpha_1=\frac12\ln3\approx0.549$。
未规范化因子:$e^{-\alpha_1}\approx0.577$(分对),$e^{\alpha_1}\approx1.732$(分错)。
| $i$ | 更新前 $w$ | 乘子 | 未规范化 | $w_{2i}$ |
|---|---|---|---|---|
| 1 | 0.25 | 0.577 | 0.144 | 0.167 |
| 2 | 0.25 | 0.577 | 0.144 | 0.167 |
| 3 | 0.25 | 1.732 | 0.433 | 0.500 |
| 4 | 0.25 | 0.577 | 0.144 | 0.167 |
($Z_1\approx0.866$;样本 3 被加重。)
第 2 轮
在 $w_2$ 下取 $\theta=2.5$,规则 $h_2(x)=-1\ (x<2.5),\ +1\ (x\ge2.5)$。
| $i$ | $h_2$ | 对错 | 加权贡献 |
|---|---|---|---|
| 1 | $-1$ | 对 | 0 |
| 2 | $-1$ | 错 | 0.167 |
| 3 | $-1$ | 对 | 0 |
| 4 | $+1$ | 对 | 0 |
$\epsilon_2\approx0.167$,$\alpha_2=\frac12\ln5\approx0.805$。
(实装会继续到 $M$;此处截断。)
D. 可部署对象
$$
{(\alpha_1,h_1),(\alpha_2,h_2)},\quad
H(x)=\mathrm{sign}\big(\alpha_1 h_1(x)+\alpha_2 h_2(x)\big)
$$
推理不再使用各样本的 $w_i$。
E. 预测 / 推断
- 训练内复核(样本 1,$x=0$):$h_1=-1$,$h_2=-1$,$H=\mathrm{sign}(-0.549-0.805)=-1$,与 $y_1$ 一致。
- 新样本 $x=2.2$:$h_1=+1$,$h_2=-1$,$H=\mathrm{sign}(0.549-0.805)=\mathrm{sign}(-0.256)=-1$。
5. 适用 / 不适用
| 维度 | 判定 | 要求或边界 | 具体例子 |
|---|---|---|---|
| 特征 | 适用 | 表格数值/已编码类别;浅树可切分;噪声别极端 | 信用表:收入、负债率、账龄,用树桩做基学习器 |
| 特征 | 不适用 | 原始图像/长文本需深层表征;标签噪声很多 | 未表征的原始像素直接 AdaBoost,错标会被越加重越疯 |
| 训练目标 | 适用 | 二分类为主(多类有扩展);接受「加权投票」式集成 | 垃圾邮件二分类,弱学习器为单词/规则树桩 |
| 训练目标 | 不适用 | 只要一条全局线性概率模型且强调系数解释 | 要对数赔率系数时优先 Logistic;AdaBoost 解释落在「哪几轮、哪些样本」 |
| 训练数据 | 适用 | 有标签;样本量中等;基学习器略好于随机猜 | 数千条标注样本,n_estimators 几十到一两百试起 |
| 训练数据 | 不适用 | 错标率高还猛加轮数;或类别极端不平衡未处理 | 10% 标签写反,越 boost 越把噪声当「难例」 |
6. 优缺点与常见坑
优点:思路清晰;弱学习器可很简单;对不少表格二分类仍是好教学与基线。
缺点:对噪声/异常值敏感;串行难并行;现代表格赛场更多用 GBDT/XGBoost/LightGBM。
坑:$M$ 过大过拟合;基学习器太强(深树)失去「弱」的意义;把 AdaBoost 当默认「最强 Boosting」而不试梯度提升族。
7. 最小可运行示例
1 | """AdaBoost:浅树桩为基学习器,输入特征矩阵,输出类别。""" |
说明:公开数据集示例,与上文手算表无关。
重要配置参数(sklearn AdaBoostClassifier)
| 参数(库内常用名) | 训练中的作用与影响 | 参考起点 / 常用范围 | 配置指导 |
|---|---|---|---|
n_estimators |
弱学习器个数;越多拟合能力越强,也越易过拟合、越慢 | 常从 50~200 起 |
验证集不再升 → 停增;可配合更小 learning_rate |
learning_rate |
缩小每轮对最终组合的贡献;小则更保守,常需更多轮 | 常 0.5~1.0;不稳可降到 0.1 量级 |
与 n_estimators 对调:lr↓ 时常需 estimators↑ |
estimator(弱学习器) |
默认决策树桩;加深单树会改变「弱」的程度 | 教学/稳妥:DecisionTreeClassifier(max_depth=1) |
先保持树桩;换强基学习器前先确认是否还符合 AdaBoost 调参直觉 |
algorithm |
多分类实现路径(如 SAMME) |
跟库默认;版本差异以文档为准 | 升级 sklearn 后核对弃用项,避免 silent 行为变化 |
8. 和近邻算法怎么挑
| 需求 | 更优先考虑 |
|---|---|
| 教学:加重错分 | AdaBoost |
| 残差提升框架 | GBDT |
| 通用数值表强基线 | XGBoost |
| 类别多、防目标编码泄漏 | CatBoost |
| 行数极大、要更快训练 | LightGBM |
| 要整段预测分布 | NGBoost |
9. 小结
- AdaBoost = 改样本权重 + 顺序弱学习器 + $\alpha_m$ 加权投票。
- 适合干净标签的表格二分类与教学;噪声大或大数据量时优先看梯度提升实现。
- 最易踩的坑:错标被当成难例越加越重。
参考文献
- Freund Y., Schapire R.E. A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting. JCSS 1997.
- scikit-learn AdaBoost
- Mohri 讲义:Boosting