1204.机器学习-集成学习-2.Boosting-1.AdaBoost

平面上红蓝两类点交织,一条直线怎么切都剩几个错分点。与其硬找一条「完美边界」,不如:先找一条还过得去的切线,把切错的点加重,再找下一条,最后把多条切线按表现好坏加权叠起来

这就是 自适应提升(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. 直觉:加重错分 → 再学 → 加权合成

图 1 第一轮切分并加重错分点

图 2 后续轮次继续关注难分点

图 3 多条弱边界加权叠成强分类器

典型基学习器是浅决策树桩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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
"""AdaBoost:浅树桩为基学习器,输入特征矩阵,输出类别。"""
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import AdaBoostClassifier
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)

clf = AdaBoostClassifier(
estimator=DecisionTreeClassifier(max_depth=1),
n_estimators=50,
random_state=42,
)
clf.fit(X_train, y_train)
print("test acc:", clf.score(X_test, y_test))

说明:公开数据集示例,与上文手算表无关。

重要配置参数(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$ 加权投票
  • 适合干净标签的表格二分类与教学;噪声大或大数据量时优先看梯度提升实现。
  • 最易踩的坑:错标被当成难例越加越重

参考文献

  1. Freund Y., Schapire R.E. A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting. JCSS 1997.
  2. scikit-learn AdaBoost
  3. Mohri 讲义:Boosting
-------------本文结束感谢您的阅读-------------