AdaBoost 算法的解释

我们前面提到过 Bagging 的数学基础是 Bootstrap 理论、但还没有讲 Boosting 的数学基础。本篇文章拟打算直观地阐述 Boosting 族的代表算法——AdaBoost 算法的解释,由于具体的推导相当繁琐,相关的细节我们会放在相关数学理论里面说明

首先将结论给出:AdaBoost 算法是前向分步算法的特例,AdaBoost 模型等价于损失函数为指数函数的加法模型

其中,加法模型的定义是直观且熟悉的:

这里的为基函数,是基函数的权重,是基函数的参数。显然的是,我们的 AdaBoost 算法的最后一步生成的模型正是这么一个加法模型

而所谓的前向分步算法,就是从前向后、一步一步地学习加法模型中的每一个基函数及其权重而非将作为一个整体来训练,这也正是 AdaBoost 的思想

如果此时需要最小化的损失函数是指数损失函数的话,通过一系列的数学推导后可以证明、此时的加法模型确实等价于 AdaBoost 模型

可能大家会觉得这里面有一些别扭:为什么一个实现起来非常简便的模型,它背后的数学原理却如此复杂?事实上有趣的是,AdaBoost 是为数不多的、先有算法后有解释的模型。也就是说,是先有了 AdaBoost 这个东西,然后数学家们看到它的表现非常好之后、才开始绞尽脑汁并想出了一套适用于 AdaBoost 的数学理论。更有意思的是,该数学理论并非毫无意义:在 AdaBoost 的回归问题中,就可以用前向分步算法的理论、将每一步的训练转化为了拟合当前模型的残差、从而简化了训练步骤。我们可以简单地叙述一下其原理:

加法模型的等价叙述为

其中为第步的基函数(亦即 AdaBoost 中的弱分类器),为其参数。当采用平方误差损失函数时,可知第步的损失变为:

其中是第步模型的残差。

从上式可以看出在第步时,为了最小化损失,只需让当前的基函数拟合当前模型的残差即可,这就完成了 AdaBoost 回归问题的转化。比较具有代表性的是回归问题的提升树算法,它正是利用了以上叙述的转化技巧来进行模型训练的

观众老爷们能赏个脸么 ( σ'ω')σ