您的位置:首页 > 其它

AdaBoost 的思考

2015-07-31 17:40 197 查看

一个问题

  今天跟超哥讨论了一下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(m−1)(Xi)+αm∗Km(Xi)C_{m}(X_{i})=C_{(m-1)}(X_{i})+\alpha_{m}*K_{m}(X_{i})

  αm\alpha_{m} 是当前分类器KmK_{m}的权重。

  Cm(Xi)C_{m}(X_{i})是m个弱分类器集成后的分类器。

  假设是二分类问题,选择指数loss function, 错判的代价为eβe^{\beta},对判的代价为e−βe^{-\beta}。其中β>0\beta>0。

  总代价: 训练本次弱分类器,总体模型的代价都计算在内。

  E=∑e−yi∗Cm(Xi)E = \sum e^{-y_{i}*C_{m}(X_{i})}

  =∑e−yi∗[Cm−1(Xi)+αm∗Km(Xi)]=\sum e^{-y_{i}*[C_{m-1}(X_{i}) + \alpha_{m} * K_{m}(X_{i})]}

  令Wmi=e−yi∗Cm−1(Xi)W_{i}^{m}=e^{ -y_{i}*C_{m-1}(X_{i}) }

  =∑Wmi∗e−yi∗αm∗Km(Xi)=\sum W_{i}^{m} * e^{-y_{i}*\alpha_{m} * K_{m}(X_{i})}

  =∑Ni=1Wmi∗e−yi∗αm∗Km(Xi)=\sum_{i=1}^{N}W_{i}^{m} * e^{-y_{i}*\alpha_{m} * K_{m}(X_{i})}

  =∑yi=KmWmi∗e−αm+∑yi≠KmWmi∗e+αm=\sum_{y_{i}=K_{m}} W_{i}^{m}*e^{-\alpha_{m}} + \sum_{y_{i} \not= K_{m}}W_{i}^{m}*e^{+\alpha_{m}}

  令∑yi=KmWmi=Wc\sum_{y_{i}=K_{m}} W_{i}^{m} = W_{c}

  令∑yi≠KmWmi=We\sum_{y_{i}\not=K_{m}} W_{i}^{m} = W_{e}

  =Wc∗e−αm+We∗eαm=W_{c}*e^{-\alpha_{m}} +W_{e}* e^{\alpha_{m}}

  进一步推导,得出如何用总体的代价,得到当前迭代弱分类器的代价。

  eα∗E=Wc+We∗e2∗αme^{\alpha}*E = W_{c}+W_{e}*e^{2*\alpha_{m}}

  eα∗E=(Wc+We)+We∗(e2∗α−1)e^{\alpha}*E =( W_{c}+W_{e})+W_{e}*(e^{2*\alpha}-1)

  上式中,在本轮迭代中Wc+We=WW_{c}+W_{e}=W是固定值,只需要减少WeW_{e}即可。(这里给出了单个弱学习器的目标代价函数WeW_{e}

  如何确定本轮迭代的αm\alpha_{m}值呢?

  对总代价函数的αm\alpha_{m}求导

  dEdαm=−Wc∗e−αm+We∗eαm\frac{dE}{d\alpha_{m}}=-W_{c}*e^{-\alpha_{m}}+W_{e}*e^{\alpha_{m}}

  令上式等于0,则有

  αm=12∗lnWcWe\alpha_{m} = \frac{1}{2}*\ln{\frac{W_{c}}{W_{e}}}

  αm=12∗ln1−WeWe\alpha_{m} =\frac{1}{2}*\ln{ \frac{1-W_{e}}{W_{e}} }

  

  αm=12∗ln1−WeWWeW\alpha_{m} =\frac{1}{2}*\ln{ \frac{ 1-\frac{W_{e}}{W} }{\frac{W_{e}}{W}} }

  其中,WeW\frac{W_{e}}{W}是本轮迭代中yi≠Kmy_{i}\not=K_{m}的样本权重之和在总权重之和的比例。注意这里不是误差率。

  对判对和判错的样本的权重进行调整,以便更关注那些判错的样本。

  判错的样本权重增加We=Wm+1i=Wmi∗eαW_{e} = W_{i}^{m+1} = W_{i}^{m}*e^{\alpha}

  判对的样本权重降低Wc=Wm+1i=Wmi∗e−αW_{c} = W_{i}^{m+1} = W_{i}^{m}*e^{-\alpha}

  截止到目前为止,AdaBoost的推导大体也就完成了,对其数学理论了解也够深入了。

AdaBoost伪代码(二分类问题)

1. 初始化样本权重Wi=1/N  i=1,2,3...N.
2. 训练弱学习器Km,使得We最小
   We = ∑ Wi ,其中条件为当前Km != y
3. 弱学习器的系数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又有了进一步的了解。

总结:

  多个分类器加到一起,怎么加呢,每个分类器有个分类器权重α\alpha,这样通过总分类器Cm(Xi)C_{m}(X_{i}),构造一个指数代价函数E=∑Ni=1e−yi∗Cm(Xi)E=\sum_{i=1}^{N}{e^{-y_{i}*C_{m}(X_{i})}}。代价函数EE,同时给出了弱学习器的训练约束条件:WeW_{e}最小即可。对EE的α\alpha求导,可以推导出α\alpha的计算公式。还要记得更新样本权重WiW_{i},使得当前弱分类器下分错的样本权重更大,分对的更小。AdaBoost的全部核心东西就这几句话。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: