AdaBoost算法可以从一个训练集中产生多个分类器,并将它们组合起来,提高分类性能,是一种常用的学习方法。本文尝试对AdaBoost算法的过程进行解释,希望能对大家理解AdaBoost算法有所帮助。
注:1.文中出现的一些数学结论,只提供了简单、便于理解的证明,并非严谨、详细的证明。
2.文中对AdaBoost算法的解释方式,只是个人观念上认为这样解释比较便于理解,当然AdaBoost算法还有其他各种解释方式。
3.文中所述仅是个人理解,难免有些错误和不足的地方,还请大家见谅。
一、算法简介
在做一个重要的决定时,我们通常会听取多个人的意见,并将这些意见进行权衡之后得出最终的判断,提升方法就是基于同样的一种思想。
一般来说,从样本中获得一个弱分类器很简单,但是弱分类器的分类效果一般不好,正确率仅比随机猜测好一些。如表1,可以很简单的得到一个分类器:,用该分类器分类样本结果为:1,1,-1,-1,-1,-1,-1,错误率为1/6。
样本一 | 样本二 | 样本三 | 样本四 | 样本五 | 样本六 | |
---|---|---|---|---|---|---|
特征值X | 1 | 2 | 3 | 4 | 5 | 6 |
分类Y | 1 | 1 | -1 | -1 | 1 | -1 |
提升算法希望将多个弱分类器组合成为一个强分类器,从而提升分类效果。在各种提升算法中,最具代表性的就是AdaBoost算法。
二、AdaBoost算法基本模型
假设为k个弱分类器,现在给每个弱分类器一个系数
,组成一个线性组合:
这里的可以理解为每个弱分类器在最终投票时所占的权重,如果将每个弱分类器的分类结果映射为1和-1,则若f(x)>0,代表各个弱分类器经过加权后,在最终投票过程中,多数投1,少数投-1,所以最终得到的分类器可以用单位阶跃函数表示:
那么,为了得到最终分类器H(x),现在需要确定的参数为:弱分类器个数k、弱分类器h(x)、系数。
三、损失函数
常见的损失函数为0/1损失函数,即若样本预测正确,则损失为0,否则,损失为1。损失函数的作用就是:以训练样本中的整体损失值达到最小为目标,来确定分类器的各项参数。
adaBoost算法的损失函数为指数损失函数:
其中,y为样本的实际分类(1或-1),f(x)为第二节中提到的线性组合(注意,并不是最终分类器H(x))。
使得训练样本整体损失值达到最小的优化目标为:
其中,代表损失函数在分布
上的数学期望,这里先解释一下分布
直观的含义:对于某一样本
,表达式
代表其在整体样本中所占的比例,若该比例越大,则其分类错误时,产生的损失就越大,换句话说,就是该样本应该受到分类器更多的“关注”。
如第二节所说,为了得到最终分类器H(x),需要确定的参数为:弱分类器个数k、弱分类器h(x)、系数,现在有了损失函数,它提供了确定参数所依靠的准则:参数应当使得优化目标
最小。接下来,我们用这个准则来一步一步计算出各个分类器所需条件及其相关系数。
四、确定第一个弱分类器h1(x)及其系数
第一个弱分类器,可以从样本中直接生成,例如第一节给出的表1。
接下来确定其系数,方便起见,令
则,此时优化目标
,对于任一样本