AdaBoost算法详解

AdaBoost(Adaptive Boosting,自适应提升)算法是由来自AT&T实验室的Freund和Schapire于1995年首次提出,该算法解决了早期Boosting算法的一些实际执行难题,而且该算法可以作为一种从一系列弱分类器中产生一个强分类器的通用方法。正由于AdaBoost算法的优异性能,Freund和Schapire因此获得了2003年度的哥德尔奖(Gödel Prize,该奖是在理论计算机科学领域中最负盛名的奖项之一)。

AdaBoost算法如下:
AdaBoost算法详解_第1张图片

上图,我给出了adaboost的一个详细的算法过程,可以总结如下:
  1)每次迭代改变的是样本的分布,而不是重复采样;
  2)样本分布的改变取决于样本是否被正确分类总是分类正确的样本权值低,总是分类错误的样本权值高。
  3)最终的结果是弱分类器的加权组合权值表示该弱分类器的性能。
  下面我们给出具体解释(这里引用原文来自于这里 ,Opencv2.4.9源码分析——Boosting,作者zhaocj)。
  假设我们有一个集合{(x1, y1),(x2, y2), …, (xN,yN)},每一个数据项xi是一个表示事物特征的矢量,yi是一个与其相对应的分类yi∈{-1, 1},即xi要么属于-1,要么属于1。AdaBoost算法通过M次迭代得到了一个弱分类器集合{k1, k2,…, kM},对于每一个数据项xi来说,每个弱分类器都会给出一个分类结果来,即km(xi)∈{-1, 1}。这M个弱分类器通过某种线性组合(式1所示)就得到了一个强分类器Cm,这样我们就可以通过Cm来判断一个新的数据项xk是属于-1,还是1。这就是一个训练的过程。

在进行了第m-1次迭代后,我们可以把这m-1个弱分类器进行线性组合,所得到的强分类器为:
这里写图片描述(1)
式中,α为k的权值,并且m > 1。当进行第m次迭代时,AdaBoost就通过增加一个弱分类器的方式扩展成另一个的强分类器:
这里写图片描述(2)
只有使Cm的分类结果强于Cm-1,算法迭代才有意义。那么如何能够使Cm的性能优于Cm-1呢?这就由增加的那个第m个弱分类器km及其它的权值αm来决定。我们用所有数据项xi的指数损失的总和来定义Cm的误差E,从而判断km和αm是否为最优,即:
这里写图片描述(3)
这里写图片描述,wi(m)表示在第m-1次迭代后,对训练数据项xi所分配的权重,而在第1次迭代时,所使用的权重为1,即wi(1) = 1。那么,上式可以重写为:
这里写图片描述(4)
我们可以把上式拆分成两项:
这里写图片描述(5)
式中,yi=km(xi)的意思是对xi来说,第m次迭代得到的弱分类器km的分类结果与其实际的分类y相同,要么都等于-1,要么都等于1,即分类正确,所以它们的乘积一定等于1,即yi km(xi)= 1;而yi≠km(xi)的意思是对xi来说,第m次迭代得到的弱分类器km的分类结果与其实际的分类y不相同,其中一个如果等于-1,那么另一个一定等于1,即分类错误,所以它们的乘积一定等于-1,即yi km(xi)= -1。所以式5中的前一项表示的是对所有y等于km的那些数据项xi的误差求和;而第二项表示的是对所有y不等于km的那些数据项xi的误差求和。我们又可以把式5写出如下形式:
这里写图片描述(6)
从上式我们可以看出,如果αm一定的话,强分类器Cm的误差大小完全取决于第二项中的 这里写图片描述的大小,也就是取决于该次迭代中被分类错误的那些权值这里写图片描述的大小。
为了使误差E最小,我们需要对式5进行求导:
这里写图片描述(7)
令上式等于0,则权值αm为:
这里写图片描述(8)
这里写图片描述表示误差率,其值为:
这里写图片描述(9)
则式8为:
这里写图片描述(10)
经过以上分析,我们导出了AdaBoost算法:在每次迭代中,我们选择使这里写图片描述为最小的分类器km,并得到误差率 (式9),应用该误差率 我们又得到了权值αm(式10),则最终强分类器就由Cm-1提升为Cm= Cm-1 + αmkm。而在每次迭代后,得到的每个训练样本数据的权值wi(m+1)为:
这里写图片描述(11)
需要说明的是,权值仍然可以按照前面介绍的这里写图片描述方法计算,但式11更简单,在应用迭代时效率更高。
我们得到最终的强分类器为:
这里写图片描述(12)

下面我们举一个例子,来描述该算法。
AdaBoost算法详解_第2张图片
在这个过程中,我们使用水平或者垂直的直线作为分类器,来进行分类。
第一步:使用垂直直线见数据分为两部分
AdaBoost算法详解_第3张图片
这里根据公式(9)我们得知这里写图片描述=0.3,α1 = 0.42。(图中被圈起来的数据是错误分类数据。)根据这一步的分类结果,我们需要按照公式(11)更新每个样本的权值(图形线条的粗细代表权值的大小),如下图
AdaBoost算法详解_第4张图片
第二步:
AdaBoost算法详解_第5张图片
这里写图片描述2=0.21,α2 = 0.65。
更新每个样本的权值为
AdaBoost算法详解_第6张图片
第三步:
AdaBoost算法详解_第7张图片
这里写图片描述3=0.14,α3 = 0.92。
整合所有子分类器:
AdaBoost算法详解_第8张图片
AdaBoost算法可分为DiscreteAdaboost,Real AdaBoost,LogitBoost和Gentle AdaBoost。前面我们给出的是Discrete Adaboost算法的原理和计算步骤。虽然这四种算法的基本结构相似的,但彼此之间还是有一些差异。Discrete AdaBoost的每个弱分类的输出结果是1或-1,在组成强分类器的过程中,这种离散形式的弱分类器就略显粗糙。而Real Adaboost的每个弱分类器输出是该样本属于某一类的概率,即弱分类器km是通过一个对数函数将0-1的概率值映射到实数域,sign(km)给出的是一个分类,而|km|给出的就是一个置信度的度量。

以上内容如果讲解的不明确的地方大家可以,参考一下下面参考文献的内容进一步理解这个算法。

参考文献:
[1] http://blog.csdn.net/zhaocj/article/details/50536385
[2] http://blog.csdn.net/baiduforum/article/details/6721749
[3] A Decision-Theoretic Generalization of on-Line Learning and an Application to Boosting
[4] Boosting the margin A new explanation for the effectiveness of voting methods
[5 ICIP TR] Empirical Analysis of Detection Cascades of Boosted Classifiers for Rapid Object Detection
[6] The Boosting Approach to Machine Learning An Overview
[7] Robust Real-time Face Detection

你可能感兴趣的:(机器学习)