adaboost

Boosting简介

分类中通常使用将多个弱分类器组合成强分类器进行分类的方法,统称为集成分类方法(Ensemble Method)。比较简单的如在Boosting之前出现Bagging的方法,首先从从整体样本集合中抽样采取不同的训练集训练弱分类器,然后使用多个弱分类器进行voting,最终的结果是分类器投票的优胜结果。这种简单的voting策略通常难以有很好的效果。直到后来的Boosting方法问世,组合弱分类器的威力才被发挥出来。Boosting意为加强、提升,也就是说将弱分类器提升为强分类器。而我们常听到的AdaBoost是Boosting发展到后来最为代表性的一类。所谓AdaBoost,即Adaptive Boosting,是指弱分类器根据学习的结果反馈Adaptively调整假设的错误率,所以也不需要任何的先验知识就可以自主训练。Breiman在他的论文里赞扬AdaBoost是最好的off-the-shelf方法。

两类Discrete AdaBoost算法流程

AdaBoosting方法大致有:Discrete Adaboost, Real AdaBoost, LogitBoost, 和Gentle AdaBoost。所有的方法训练的框架的都是相似的。以Discrete Adaboost为例,其训练流程如下:

首先初始化每个样本相同的权重(步骤2);之后使用加权的样本训练每个弱分类器 (步骤3.1);分类后得到加权的训练错误率和比例因子 (步骤3.2);将被错误分类的样本的权重加大,并将修改后的权重再次归一化(步骤3.3);循环训练过程,最终使用比例因子 组合组合弱分类器构成最终的强分类器。
下面看一个更形象的图,多个弱分类器的组合过程和结果大致为:

 

训练的循环过程,加重被错误分类的样本的权重是一种有效的加速训练的方法。由于训练中正确率高的弱分类器权重较大,新一轮的训练中正确分类的样本会越来越多,权重较小的训练样本对在新一轮的训练中起作用较小,也就是,每一轮新的训练都着重训练被错误分类的样本。

实际训练中弱分类器是一样的,但弱分类器实际使用的训练数据不同,通常使用特征向量的每一维分别构成一个弱分类器。而后来大名鼎鼎的Haar+Adaboost人脸检测方法是使用每种Haar特征构成一个弱分类器,基于Block的Haar特征比简单的基于pixel的特征有带有更多的信息,通常能得到更好的检测效果,而积分图Integral的方法使其在计算速度上也有很大优势。有兴趣可参考《基于Adaboost和Haar-like特征人脸识别》。

Real AdaBoost和Gentle AdaBoost

Discrete Adaboost是最简单的两类Boosting分类结果,而后续的Real AdaBoost(也称为AdaBoost.MH)可以看做Discrete Adaboost的泛化形式,弱分类器可以输出多个分类结果,并输出这几个分类结果的可能性,可以看成每个弱分类器都更不“武断”。而Gentle AdaBoost则是修改了迭代训练过程中错误样本权重调整的方法,较少地强调难以分类的样本,从而避免了原本AdaBoost对”非典型”的正样本权值调整很高而导致了分类器的效率下降的情况。,而产生的变种算法。AdaBoost的Matlab工具箱GML_AdaBoost_Matlab_Toolbox实现了Real AdaBoost, Gentle AdaBoost和Modest AdaBoost,且有个概况明了的介绍(工具箱的使用内部用手册,也可以参考下一篇《CART和GML AdaBoost Matlab Toolbox》):
至于LogitAdaBoost我其实不太了解,具体可参考《OpenCV关于AdaBoost的一些说明》。
 
 
 

 

(转载请注明作者 xiaowei_cqu 和出处:http://blog.csdn.net/xiaowei_cqu 未经允许请勿用于商业用途)

在学习AdaBoosting和online Boosting, 最好有bagging和boosting基础,这样看起来比较会比较顺。有空再补上。

AdaBoost 算法的主要思想之一就是在训练集上维护一套权重分布,初始化时 ,Adaboost 为训练集的每个训练例指定相同的权重 1/m。接着调用弱学习算法进行迭代学习。每次迭代后更新训练集上不同样本的权值,对训练失败的样本赋以较大的权重,也就是让学习算法在后续的学习过程中集中对比较难的训练例进行学习

首先给定一个弱学习算法和训练集 ( x1 , y1 ), ( x2 , y2 ),..., ( xN , y N ) ,xi ∈ X , 表示某个X实例空间; yi ∈ Y = {1, −1} ,Y 表示一个带类别标志的集合。在每一步的迭代中,弱学
弱假设 ht 的性能由习算法根据训练样本的分布及权重 Dt 产生一个弱假设 ht :X→{1,-1}。
它的误差 ε m来衡量:

误差 ε m 的大小与训练弱学习算法所依赖的样本分布 Dt 相关,可以理解为对于权值较大
的样本错分会导致较大的误差增量。这样设计误差函数的目的正如前文所描述的,在
于使学习算法在后续的学习过程中集中对比较难的训练例进行学习。AdaBoost 算法根
据每次迭代后得到的预测结果,为每个弱分类器根据预测的结果赋予一个权值,最终
的预测结果由每个弱分类器通过带权重的投票方式产生。

 

online Adaboost

和online算法对应是offline算法(在线学习算法和离线学习算法),以前我学的大多数都是offline算法,例如,svm,神经网络等算法

offline算法最明显的特征是:首先训练模型,模型训练完就预测,预测得到一个结果,没有考虑到预测的样本对模型的影响。

而online算法:首先也要训练一个简单的模型,其主要在预测的过程中学习,由于预测的样本没有保存在内存中,只有一次的学习机会。


online adaboost, 这篇文章发表于CVPR2006引用率蛮高,在tracking方面特别牛逼。

下面来介绍一下这篇文章的主要思想,这篇文章最好最好要有online boosting基础。也和online boosting差不多。先看算法的流程。

 

首先介绍一下选择选择器(selectors)和分类器(classifier).

在算法的开始,每个选择器里面都有m个弱分类器,算法的目的就是每个选择器在m个分类器中找出最优的一个分类器。然后再把n个选择器组合起来。这种思想确实和adbooost一样。m个弱分类器可以自己建立,也可以在每一维上建立分类器。

λ的作用是样本在每个分类上的权重。当第一个选择器分类正确是,λ的值就回减少,否则就增加,这也和adboost有点像。

αn表示每个选择器的权重,是按选择器错误率来定权的,这也和adboost有点像。所以online adoosting就是offline adboosting算法的山寨版。

 

这几年的cvpr上的几篇做tracking的文章以这个idea为基础。tracking的方法是用最近比较流行的tracking-by-detection的方法。简答的说就是在tracking的时候,observation model这一块是用一个在线训练的分类器。tracking的过程如下图所示(图中还有一步是用跟踪的结果作为训练器的新的输入):

 

 


 以上是我个人的理解,如有错误,请留言告诉我,本人感激不尽。 转自 作者:BIGBIGBOAT/Liqizhou

posted @ 2015-04-29 21:49  清风一曲  阅读(606)  评论(0编辑  收藏  举报