AdaBoost
一、直观理解:专盯“总分错的人”,再加权投票
AdaBoost(Adaptive Boosting)把一堆弱分类器(只比瞎猜稍好,如浅决策树桩)串起来:
- 一开始每个训练样本权重相同;
- 训练一个弱分类器;
- 分错的样本下一轮提高权重,分对的降低权重;
- 根据该弱分类器的加权错误率给它一个发言权重 ;
- 最终预测是所有弱分类器的加权投票。
像补习班策略:第一次模考后,专攻错题本;下一轮再专攻新的错题。每个老师(弱分类器)按历史战绩获得不同话语权。
AdaBoost 对噪声标签敏感:一直分错的点权重会变得极大,模型可能围着噪声转。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 二分类为主;弱学习器易得;希望提升浅树/树桩性能;特征为表格型;样本量中等。 |
| 核心优点 | 理论有训练误差指数下降等经典结果;实现清晰;常显著强于单棵浅树;特征处理相对省心。 |
| 局限与缺点 | 对异常值/标错标签敏感;弱学习器太强反而易过拟合;多分类需扩展(SAMME 等);概率输出需校准;如今在精度上常不及 GBDT/XGBoost。 |
使用前:清洗标签噪声;从树桩或浅树开始;用 CV 选迭代轮数;不平衡时配合权重或重采样。
三、核心原理
以二分类 为例。
初始化 。对 :
- 在分布 下训练弱分类器 ;
- 加权错误率
- 若 则停止;否则
- 更新权重并归一化:
最终分类器:
从加性模型与指数损失 的角度看,AdaBoost 每轮拟合都在降低指数损失,是前向阶段加性建模的特例。
多分类常用 SAMME / SAMME.R,MATLAB 的 AdaBoostM1(二类)、AdaBoostM2/GentleBoost 等对应不同变体。
四、关键决策
| 决策点 | 建议 |
|---|---|
| 弱学习器 | 默认树桩或 MaxNumSplits 很小的树 |
| 轮数 | 50–200 起,看 CV;过大可能过拟合噪声 |
| 学习率 | 部分实现有 shrink;降低可换更多轮 |
| 噪声 | 可疑标签先清洗;或改用更稳健的提升/Bagging |
| 不平衡 | Prior/Cost,或训练前重采样 |
| 与随机森林 | 噪声多、求稳 → 森林;边界难、求提升 → Boosting |
五、MATLAB 示例
X = [
1.0 1.0; 1.1 1.2; 0.9 0.8; 1.2 0.9;
3.0 3.0; 3.1 2.8; 2.9 3.2; 3.2 3.1;
1.5 2.5; 2.5 1.5 % 稍难点
];
y = [1;1;1;1; 2;2;2;2; 1;2];
% AdaBoost + 决策树弱学习器
t = templateTree("MaxNumSplits", 1); % 树桩
ada = fitcensemble(X, y, ...
"Method", "AdaBoostM1", ...
"NumLearningCycles", 50, ...
"Learners", t, ...
"LearnRate", 1);
yhat = predict(ada, X);
disp("混淆矩阵:");
disp(confusionmat(y, yhat));
% 查看训练损失随轮数变化
figure;
plot(loss(ada, X, y, "Mode", "cumulative"));
xlabel("弱学习器个数"); ylabel("训练损失");
title("AdaBoost 累积损失");
% 交叉验证选轮数
cv = fitcensemble(X, y, "Method", "AdaBoostM1", ...
"NumLearningCycles", 80, "Learners", t, ...
"KFold", 5);
% 可用 kfoldLoss(..., "Mode","cumulative") 观察
L = kfoldLoss(cv, "Mode", "cumulative");
figure; plot(L); xlabel("轮数"); ylabel("CV 损失");
[~, bestT] = min(L);
fprintf("CV 建议轮数 ≈ %d, loss=%.3f\n", bestT, L(bestT));
% 预测分数
[label, score] = predict(ada, X);
disp("分数(前 5):"); disp(score(1:5,:));
六、如何解释结果
- 轮数—误差曲线:是否已平台、是否过拟合上扬;
- 弱学习器权重 :哪些轮贡献大;
- 高权重样本:最后仍难分的点是否为噪声或边界;
- 特征重要性(若基学习器为树):累计分裂贡献;
- 报告:Method、轮数、树深、LearnRate、CV 曲线、与单树/森林对比。
七、常见误区
1. 基学习器用很深的树
Boosting 需要的是弱而准的方向,过强基学习器会让后期轮次很难再改进且易过拟合。
2. 轮数只加不加验证
训练误差一直降不代表测试误差一直降。
3. 噪声点权重爆炸仍继续猛训
应检查标签,或换 Bagging/稳健损失。
4. 把 AdaBoost 分数直接当概率
需校准后再谈风险。
5. 多分类误用仅支持二类的接口
确认 AdaBoostM1 vs 多类方法。
八、小结
AdaBoost 通过提高难分样本权重、加权组合弱分类器,以指数损失驱动的前向加性模型提升性能。
它是理解 Boosting 的最佳入口。现代表格题更常上 GBDT,但 AdaBoost 的“重权重—再学习—再组合”叙事清晰,适合教学与中等难度二分类基线。