AdaBoost 模拟器 返回
机器学习模拟器

AdaBoost 模拟器 — 弱分类器的提升

对二维数据,以深度1的决策树桩为弱分类器迭代 T 次 AdaBoost。可视化样本权重和最终强分类器的决策边界,直观理解弱学习器组合为什么能达到高精度。

参数设置
提升迭代次数 T
查询点 x
查询点 y

数据由种子 42 的 LCG 生成(类 +1:原点附近,类 −1:环形分布)。线性不可分。

计算结果
训练精度
查询预测
提升次数 T
α 权重合计
样本权重与决策边界

蓝=类 +1 / 红=类 −1 / 点的大小=最终权重 / 背景填充=强分类器的决策边界 / 黑×=查询点

理论与主要公式

AdaBoost 是通过加权多数投票构建强分类器的提升算法。每次迭代将权重集中在前一轮误分类的样本上,顺序训练弱学习器。

加权误分类率 ε_t 和弱分类器权重 α_t:

$$\varepsilon_t = \sum_{i} w_i\,\mathbb{1}[h_t(\mathbf{x}_i) \ne y_i], \quad \alpha_t = \tfrac{1}{2}\log\frac{1-\varepsilon_t}{\varepsilon_t}$$

样本权重更新与归一化(Z_t 为归一化常数):

$$w_i \leftarrow \frac{w_i\,\exp(-\alpha_t\,y_i\,h_t(\mathbf{x}_i))}{Z_t}$$

最终强分类器:

$$H(\mathbf{x}) = \mathrm{sign}\!\left(\sum_{t=1}^{T} \alpha_t\,h_t(\mathbf{x})\right)$$

弱学习器使用深度1的决策树桩(单特征阈值判断)就已足够。T 越大,训练误差以指数速度衰减。

什么是 AdaBoost 模拟器

🙋
「弱分类器」这个词经常听到……但是弱的东西组合起来就能变强,感觉很神奇啊。
🎓
这就是 AdaBoost 有趣的地方。简单来说,把几十个只比随机猜一点点的分类器(例如深度1的决策树桩)通过「加权多数投票」组合起来,就能画出复杂的决策边界。上面的模拟器在尝试把原点附近的蓝色类和环形的红色类分开。每个树桩只能画一条横线或竖线,比如「x ≥ 阈值」「y ≥ 阈值」,但叠加 20 次后,会浮现出像曲线一样的边界。
🙋
为什么点的大小不一样?有大的也有小的。
🎓
这正是 AdaBoost 的核心。点的大小表示最终的样本权重。每次迭代会提升「前一轮分类错误的样本」的权重,所以靠近决策边界的「难分类点」会变大,容易分类的点会逐渐变小。其实就是通过权重告诉下一个弱学习器:「请专门去解决前面没能搞定的问题」。
🙋
有个「α 权重合计」的卡片,这是什么?
🎓
最终强分类器是把每个树桩的预测乘上 α_t 再加起来。α_t 是「置信度」,误分类率越小越大:$\alpha_t = \frac{1}{2}\log\frac{1-\varepsilon_t}{\varepsilon_t}$,ε=0.5(随机)时 α=0,ε=0.1 时 α≈1.1。合计值表示强分类器分数的「规模」,T 越大越大。把 T 从 1 拖到 50,看看训练精度和 α 合计是怎么一起变化的吧。
🙋
查询点 (0,0) 果然预测为「+1」!它是环的正中间,所以是蓝色对吧。
🎓
没错,原点是类 +1 的中心,符合预期。把查询点移动到 (3,0) 附近试试——它在环上,所以应该是 −1。再移到 (5,5) 等更外侧,那里没有训练数据,预测就要看树桩的组合了。边界在外推区域的稳定性较弱,这也是提升方法的普遍特性。

常见问题

两者都是集成学习,但训练方式不同。Bagging(随机森林是代表)通过 bootstrap 生成多组训练数据,独立并行地训练每个学习器并进行多数投票。AdaBoost 则在每次迭代中提高前一轮误分类样本的权重,依次训练学习器,并为每个学习器赋予 α 权重进行加权多数投票。Bagging 主要降低方差,Boosting 主要降低偏差。
AdaBoost 可以解释为指数损失的贪心最小化,是梯度提升(Gradient Boosting)的一种特例。梯度提升将损失函数一般化,对对数损失、平方误差等任意可微损失函数,用弱学习器拟合残差梯度。XGBoost 和 LightGBM 是利用直方图近似、正则化和并行化将梯度提升扩展到大规模数据的实现,在 Kaggle 等比赛中已成为表格数据的主流算法。AdaBoost 是该家族的经典起源方法。
Viola-Jones 人脸检测器(2001 年)是 AdaBoost 最著名的实用化应用。它从大量计算 Haar-like 特征的弱分类器候选中,通过 AdaBoost 选出少量有效特征,并以级联结构排列实现实时人脸检测。OpenCV 的 haarcascade_frontalface 等就是这种方法的实现,从功能机时代的手机相机到数码相机的人脸识别都广泛搭载。
理论上,迭代次数 T 越大训练误差单调下降,但测试误差不一定增加。这可以用「间隔理论」(margin theory)解释:即便训练误差归零,AdaBoost 仍会继续扩大间隔(到决策边界的距离)。但在标签噪声较多的数据上,噪声样本的权重会集中而导致过拟合。怀疑噪声较多时,LogitBoost 或梯度提升更为稳健。

现实世界中的应用

人脸检测与目标检测:Viola-Jones 人脸检测器是 AdaBoost 最著名的应用。它从大量 Haar-like 特征候选中通过 AdaBoost 选出有效特征,并用级联结构高速剔除「明显不是人脸的区域」,使当时性能有限的计算机也能实时检测人脸。数码相机人脸识别、智能手机自动对焦等图像处理现场长期使用了这一方法。

表格数据的分类与回归:AdaBoost 谱系上的梯度提升决策树(GBDT)是表格数据分类、回归任务中最强的方法之一。XGBoost、LightGBM、CatBoost 等库被广泛用于 Kaggle 比赛和实务中的信用评分、需求预测、异常检测,在深度学习不擅长的表格数据上展现真正实力。

文本分类与垃圾邮件判定:早期的邮件垃圾过滤器大多使用以词出现为弱分类器的 AdaBoost 或类似提升方法。单个词的出现与否是弱特征,但叠加数千个就能构建高精度过滤器。

医疗诊断支持:从放射图像中检测肿瘤、从心电图中检测心律失常等医疗影像和生物信号的二分类任务中,也使用提升类方法。各特征贡献度(α 权重)可解释,易于满足临床现场的可问责性要求,这是其优势。

常见误解与注意事项

最常见的误解是简单地认为「弱分类器越多精度越高」。训练误差确实随 T 单调下降,但测试误差不一定改善。特别在标签噪声较多的数据上,权重会集中到噪声样本上,后期弱学习器被用于「背诵噪声」而导致过拟合。在模拟器中把 T 设为 50 时,如果决策边界紧贴训练点曲折扭动,就是模型对新数据弱化的信号。实务上要用交叉验证选择 T,或引入 Early Stopping。

其次常见的是「决策树桩太弱,无法处理非线性问题」的成见。单个树桩确实只能画一条横线或竖线,但 AdaBoost 通过加权多数投票后,即便像环形这样复杂的类也能分离。在上面的模拟器中把 T 设为 20,训练精度应该已经足够高了。弱学习器的「弱」并不是问题,只要性能「比随机略好」,提升方法就能让误差以指数速度衰减。

最后请注意,样本权重是「损失加权」而不是「重采样」。有些实现确实会按权重比例重采样训练数据,但 AdaBoost 的标准实现只是在弱学习器训练时最小化加权误分类率,数据本身不复制。本模拟器也是直接使用全部 40 个样本,通过 w_i 调整每个样本的贡献度。权重更新式 $w_i \leftarrow w_i\,\exp(-\alpha_t\,y_i\,h_t(\mathbf{x}_i))$ 是一个对称形式:降低正确分类样本的权重,提高误分类样本的权重。