AdaBoost算法

  • Post author:
  • Post category:其他


AdaBoost算法

AdaBoost 简介


前面五篇文章涵盖了分类、回归、关联分析等诸多模型,其中分类模型被介绍得最多。原因是分类在机器学习方向是应用最广的方向之一。本文将要介绍的是分类模型中的另一种模型,AdaBoost(adaptive boosting),即自适应提升算法。


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


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


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


为了让读者有一个感性的认识,在文章一开始先举个 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 的核心就是不断迭代训练弱分类器,并计算弱分类器的权重。需要注意的是,弱分类器的训练依赖于样本权重。每一轮迭代的样本权重都不相同,依赖于弱分类器的权重值和上一轮迭代的样本权重。具体过程如下:

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


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


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


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

计算最优弱分类器的权重


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





可以看出,错误率越小,则 alpha 值越大,即该弱分类器的权重越高;反之,错误率越大,则 alpha 值越小,则该弱分类器的权重越小。这样可以使分类精度高的弱分类器起到更大的作用,并削弱精度低的弱分类器的作用。

根据错误率更新样本权重


样本权重的更新与当前样本权重和弱分类器的权重有关。样本权重更新公式如下:


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

迭代终止条件


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

用例子解释 AdaBoost 原理


本节主要用示例数据详细说明用上节介绍的 AdaBoost 原理进行分类的过程。本例用到的数据集如表1所示。为方便说明,本文所用弱分类器为形如x<1.5,则y=1,否则y=-1的简单分类算法。熟悉了 AdaBoost 原理的读者,可以使用其他分类算法作为弱分类器。如使用本系列上篇文章介绍的 CART 树中的分类树作为弱分类器,可训练出提升分类树模型。


第一轮迭代


1.a 选择最优弱分类器


第一轮迭代时,样本权重初始化为(0.167, 0.167, 0.167, 0.167, 0.167, 0.167)。


表1数据集的切分点有0.5, 1.5, 2.5, 3.5, 4.5


若按0.5切分数据,得弱分类器x < 0.5,则 y = 1; x > 0.5, 则 y = -1。此时错误率为2 * 0.167 = 0.334


若按1.5切分数据,得弱分类器x < 1.5,则 y = 1; x > 1.5, 则 y = -1。此时错误率为1 * 0.167 = 0.167


若按2.5切分数据,得弱分类器x < 2.5,则 y = 1; x > 2.5, 则 y = -1。此时错误率为2 * 0.167 = 0.334


若按3.5切分数据,得弱分类器x < 3.5,则 y = 1; x > 3.5, 则 y = -1。此时错误率为3 * 0.167 = 0.501


若按4.5切分数据,得弱分类器x < 4.5,则 y = 1; x > 4.5, 则 y = -1。此时错误率为2 * 0.167 = 0.334


由于按1.5划分数据时错误率最小为0.167,则最优弱分类器为x < 1.5,则 y = 1; x > 1.5, 则 y = -1。


1.b 计算最优弱分类器的权重


alpha = 0.5 * ln((1 – 0.167) / 0.167) = 0.8047


1.c 更新样本权重


x = 0, 1, 2, 3, 5时,y分类正确,则样本权重为:


0.167 * exp(-0.8047) = 0.075


x = 4时,y分类错误,则样本权重为:


0.167 * exp(0.8047) = 0.373


新样本权重总和为0.075 * 5 + 0.373 = 0.748


规范化后,


x = 0, 1, 2, 3, 5时,样本权重更新为:


0.075 / 0.748 = 0.10


x = 4时, 样本权重更新为:


0.373 / 0.748 = 0.50


综上,新的样本权重为(0.1, 0.1, 0.1, 0.1, 0.5, 0.1)。


此时强分类器为G(x) = 0.8047 * G1(x)。G1(x)为x < 1.5,则 y = 1; x > 1.5, 则 y = -1。则强分类器的错误率为1 / 6 = 0.167。


第二轮迭代


2.a 选择最优弱分类器


若按0.5切分数据,得弱分类器x > 0.5,则 y = 1; x < 0.5, 则 y = -1。此时错误率为0.1 * 4 = 0.4


若按1.5切分数据,得弱分类器x < 1.5,则 y = 1; x > 1.5, 则 y = -1。此时错误率为1 * 0.5 = 0.5


若按2.5切分数据,得弱分类器x > 2.5,则 y = 1; x < 2.5, 则 y = -1。此时错误率为0.1 * 4 = 0.4


若按3.5切分数据,得弱分类器x > 3.5,则 y = 1; x < 3.5, 则 y = -1。此时错误率为0.1 * 3 = 0.3


若按4.5切分数据,得弱分类器x < 4.5,则 y = 1; x > 4.5, 则 y = -1。此时错误率为2 * 0.1 = 0.2


由于按4.5划分数据时错误率最小为0.2,则最优弱分类器为x < 4.5,则 y = 1; x > 4.5, 则 y = -1。


2.b 计算最优弱分类器的权重


alpha = 0.5 * ln((1 –0.2) / 0.2) = 0.6931


2.c 更新样本权重


x = 0, 1, 5时,y分类正确,则样本权重为:


0.1 * exp(-0.6931) = 0.05


x = 4 时,y分类正确,则样本权重为:


0.5 * exp(-0.6931) = 0.25


x = 2,3时,y分类错误,则样本权重为:


0.1 * exp(0.6931) = 0.20


新样本权重总和为 0.05 * 3 + 0.25 + 0.20 * 2 = 0.8


规范化后,


x = 0, 1, 5时,样本权重更新为:


0.05 / 0.8 = 0.0625


x = 4时, 样本权重更新为:


0.25 / 0.8 = 0.3125


x = 2, 3时, 样本权重更新为:


0.20 / 0.8 = 0.250


综上,新的样本权重为(0.0625, 0.0625, 0.250, 0.250, 0.3125, 0.0625)。


此时强分类器为G(x) = 0.8047 * G1(x) + 0.6931 * G2(x)。G1(x)为x < 1.5,则 y = 1; x > 1.5, 则 y = -1。G2(x)为x < 4.5,则 y = 1; x > 4.5, 则 y = -1。按G(x)分类会使x=4分类错误,则强分类器的错误率为1 / 6 = 0.167。


第三轮迭代


3.a 选择最优弱分类器


若按0.5切分数据,得弱分类器x < 0.5,则 y = 1; x > 0.5, 则 y = -1。此时错误率为0.0625 + 0.3125 = 0.375


若按1.5切分数据,得弱分类器x < 1.5,则 y = 1; x > 1.5, 则 y = -1。此时错误率为1 * 0.3125 = 0.3125


若按2.5切分数据,得弱分类器x > 2.5,则 y = 1; x < 2.5, 则 y = -1。此时错误率为0.0625 * 2 + 0.250 + 0.0625 = 0.4375


若按3.5切分数据,得弱分类器x > 3.5,则 y = 1; x < 3.5, 则 y = -1。此时错误率为0.0625 * 3 = 0.1875


若按4.5切分数据,得弱分类器x < 4.5,则 y = 1; x > 4.5, 则 y = -1。此时错误率为2 * 0.25 = 0.5


由于按3.5划分数据时错误率最小为0.1875,则最优弱分类器为x > 3.5,则 y = 1; x < 3.5, 则 y = -1。


3.b 计算最优弱分类器的权重


alpha = 0.5 * ln((1 –0.1875) / 0.1875) = 0.7332


3.c 更新样本权重


x = 2, 3时,y分类正确,则样本权重为:


0.25 * exp(-0.7332) = 0.1201


x = 4 时,y分类正确,则样本权重为:


0.3125 * exp(-0.7332) = 0.1501


x = 0, 1, 5时,y分类错误,则样本权重为:


0.0625 * exp(0.7332) = 0.1301


新样本权重总和为 0.1201 * 2 + 0.1501 + 0.1301 * 3 = 0.7806


规范化后,


x = 2, 3时,样本权重更新为:


0.1201 / 0.7806 = 0.1539


x = 4时, 样本权重更新为:


0.1501 / 0.7806 = 0.1923


x = 0, 1, 5时, 样本权重更新为:


0.1301 / 0.7806 = 0.1667


综上,新的样本权重为(0.1667, 0.1667, 0.1539, 0.1539, 0.1923, 0.1667)。


此时强分类器为G(x) = 0.8047 * G1(x) + 0.6931 * G2(x) + 0.7332 * G3(x)。G1(x)为x < 1.5,则 y = 1; x > 1.5, 则 y = -1。G2(x)为x < 4.5,则 y = 1; x > 4.5, 则 y = -1。G3(x)为x > 3.5,则 y = 1; x < 3.5, 则 y = -1。按G(x)分类所有样本均分类正确,则强分类器的错误率为0 / 6 = 0。则停止迭代,最终强分类器为G(x) = 0.8047 * G1(x) + 0.6931 * G2(x) + 0.7332 * G3(x)。




版权声明:本文为kexinxin1原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。