Boosting 是一类算法的总称,这类算法的特点是通过训练若干弱分类器,然后将弱分类器组合成强分类器进行分类。为什么要这样做呢?因为弱分类器训练起来很容易,将弱分类器集成起来,往往可以得到很好的效果。俗话说,"三个臭皮匠,顶个诸葛亮",就是这个道理。这类 Boosting 算法的特点是各个弱分类器之间是串行训练的,当前弱分类器的训练依赖于上一轮弱分类器的训练结果。各个弱分类器的权重是不同的,效果好的弱分类器的权重大,效果差的弱分类器的权重小。值得注意的是,AdaBoost 不止适用于分类模型,也可以用来训练回归模型。这需要将弱分类器替换成回归模型,并改动损失函数。

本文将重点介绍用 AdaBoost 进行分类的算法原理。AdaBoost(adaptive boosting),即自适应提升算法。

AdaBoost 算法有其独特的优点,那就是可以将不同的分类算法组合起来,形成强分类器。这就可以充分利用不同分类算法的优势进行建模。也可以将同一算法的不同设置进行组合,这样训练的模型比单一设置模型的训练精度高。

当然,就如每一个算法都有自己的优缺点一样,AdaBoost 也有自身的缺点。AdaBoost 算法只直接支持二分类,遇到多分类的情况,需要借助 one-versus-rest 的思想来训练多分类模型。关于 one-verus-rest 的细节可以参考本站的其他资料。

为了让大家有一个感性的认识,在文章一开始先举个 AdaBoost 训练出来的强分类器的例子,如下所示,强分类器 G(x)中包含三个弱分类器 f(x), g(x) 和 z(x), 其中每个弱分类器的权重分别为0.80, 0.69和0.71。
G(x) = sign( 0.80 f(x) + 0.69 g(x) + 0.71 * z(x) )

AdaBoost原理

AdaBoost 的核心就是不断迭代训练弱分类器,并计算弱分类器的权重。需要注意的是,弱分类器的训练依赖于样本权重。每一轮迭代的样本权重都不相同,依赖于弱分类器的权重值和上一轮迭代的样本权重。具体过程如下:

训练当前迭代最优弱分类器

最优弱分类器是错误率最小的那个弱分类器。错误率的计算公式是:

error.png

其中m = 1,2,..,M,代表第m轮迭代。i代表第i个样本。w 是样本权重。I指示函数取值为1或0,当I指示函数括号中的表达式为真时,I 函数结果为1;当I函数括号中的表达式为假时,I 函数结果为0。取错误率最低的弱分类器为当前迭代的最优弱分类器。

注意,第一轮迭代计算时样本权重初始化为总样本数分之一。

计算最优弱分类器的权重

最优弱分类器的权重只与该弱分类器的错误率有关。弱分类器的权重计算公式如下:

alpha.png

可以看出,错误率越小,则 alpha 值越大,即该弱分类器的权重越高;反之,错误率越大,则 alpha 值越小,则该弱分类器的权重越小。这样可以使分类精度高的弱分类器起到更大的作用,并削弱精度低的弱分类器的作用。
根据错误率更新样本权重
样本权重的更新与当前样本权重和弱分类器的权重有关。样本权重更新公式如下:

update.png

其中m = 1,2,..,M,代表第 m 轮迭代。i代表第i个样本。w 是样本权重。alpha 是弱分类器的权重。当样本被正确分类时,y 和 Gm 取值一致,则新样本权重变小;当样本被错误分类时,y 和 Gm 取值不一致,则新样本权重变大。这样处理,可以使被错误分类的样本权重变大,从而在下一轮迭代中得到重视。

迭代终止条件

不断重复1,2,3步骤,直到达到终止条件为止。终止条件是强分类器的错误率低于最低错误率阈值或达到最大迭代次数。