AdaBoost

来源:互联网 发布:淘宝访客数突然下降 编辑:程序博客网 时间:2024/05/08 11:57

注:在《Frequency-tuned taillight-based nighttime vehicle braking warning system》论文中看到使用Adaboost方法进行车灯类型的分类,通过这个方式来排除非车灯灯源。故查询了Adaboost方法的一些概念和用法:

 

AdaBoost方法的自适应在于:前一个分类器分错的样本会被用来训练下一个分类器。AdaBoost方法是一种迭代算法,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率。每一个训练样本都被赋予一个权重,表明它被某个分类器选入训练集的概率。如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它被选中的概率就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。通过这样的方式,AdaBoost方法能“聚焦于”那些较难分(更富信息)的样本上。虽然AdaBoost方法对于噪声数据和异常数据很敏感。但相对于大多数其它学习算法而言,却又不会很容易出现过拟合现象。

    在具体实现上,最初令每个样本的权重都相等,对于第k次迭代操作,我们就根据这些权重来选取样本点,进而训练分类器Ck。然后就根据这个分类器,来提高被它分错的的样本的权重,并降低被正确分类的样本权重。然后,权重更新过的样本集被用于训练下一个分类器Ck。整个训练过程如此迭代地进行下去。最后,把所有的分类器Ck线性组合起来。伪代码如下图所示。

    这个过程就像是做练习题,刚开始的时候对于所有题目一视同仁,一遍做完之后,对一下答案,把对的和错的分开,然后把错题转移到错题集去,下次做题的时候就不是对所有题目等同对待了,应该重点关注错题集,和错题集类似的题目应该引起更大关注,反复去做,对于简单的题目,可以简单带过。这样做了很多的题目之后,简单题目和易错题目都解决了。


    看了伪代码,可能还是云里雾里的,不要紧。下面有一个很好的具体例子来解释说明AdaBoost。

    首先,有正样本和负样本,分布如下图,图中,“+”和“-”分别表示正样本和负样本。显然,我们是无法直接用一条直线把两类分来的,最好的分割线,只能是曲线。在这个过程中,每次我们都使用最好的水平或者垂直的直线作为分类器,来进行分类。


    第一步:初始化权值,用垂直的的直线作为分类器。根据分类的正确率,得到一个新的样本分布D2­,一个子分类器h1。



      

    然后,这里的参数是怎么计算得来的呢?这里总共有10个样本,所以每一个的权值为0.1,从上图可以看出,有三个正样本(蓝色+)被错分类负样本了(红色-),根据所以误差为三个错误样本的权值之和,即ɛ1=(0.1+0.1+0.1)=0.3。而ɑ1 的计算是根据来算的,。然后,分错的样本权值要变大才行,下次分类要引起更多的关注。所以,进行权值更新。权值更新公式如下:


    正确分类的七个点,权值保持0.1不变,错误分类的三个点,权值为

    也就是说,现在的权值变成了7个0.1和3个0.233,如此迭代下去。


    第二步:根据新的权值,用垂直的的直线作为分类器。根据分类的正确率,得到一个新的样本分布D3­,一个子分类器h2。




    第三步:根据新的权值,用水平的的直线作为分类器。根据分类的正确率,得到一个新的样本分布D4­,一个子分类器h3。  

                        


    第四步:把所有子分类器线性组合起来。每一个的权值就是前面求出来的ɑ的值。

              


三、AdaBoost应用实例
      
    关于AdaBoost的应用,最为经典就是用于人脸识别的那两篇文章,现在也已经包含在opencv里面了,人脸识别的分类器文件opencv也带了。
    P. Viola and M. Jones.  Rapid object detection using a boosted cascade of simple features.
    R. Lienhart and J. Maydt.  An Extended Set of Haar-like Features for Rapid Object Detection.
    Paul Viola 和Miachael Jones等利用Adaboost算法构造了人脸检测器,称为Viola-Jones检测器,取得很好的效果。之后Rainer Lienhart和Jochen Maydt用对角特征,即Haar-like特征对检测器进行扩展。OpenCV中自带的人脸检测算法即基于此检测器,称为“Haar分类器”。
    用Adaboost对Haar特征进行分类,也取得了很好地效果。也因此,Boosting的方法在十年前又变得很火,出现了很多种变种的算法。

四、总结

    最后,总结一下。Adaboost是一种比较有特点的算法,可以总结如下:
  1)每次迭代改变的是样本的分布,而不是重复采样(reweight);
  2)样本分布的改变取决于样本是否被正确分类,总是分类正确的样本权值低,总是分类错误的样本权值高(通常是边界附近的样本);
  3)最终的结果是弱分类器的加权组合,权值表示该弱分类器的性能。


  简单来说,Adaboost有很多优点:
  1)adaboost是一种有很高精度的分类器
  2)可以使用各种方法构建子分类器,adaboost算法提供的是框架
  3)当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单
  4)简单,不用做特征筛选
  5)不用担心overfitting!


0 0