AdaBoost 的思考

一个问题

今天跟超哥讨论了一下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://private.codecogs.com/latex/eqneditor.php(公式编辑及转换为Latex)

AdaBoost算法原理推导

AdaBoost的分类器由多个弱分类器组成.
   C m ( X i ) = C ( m − 1 ) ( X i ) + α m ∗ K m ( X i ) C_{m}(X_{i})=C_{(m-1)}(X_{i})+\alpha_{m}*K_{m}(X_{i}) Cm(Xi)=C(m1)(Xi)+αmKm(Xi)
   α m \alpha_{m} αm 是当前分类器 K m K_{m} Km的权重。
   C m ( X i ) C_{m}(X_{i}) Cm(Xi)是m个弱分类器集成后的分类器。
  假设是二分类问题,选择指数loss function, 错判的代价为 e β e^{\beta} eβ,对判的代价为 e − β e^{-\beta} eβ。其中 β > 0 \beta>0 β>0
  总代价: 训练本次弱分类器,总体模型的代价都计算在内。
   E = ∑ w i e − y i ∗ C m ( X i ) E = \sum w_ie^{-y_{i}*C_{m}(X_{i})} E=wieyiCm(Xi)每条样本的权重都计算在内
   = ∑ w i e − y i ∗ [ C m − 1 ( X i ) + α m ∗ K m ( X i ) ] =\sum w_ie^{-y_{i}*[C_{m-1}(X_{i}) + \alpha_{m} * K_{m}(X_{i})]} =wieyi[Cm1(Xi)+αmKm(Xi)]
  令 W i m = w i e − y i ∗ C m − 1 ( X i ) W_{i}^{m}=w_ie^{ -y_{i}*C_{m-1}(X_{i}) } Wim=wieyiCm1(Xi)
   = ∑ W i m ∗ e − y i ∗ α m ∗ K m ( X i ) =\sum W_{i}^{m} * e^{-y_{i}*\alpha_{m} * K_{m}(X_{i})} =WimeyiαmKm(Xi)
   = ∑ i = 1 N W i m ∗ e − y i ∗ α m ∗ K m ( X i ) =\sum_{i=1}^{N}W_{i}^{m} * e^{-y_{i}*\alpha_{m} * K_{m}(X_{i})} =i=1NWimeyiαmKm(Xi)
   = ∑ y i = K m W i m ∗ e − α m + ∑ y i ≠ K m W i m ∗ e + α m =\sum_{y_{i}=K_{m}} W_{i}^{m}*e^{-\alpha_{m}} + \sum_{y_{i} \neq K_{m}}W_{i}^{m}*e^{+\alpha_{m}} =yi=KmWimeαm+yi̸=KmWime+αm
  令 ∑ y i = K m W i m = W c \sum_{y_{i}=K_{m}} W_{i}^{m} = W_{c} yi=KmWim=Wc
  令 ∑ y i ≠ K m W i m = W e \sum_{y_{i} \neq K_{m}} W_{i}^{m} = W_{e} yi̸=KmWim=We
   = W c ∗ e − α m + W e ∗ e α m =W_{c}*e^{-\alpha_{m}} +W_{e}* e^{\alpha_{m}} =Wceαm+Weeαm
  进一步推导,得出如何用总体的代价,得到当前迭代弱分类器的代价。
   e α m ∗ E = W c + W e ∗ e 2 ∗ α m e^{\alpha_m}*E = W_{c}+W_{e}*e^{2*\alpha_{m}} eαmE=Wc+Wee2αm
   e α m ∗ E = ( W c + W e ) + W e ∗ ( e 2 ∗ α − 1 ) e^{\alpha_m}*E =( W_{c}+W_{e})+W_{e}*(e^{2*\alpha}-1) eαmE=(Wc+We)+We(e2α1)
  上式中,在本轮迭代中 W c + W e = W W_{c}+W_{e}=W Wc+We=W是固定值,只需要减少 W e W_{e} We即可。(这里给出了单个弱学习器的目标代价函数 W e W_{e} We
  ==========================================================
  解释下,为什么在伪代码中单个弱学习器为什么只需要降低 ∑ y i ≠ K m w i \sum_{y_i\neq K_m}w_i yi̸=Kmwi即可。
  已知: W c + W e = W = ∑ W i m = ∑ w i e − y i ∗ C m − 1 W_c+W_e=W=\sum W_i^m=\sum w_i e^{-y_i*C_{m-1}} Wc+We=W=Wim=wieyiCm1是固定值;
  则 W e ↓ ⟶ { e α m E } ↓ W_e \downarrow \longrightarrow \{ e^{\alpha_m}E\} \downarrow We{eαmE}
  其中 W e = ∑ y i ≠ K m W i m = ∑ y i ≠ K m w i e − y i C m − 1 ⩽ 上 限 值 ∑ y i ≠ K m w i e W_e=\sum_{y_i\neq K_m}W_i^m=\sum_{y_i \neq K_m}w_ie^{-y_iC_{m-1}} \leqslant 上限值 \sum_{y_i\neq K_m}w_i e We=yi̸=KmWim=yi̸=KmwieyiCm1yi̸=Kmwie
  单个弱学习器的优化,只需要降低 W e W_e We的上限值 ∑ y i ≠ K m w i e \sum_{y_i\neq K_m}w_i e yi̸=Kmwie即可;
  同时上限值 ∑ y i ≠ K m w i e ∝ ∑ y i ≠ K m w i \sum_{y_i\neq K_m}w_i e\propto \sum_{y_i\neq K_m}w_i yi̸=Kmwieyi̸=Kmwi,优化目标又可化为 m i n ∑ y i ≠ K m w i min \sum_{y_i\neq K_m}w_i minyi̸=Kmwi
  ==========================================================
  如何确定本轮迭代的 α m \alpha_{m} αm值呢?
  对总代价函数的 α m \alpha_{m} αm求导
   d E d α m = − W c ∗ e − α m + W e ∗ e α m \frac{dE}{d\alpha_{m}}=-W_{c}*e^{-\alpha_{m}}+W_{e}*e^{\alpha_{m}} dαmdE=Wceαm+Weeαm
  令上式等于0,则有
   α m = 1 2 ∗ ln ⁡ W c W e ⟶ = 1 2 ∗ ln ⁡ W − W e W e ⟶ = 1 2 ∗ ln ⁡ 1 − W e W W e W \alpha_{m} = \frac{1}{2}* \ln{\frac{W_{c}}{W_{e}}} \longrightarrow =\frac{1}{2}* \ln{ \frac{W-W_{e}}{W_{e}} } \longrightarrow =\frac{1}{2}* \ln{ \frac{ 1-\frac{W_{e}}{W} }{\frac{W_{e}}{W}} } αm=21lnWeWc=21lnWeWWe=21lnWWe1WWe
  其中, W e W \frac{W_{e}}{W} WWe是本轮迭代中 y i ≠ K m y_{i}\neq K_{m} yi̸=Km的样本权重之和在总权重之和的比例。注意这里不是误差率。
  对判对和判错的样本的权重进行调整,以便之后的模型更关注那些判错的样本(对其误判之后代价更大)。
  判错的样本权重增加 W e = W i m + 1 = W i m ∗ e α m W_{e} = W_{i}^{m+1} = W_{i}^{m}*e^{\alpha_m} We=Wim+1=Wimeαm
  判对的样本权重降低 W c = W i m + 1 = W i m ∗ e − α m W_{c} = W_{i}^{m+1} = W_{i}^{m}*e^{-\alpha_m} Wc=Wim+1=Wimeαm
  截止到目前为止,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 α,这样通过总分类器 C m ( X i ) C_{m}(X_{i}) Cm(Xi),构造一个指数代价函数 E = ∑ i = 1 N e − y i ∗ C m ( X i ) E=\sum_{i=1}^{N}{e^{-y_{i}*C_{m}(X_{i})}} E=i=1NeyiCm(Xi)。代价函数 E E E,同时给出了弱学习器的训练约束条件: W e W_{e} We最小即可。对 E E E α \alpha α求导,可以推导出 α \alpha α的计算公式。还要记得更新样本权重 W i W_{i} Wi,使得当前弱分类器下分错的样本权重更大,分对的更小。AdaBoost的全部核心东西就这几句话。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值