提升方法(一):AdaBoost算法

目录

1 AdaBoost算法

1.1 AdaBoost算法基本思路 

1.2 AdaBoost算法步骤

1.3 AdaBoost算法的例子

2 AdaBoost算法的训练误差分析

2.1 定理1(AdaBoost的训练误差界)

2.2 定理2(二类分类问题AdaBoost的训练误差界)

3 AdaBoost算法的解释

3.1 前向分步算法

3.2 前向分步算法与Adaboost

4 参考文献


1 AdaBoost算法

1.1 AdaBoost算法基本思路 

1.2 AdaBoost算法步骤

        给定一个二分类的训练数据集,其中,每个样本点由实例与标记组成,实例,标记,Adaboost的目的就是从训练数据中学习一系列弱分类器基本分类器,然后将这些弱分类器组合成一个强分类器。

Adaboost的算法流程如下:

  • 步骤1. 首先,初始化训练数据的权值分布。每一个训练样本最开始时都被赋予相同的权值:1/N。

         

  • 步骤2. 进行多轮迭代,用m = 1,2, ..., M表示迭代的第多少轮
    • a. 使用具有权值分布Dm的训练数据集学习,得到基本分类器(选取让误差率最低的阈值来设计基本分类器)  
    • b计算Gm(x)在训练数据集上的分类误差率:,由上述式子可知,Gm(x)在训练数据集上的误差率就是被Gm(x)误分类样本的权值之和。
    • c. 计算Gm(x)的系数。,   表示Gm(x)在最终分类器中的重要程度(目的:得到基本分类器在最终分类器中所占的权重。注:底数是自然对数e,应为In。由上述式子可知, <= 1/2时, >= 0,且随着的减小而增大,意味着分类误差率越小的基本分类器在最终分类器中的作用越大
    • d. 更新训练数据集的权值分布(目的:得到样本的新的权值分布),用于下一轮迭代

               其中,是规范化因子,使得成为一个概率分布:

                

               使得被基本分类器Gm(x)误分类样本的权值增大,而被正确分类样本的权值减小。就这样,通过这样的方式,AdaBoost方法能“重点关注”或“聚焦于”那些较难分的样本上。 

  • 步骤3. 组合各个弱分类器

                

         从而得到最终分类器,如下:

               

1.3 AdaBoost算法的例子

       求解过程:初始化训练数据的权值分布,,然后分别对于m = 1,2,3, ...等值进行迭代。

       拿到这10个数据的训练样本后,根据 X 和 Y 的对应关系,要把这10个数据分为两类,一类是“1”,一类是“-1”,根据数据的特点发现:“0 1 2”这3个数据对应的类是“1”,“3 4 5”这3个数据对应的类是“-1”,“6 7 8”这3个数据对应的类是“1”,9是比较孤独的,对应类“-1”。抛开孤独的9不讲,“0 1 2”、“3 4 5”、“6 7 8”这是3类不同的数据,分别对应的类是1、-1、1,直观上推测可知,可以找到对应的数据分界点,比如2.5、5.5、8.5 将那几类数据分成两类。当然,这只是主观臆测,下面实际计算下这个具体过程。

(1)对于m=1:

  • a.  在权值分布为D1(10个数据,每个数据的权值皆初始化为0.1)的训练数据上,经过计算可得:
    • 阈值v取2.5时误差率为0.3(x < 2.5时取1,x > 2.5时取-1,则6 7 8分错,误差率为0.3),
    • 阈值v取5.5时误差率最低为0.4(x < 5.5时取1,x > 5.5时取-1,则3 4 5 6 7 8皆分错,误差率0.6大于0.5,不可取。故令x > 5.5时取1,x < 5.5时取-1,则0 1 2 9分错,误差率为0.4),
    • 阈值v取8.5时误差率为0.3(x < 8.5时取1,x > 8.5时取-1,则3 4 5分错,误差率为0.3)。

                            

  • b.  得到在训练数据集上的误差率(被G1(x)误分类样本“6 7 8”的权值之和)e1=P(G1(xi)≠yi) = 3*0.1 = 0.3
  • c.  根据误差率e1计算的系数:。这个a1代表G1(x)在最终的分类函数中所占的权重,为0.4236。
  • d.  更新训练数据的权值分布,用于下一轮迭代

                            

        由权值更新的公式可知,每个样本的新权值是变大还是变小,取决于它是被分错还是被分正确。即如果某个样本被分错了,则yi * Gm(xi)为负,负负得正,结果使得整个式子变大(样本权值变大),否则变小。

        第一轮迭代后,最后得到各个数据新的权值分布D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715,  0.0715, 0.1666, 0.1666, 0.1666, 0.0715)。由此可以看出,因为样本中是数据“6 7 8”被G1(x)分错了,所以它们的权值由之前的0.1增大到0.1666,反之,其它数据皆被分正确,所以它们的权值皆由之前的0.1减小到0.0715。

        分类函数f1(x)= a1*G1(x) = 0.4236G1(x)。

(2)对于m=2:

  • a.  在权值分布为D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715,  0.0715, 0.1666, 0.1666, 0.1666, 0.0715)的训练数据上,经过计算可得:
    • 阈值v取2.5时误差率为0.1666*3(x < 2.5时取1,x > 2.5时取-1,则6 7 8分错,误差率为0.1666*3),
    • 阈值v取5.5时误差率最低为0.0715*4(x > 5.5时取1,x < 5.5时取-1,则0 1 2 9分错,误差率为0.0715*3 + 0.0715),
    • 阈值v取8.5时误差率为0.0715*3(x < 8.5时取1,x > 8.5时取-1,则3 4 5分错,误差率为0.0715*3)。

           所以,阈值v取8.5时误差率最低,故第二个基本分类器为:

              

  • b.  把样本“3 4 5”分错了,根据D2可知它们的权值为0.0715, 0.0715,  0.0715,所以G2(x)在训练数据集上的误差率e2=P(G2(xi)≠yi) = 0.0715 * 3 = 0.2143。
  • c.  计算G2的系数

              

  • d.  更新训练数据的权值分布

              

        D3 = (0.0455, 0.0455, 0.0455, 0.1667, 0.1667,  0.01667, 0.1060, 0.1060, 0.1060, 0.0455)。被分错的样本“3 4 5”的权值变大,其它被分对的样本的权值变小。
        f2(x)=0.4236G1(x) + 0.6496G2(x)
        此时,得到的第二个基本分类器sign(f2(x))在训练数据集上有3个误分类点(即3 4 5)

(3)对于m=3:

  • a.  在权值分布为D3 = (0.0455, 0.0455, 0.0455, 0.1667, 0.1667,  0.01667, 0.1060, 0.1060, 0.1060, 0.0455)的训练数据上,经过计算可得:
    • 阈值v取2.5时误差率为0.1060*3(x < 2.5时取1,x > 2.5时取-1,则6 7 8分错,误差率为0.1060*3),
    • 阈值v取5.5时误差率最低为0.0455*4(x > 5.5时取1,x < 5.5时取-1,则0 1 2 9分错,误差率为0.0455*3 + 0.0715),
    • 阈值v取8.5时误差率为0.1667*3(x < 8.5时取1,x > 8.5时取-1,则3 4 5分错,误差率为0.1667*3)。

           所以阈值v取5.5时误差率最低,故第三个基本分类器为:

                

  • b.  被误分类的样本是:0 1 2 9,这4个样本所对应的权值皆为0.0455,所以G3(x)在训练数据集上的误差率e3 = P(G3(xi)≠yi) = 0.0455*4 = 0.1820。
  • c.  计算G3的系数

                  

  • d.  更新训练数据的权值分布

        D4 = (0.125, 0.125, 0.125, 0.102, 0.102,  0.102, 0.065, 0.065, 0.065, 0.125)。被分错的样本“0 1 2 9”的权值变大,其它被分对的样本的权值变小。

        f3(x)=0.4236G1(x) + 0.6496G2(x)+0.7514G3(x)

        此时,得到的第三个基本分类器sign(f3(x))在训练数据集上有0个误分类点。至此,整个训练过程结束。

        从上述过程中可以发现,如果某些个样本被分错,它们在下一轮迭代中的权值将被增大,同时,其它被分对的样本在下一轮迭代中的权值将被减小。就这样,分错样本权值增大,分对样本权值变小,而在下一轮迭代中,总是选取让误差率最低的阈值来设计基本分类器,所以误差率e(所有被Gm(x)误分类样本的权值之和)不断降低。

        综上,将上面计算得到的α1、α2、α3各值代入G(x)中,G(x) = sign[f3(x)] = sign[ α1 * G1(x) + α2 * G2(x) + α3 * G3(x) ],得到最终的分类器为:

       

2 AdaBoost算法的训练误差分析

2.1 定理1(AdaBoost的训练误差界)

        Adaboost 最终分类器的训练误差的上界为:

                         

        关于后半部分,根据:

                    

        整个的推导过程如下:

                    

        这个结果说明,可以在每一轮选取适当的Gm使得Zm最小,从而使训练误差下降最快。

2.2 定理2(二类分类问题AdaBoost的训练误差界)

         

       其中,

      

         

          

3 AdaBoost算法的解释

        Adaboost 还有另外一种理解,即可以认为其模型加法模型损失函数指数函数学习算法前向分步算法的二类分类学习方法。

3.1 前向分步算法

        考虑加法模型

               

        其中,称为基函数,称为基函数的参数,称为基函数的系数。

        在给定训练数据及损失函数的条件下,学习加法模型成为经验风险极小化问题,即损失函数极小化问题:

                       (8.14)

         

        

  • 输入:训练数据集,损失函数:,基函数集:
  • 输出:加法模型

  • 算法步骤:
    • 1. 初始化
    • 2. 对于m=1,2,..M
      • a.  极小化损失函数, 得到参数
      • b.  更新
      • c.  最终得到加法模型:

       就这样,前向分步算法将同时求解从m=1M的所有参数()的优化问题简化为逐次求解各个(1≤m≤M)的优化问题。

3.2 前向分步算法与Adaboost

       其实,Adaboost算法就是前向分步算法的一个特例,Adaboost 中,各个基本分类器就相当于加法模型中的基函数,且其损失函数为指数函数

       换句话说,当前向分步算法中的基函数为Adaboost中的基本分类器时,加法模型等价于Adaboost的最终分类器

                    

       这个最终分类器其实就是一个加法模型。只是这个加法模型由基本分类器及其系数组成,m = 1, 2, ..., M。前向分步算法逐一学习基函数的过程,与Adaboost算法逐一学习各个基本分类器的过程一致。

        下面,证明:当前向分步算法的损失函数是指数损失函数  时,其学习的具体操作等价于Adaboost算法的学习过程

        假设经过m-1轮迭代,前向分步算法已经得到

                   

        而后在第m轮迭代得到。其中,为:

                     

        而未知。所以,现在目标便是根据前向分步算法训练,使得最终在训练数据集T上的指数损失最小,即

                 

         针对这种需要求解多个参数的情况,可以先固定其它参数,求解其中一两个参数,然后逐一求解剩下的参数。例如我们可以固定,只针对做优化。

         换言之,在面对 这2m个参数都未知的情况下,可以:

  1. 先假定已知,求解出
  2. 然后再逐一求解其它未知参数。

          且考虑到上式中的既不依赖也不依赖G,所以是个与最小化无关的固定值,记为,即,则上式可以表示为(后面要多次用到这个式子,简记为):

                      

        值得一提的是,虽然与最小化无关,但依赖于,随着每一轮迭代而发生变化。

        接下来,便是要证使得上式达到最小的就是Adaboost算法所求解得到的

       为求解上式,咱们先求再求

       首先求。对于任意,使上式最小的G(x)由下式得到:

                        

        其中,

       跟1.2节所述的误差率的计算公式对比下:

                    

       可知,上面得到的便是Adaboost算法的基本分类器,因为它是在第 轮加权训练数据时,使分类误差率最小的基本分类器。换言之,这个便是Adaboost算法所要求的,别忘了,在Adaboost算法的每一轮迭代中,都是选取让误差率最低的阈值来设计基本分类器。

       然后求。还是回到之前的这个式子上:

                        

       这个式子的后半部分可以进一步化简,得:

                        

      接着将上面求得的

                        

       代入上式中,且对求导,令其求导结果为0,即得到使得一式最小的,即为:

                        

       这里的跟上文1.2节中的计算公式完全一致。

       此外,毫无疑问,上式中的便是误差率:

                        

       即就是被Gm(x)误分类样本的权值之和。

      就这样,结合模型,跟,可以推出

              

      从而有:

     与上文1.2节介绍的权值更新公式

                

     相比,只相差一个规范化因子,即后者多了一个

               

     所以,整个过程下来,我们可以看到,前向分步算法逐一学习基函数的过程,确实是与Adaboost算法逐一学习各个基本分类器的过程一致,两者完全等价。

4 参考文献

  1. wikipedia上关于Adaboost的介绍:http://zh.wikipedia.org/zh-cn/AdaBoost;
  2. 邹之决策树与Adaboost PPT:http://pan.baidu.com/s/1hqePkdY;
  3. 邹讲Adaboost指数损失函数推导的PPT:http://pan.baidu.com/s/1kTkkepD(第85页~第98页);
  4. 《统计学习方法 李航著》第8章;

    有道云笔记

  5. 关于adaboost的一些浅见:http://blog.sina.com.cn/s/blog_6ae183910101chcg.html;
  6. A Short Introduction to Boosting:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.93.5148&rep=rep1&type=pdf;
  7. 南大周志华教授做的关于boosting 25年的报告PPT:http://vdisk.weibo.com/s/FcILTUAi9m111;
  8. 《数据挖掘十大算法》第7章 Adaboost:http://summerbell.iteye.com/blog/532376;
  9. 统计学习那些事:http://cos.name/2011/12/stories-about-statistical-learning/;
  10. 统计学习基础学习笔记:http://www.loyhome.com/%E2%89%AA%E7%BB%9F%E8%AE%A1%E5%AD%A6%E4%B9%A0%E7%B2%BE%E8%A6%81the-elements-of-statistical-learning%E2%89%AB%E8%AF%BE%E5%A0%82%E7%AC%94%E8%AE%B0%EF%BC%88%E5%8D%81%E5%9B%9B%EF%BC%89/;
  11. PRML第十四章组合模型读书笔记:http://vdisk.weibo.com/s/DmxNcM5_IaUD;
  12. Adaboost 算法的原理与推导_结构之法 算法之道-CSDN博客_adaboost

提升方法(二):提升树:提升方法(二):提升树_意念回复的博客-CSDN博客

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值