AdaBoost 的思考

来源:互联网 发布:国家进出口数据 编辑:程序博客网 时间:2024/05/18 04:18

一个问题

  今天跟超哥讨论了一下AdaBoost,结果发现自己有老多东西不懂啊~
  其中有个问题:样本的权重W如何在弱分类器中使用?现在好好地梳理一下AdaBoost,细节也好好地想一想。
  看博客得知:样本权重W不会在训练弱分类器中使用,只是在求弱分类器的误差时使用。
  上面的回答正确与否呢?答案是让人失望的,有的博客并不尽人意,还是自己去查阅论文吧。
  现在看论文《AdaBoost and the Super Bowl of Classifiers A Tutorial Introduction to Adaptive Boosting》,其中4页介绍到,只需要m轮迭代时,只需要找到分类器Km,该分类器使得We最小即可,We是之前的满足本次Km!=label 的样本权重之和。权重是累计之前的。
  原作者 Yoav.Freund and Robert.Shapire《A decision-theoretic generalization of on-line learning and an application to boosting》里,是如何解释的呢?在其伪代码中,步骤2中,”Call weak learning algorithm, providing it with the distribution p; get back a hypothesis h”,此处的p相当于样本权重W,说明也是在弱学习器的训练时,是基于样本的分布W的.
  所以,样本权重W是在训练新的弱分类器时,构造代价函数使用。
  “We call the algorithm AdaBoost because, unlike previous algorithm, it adjusts adaptively to the errors of the weak hypotheses returned by weak learn algorithm“—解释为什么叫AdaBoost
  下面详细介绍一下AdaBoost的推导过程,此过程了解后,Adaboost的基本也就没问题了。Adaboost (adaptive boosting)利用的是boosting的思想,将多个弱分类器集成为一个强分类器。\
http://www.codecogs.com/latex/eqneditor.php(公式编辑及转换为Latex)

AdaBoost算法原理推导

  AdaBoost的分类器由多个弱分类器组成.
  Cm(Xi)=C(m1)(Xi)+αmKm(Xi)
  αm 是当前分类器Km的权重。
  Cm(Xi)是m个弱分类器集成后的分类器。
  假设是二分类问题,选择指数loss function, 错判的代价为eβ,对判的代价为eβ。其中β>0
  总代价: 训练本次弱分类器,总体模型的代价都计算在内。
  E=eyiCm(Xi)
  =eyi[Cm1(Xi)+αmKm(Xi)]
  令Wmi=eyiCm1(Xi)
  =WmieyiαmKm(Xi)
  =Ni=1WmieyiαmKm(Xi)
  =yi=KmWmieαm+yiKmWmie+αm
  令yi=KmWmi=Wc
  令yiKmWmi=We
  =Wceαm+Weeαm
  进一步推导,得出如何用总体的代价,得到当前迭代弱分类器的代价。
  eαE=Wc+Wee2αm
  eαE=(Wc+We)+We(e2α1)
  上式中,在本轮迭代中Wc+We=W是固定值,只需要减少We即可。(这里给出了单个弱学习器的目标代价函数We
  如何确定本轮迭代的αm值呢?
  对总代价函数的αm求导
  dEdαm=Wceαm+Weeαm
  令上式等于0,则有
  αm=12lnWcWe
  αm=12ln1WeWe
  
  αm=12ln1WeWWeW
  其中,WeW是本轮迭代中yiKm的样本权重之和在总权重之和的比例。注意这里不是误差率。
  对判对和判错的样本的权重进行调整,以便更关注那些判错的样本。
  判错的样本权重增加We=Wm+1i=Wmieα
  判对的样本权重降低Wc=Wm+1i=Wmieα
  截止到目前为止,AdaBoost的推导大体也就完成了,对其数学理论了解也够深入了。

AdaBoost伪代码(二分类问题)

1. 初始化样本权重Wi=1/N  i=1,2,3...N.2. 训练弱学习器Km,使得We最小   We = ∑ Wi ,其中条件为当前Km != y3. 弱学习器的系数a   em = We/W  ,其中W = ∑ Wi   a = 1/2 * ln[(1-em)/em]4. 更新样本权重   Wi = Wi * e^(a), 判错的样本   Wi = Wi * e^(-a), 判对的样本5. 重复步骤2到步骤4,直到达到迭代次数M(或者是em小于某个值)。其中M意味着有M个弱学习器集成最后的强学习器。

  每次迭代更新的是样本分布(re weight),不是重采样。
  那么,我也弄明白了样本权重是怎么回事,是怎么用的。对AdaBoost又有了进一步的了解。

总结:

  多个分类器加到一起,怎么加呢,每个分类器有个分类器权重α,这样通过总分类器Cm(Xi),构造一个指数代价函数E=Ni=1eyiCm(Xi)。代价函数E,同时给出了弱学习器的训练约束条件:We最小即可。对Eα求导,可以推导出α的计算公式。还要记得更新样本权重Wi,使得当前弱分类器下分错的样本权重更大,分对的更小。AdaBoost的全部核心东西就这几句话。

0 0
原创粉丝点击