集成学习之AdaBoost

参考资料:https://www.cnblogs.com/pinard/p/6133937.html
该资料比较详细,但是在推导部分有些难以理解。比如如何求得新的弱学习器的权重,让我有些费解,该部分在我参考了西瓜书后,在本博客我又做了补充说明。如有错误和有更好的解释方法,就恳请大家指正、提出。

代码实现参考

集成学习

集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务。
需要解决的问题有:

  1. 如何构建这若干个学习器
  2. 如何选择多个学习器的结合策略

boosting

boosting算法的基本思想是多个弱学习器的迭代学习,当前弱学习器的训练依赖于一个弱学习器的训练结果。在前一轮弱学习器的学习中,被错分的样本将会提高权重,从而在本轮弱学习器的训练中被重视。

AdaBoost

AdaBoost是boosting最著名的算法之一。

算法过程

现假设目标为解决二分类问题。

假设训练集样本是:
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . ( x m , y m ) } , y ∈ { − 1 , 1 } \mathbf T = \{(x_1,y_1), (x_2, y_2), ...(x_m, y_m)\}, \mathbf y \in\{-1, 1\} T={(x1,y1),(x2,y2),...(xm,ym)},y{1,1}

训练集在第 k k k 个弱学习器的输出权重为:
w k = ( w k 1 , w k 2 , . . . w k m ) , w l i = 1 m , i = 1 , 2 … m \mathbf w_{k} = (w_{k1},w_{k2},...w_{km}), w_{li} = \frac{1}{m}, i = 1,2 \dots m wk=(wk1,wk2,...wkm),wli=m1,i=1,2m

AdaBoost算法有以下任务:

  1. k k k 个弱分类器 G k ( x ) G_k(x) Gk(x) 在训练集上的加权误差率 e k e_k ek 为:
    e k = ∑ i = 1 m w k i I ( G k ( x i ) ≠ y i ) = ∑ i = 1 m w k i e k i (1) e_k = \sum_{i=1}^{m} w_{ki} \mathbb I(G_k(x_i) \neq y_i) = \sum_{i=1}^{m} w_{ki} e_{ki} \tag{1} ek=i=1mwkiI(Gk(xi)=yi)=i=1mwkieki(1)

相对误差 e k e_k ek
e k i = ∣ y i − G k ( x i ) ∣ E k (2) e_{ki} =\frac{|y_i - G_k(x_i)|}{E_k} \tag{2} eki=EkyiGk(xi)(2)
对于第 k k k 个弱学习器,计算他在训练集上的最大误差 E k E_k Ek
E k = max ⁡ ∣ y i − G k ( x i ) ∣ (3) E_k=\max |y_i−G_k(x_i)| \tag{3} Ek=maxyiGk(xi)(3)

另外有指数误差:
e k i = 1 − exp ⁡ ( − ∣ y i − G k ( x i ) ∣ E k ) e_{ki} = 1-\exp(\frac{-|y_i - G_k(x_i)|}{E_k}) eki=1exp(EkyiGk(xi))

  1. k k k 个弱分类器 G k ( x ) G_k(x) Gk(x) 的权重系数 a k a_k ak 为:
    a k = 1 2 log ⁡ 1 − e k e k (4) a_k = \frac{1}{2}\log {\frac{1-e_k}{e_k}} \tag{4} ak=21logek1ek(4)

  2. k + 1 k+1 k+1 个弱分类器的样本集权重系数为:
    w k + 1 , i = w k i Z k exp ⁡ ( − a k y i G k ( x i ) ) , Z k = ∑ i = 1 m w k i exp ⁡ ( − a k y i G k ( x i ) ) (5) w_{k+1, i} = \frac{w_{ki}}{Z_k} \exp (-a_k y_i G_k(x_i)), Z_k = \sum_{i=1}^{m} w_{ki} \exp (-a_k y_i G_k(x_i)) \tag{5} wk+1,i=Zkwkiexp(akyiGk(xi)),Zk=i=1mwkiexp(akyiGk(xi))(5)

  3. 最终强学习器为:
    f ( x ) = s i g n ( ∑ k = 1 K a k G k ( x ) ) (6) f(x) = \mathrm{sign} (\sum_{k=1}^{K}a_kG_k(x)) \tag{6} f(x)=sign(k=1KakGk(x))(6)

下面就是最难懂的部分:
过程推导1
定义AdaBoost的损失函数为指数函数:
( a k , G k ) = arg min ⁡ a k , G k ∑ i = 1 m exp ⁡ ( − y i f k ( x i ) ) (a_k,G_k) = \argmin_{a_k,G_k} \sum_{i=1}^{m} \exp( -y_i f_k(x_i)) (ak,Gk)=ak,Gkargmini=1mexp(yifk(xi))

因为已经训练好了前 k − 1 k-1 k1 个弱学习器,所以上式可化为:
( a k , G k ) = arg min ⁡ a k , G k ∑ i = 1 m exp ⁡ ( − y i ( f k − 1 ( x i ) + a k G k ( x i ) ) ) (7) (a_k,G_k) = \argmin_{a_k,G_k} \sum_{i=1}^{m} \exp( -y_i (f_{k-1}(x_i) + a_k G_k(x_i))) \tag{7} (ak,Gk)=ak,Gkargmini=1mexp(yi(fk1(xi)+akGk(xi)))(7)

那么现在令 w k i ′ = exp ⁡ ( − y i f k − 1 ( x i ) ) w_{ki}' = \exp(-y_i f_{k-1}(x_i)) wki=exp(yifk1(xi)), w k i ′ w_{ki}' wki 是未作规范化处理的样本权重。
( a k , G k ) = arg min ⁡ a k , G k ∑ i = 1 m w k i ′ exp ⁡ ( − y i a k G k ( x i ) ) (8*) (a_k,G_k)= \argmin_{a_k,G_k} \sum_{i=1}^{m} {w_{ki}'} \exp(-y_i a_k G_k(x_i)) \tag{8*} (ak,Gk)=ak,Gkargmini=1mwkiexp(yiakGk(xi))(8*)

∑ i = 1 m w k i ′ exp ⁡ ( − y i a k G k ( x i ) ) = ∑ G k ( x i ) = y i w k i ′ e − a k + ∑ G k ( x i ) ≠ y i w k i e a k = e − a k ∑ i = 1 m w k i ′ I ( y i = G k ( x i ) ) + e a k ∑ i = 1 m w k i ′ I ( y i ≠ G k ( x i ) ) = e − a k ∑ i = 1 m w k i ′ + ( e a k − e − a k ) ∑ i = 1 m w k i ′ I ( y i ≠ G k ( x i ) ) (9*) \begin{aligned} \sum_{i=1}^{m} {w_{ki}'} \exp(-y_i a_k G_k(x_i))&= \sum_{G_k(x_i) = y_i} {w_{ki}'} e^{-a_k} + \sum_{G_k(x_i) \neq y_i} {w_{ki}}e^{a_k} \\ & = e^{-a_k} \sum_{i=1}^m w_{ki}' \mathbb I(y_i = G_k(x_i)) + e^{a_k} \sum_{i=1}^m w_{ki}' \mathbb I(y_i \neq G_k(x_i)) \\ &= e^{-a_k} \sum_{i=1}^m w_{ki}' + (e^{a_k}- e^{-a_k}) \sum_{i=1}^m w_{ki}' \mathbb I(y_i \neq G_k(x_i))\\ \tag{9*} \end{aligned} i=1mwkiexp(yiakGk(xi))=Gk(xi)=yiwkieak+Gk(xi)=yiwkieak=eaki=1mwkiI(yi=Gk(xi))+eaki=1mwkiI(yi=Gk(xi))=eaki=1mwki+(eakeak)i=1mwkiI(yi=Gk(xi))(9*)

根据 (8)式,假设 a k a_k ak 已知,那么对于找 G k G_k Gk 其实就是找在现有的样本的新权重下的最优弱学习器:
G k ( x ) = arg min ⁡ G k ∑ i = 1 m w k i ′ I ( G k ( x i ) ≠ y i ) (10*) G_k(x) = \argmin_{G_k} \sum_{i=1}^{m} w_{ki}' \mathbb I(G_k(x_i) \neq y_i) \tag{10*} Gk(x)=Gkargmini=1mwkiI(Gk(xi)=yi)(10*)

对 (9*)式 求 a k a_k ak 的偏导:
∂ ( e − a k ∑ i = 1 m w k i ′ + ( e a k − e − a k ) ∑ i = 1 m w k i ′ I ( y i ≠ G k ( x i ) ) ∂ a k = − e − a k ∑ i = 1 m w k i ′ + ( e a k + e − a k ) ∑ i = 1 m w k i ′ I ( y i ≠ G k ( x i ) ) (11*) \frac {\partial (e^{-a_k} \sum_{i=1}^m w_{ki}' + (e^{a_k}- e^{-a_k}) \sum_{i=1}^m w_{ki}' \mathbb I(y_i \neq G_k(x_i))}{\partial {a_k}} = \\ -e^{-a_k} \sum_{i=1}^m w_{ki}' + (e^{a_k} + e^{-a_k}) \sum_{i=1}^m w_{ki}' \mathbb I(y_i \neq G_k(x_i)) \tag{11*} ak(eaki=1mwki+(eakeak)i=1mwkiI(yi=Gk(xi))=eaki=1mwki+(eak+eak)i=1mwkiI(yi=Gk(xi))(11*)

此时 视 w k i ′ w_{ki}' wki为规范化后的权重,又有 e k e_k ek 加权误差率(见 (1)式),令 (11*)式 偏导等于0,两边同时取指数,可得(4)式 a k a_k ak
− e − a k ∑ i = 1 m w k i ′ + ( e a k + e − a k ) ∑ i = 1 m w k i ′ I ( y i ≠ G k ( x i ) ) = 0 ( e a k + e − a k ) e k = e − a k e a k e k = e − a k ( 1 − e k ) a k + ln ⁡ e k = − a k + ln ⁡ ( e k − 1 ) -e^{-a_k} \sum_{i=1}^m w_{ki}' + (e^{a_k} + e^{-a_k}) \sum_{i=1}^m w_{ki}' \mathbb I(y_i \neq G_k(x_i)) = 0\\ (e^{a_k} + e^{-a_k})e_k = e^{-a_k} \\ e^{a_k} e_k = e^{-a_k}(1 - e_k) \\ a_k + \ln e_k = -a_k + \ln(e_k-1) eaki=1mwki+(eak+eak)i=1mwkiI(yi=Gk(xi))=0(eak+eak)ek=eakeakek=eak(1ek)ak+lnek=ak+ln(ek1)

因为:
f k ( x i ) = − y i ( f k − 1 ( x i ) + a k G k ( x i ) ) f_k(x_i) = -y_i (f_{k-1}(x_i) + a_k G_k(x_i)) fk(xi)=yi(fk1(xi)+akGk(xi))
w k i = exp ⁡ ( − y i f k − 1 ( x i ) ) w_{ki} = \exp(-y_i f_{k-1}(x_i)) wki=exp(yifk1(xi))
所以,对于下一轮 k + 1 k+1 k+1 轮的样本权重 w k + 1 \mathbf w_{k+1} wk+1
w k + 1 , i ′ = exp ⁡ ( − y i ( f k − 1 ( x i ) + a k G k ( x i ) ) ) = w k i ′ exp ⁡ ( − y i α k G k ( x i ) ) (12*) \begin{aligned} w_{k+1,i}' &= \exp(-y_i (f_{k-1}(x_i) + a_kG_k(x_i)))\\ &=w_{ki}'\exp(−y_i α_k G_k(x_i)) \tag{12*} \end{aligned} wk+1,i=exp(yi(fk1(xi)+akGk(xi)))=wkiexp(yiαkGk(xi))(12*)

最后,对 w k + 1 , i ′ w_{k+1,i}' wk+1,i 做规范化处理:
w k + 1 , i = w k i Z k exp ⁡ ( − y i α k G k ( x i ) ) w_{k+1, i} = \frac{w_{ki}} {Z_k}{\exp(−y_i α_k G_k(x_i))} wk+1,i=Zkwkiexp(yiαkGk(xi))


以下是钻错的洞。不用太在意规范化因子的影响。
过程推导2
AdaBoost根据之前所有学习器的训练结果,生成第 k k k 个弱学习器来补充前 k − 1 k-1 k1 个弱学习器。用前 k − 1 k-1 k1 个弱学习器训练出的各个样本的损失作为样本权重并做规范化处理,作为第 k k k 个学习器的样本权重。
(理解为该样本损失越大,新的样本权重越大,并且需要保证所有样本的新权重之和为1)

那么现在令样本权重 w k i = exp ⁡ ( − y i f k − 1 ( x i ) ) / Z k − 1 w_{ki} = \exp(-y_i f_{k-1}(x_i))/{Z_{k-1}} wki=exp(yifk1(xi))/Zk1。容易知道 w k i w_{ki} wki 不依赖于 a k , G k a_k, G_k ak,Gk,只依赖于 f k − 1 ( x ) f_{k-1}(x) fk1(x)。所以损失函数可化为:
( a k , G k ) = arg min ⁡ a k , G k ∑ i = 1 m w k i Z k − 1 exp ⁡ ( − y i a k G k ( x i ) ) (a_k,G_k)= \argmin_{a_k,G_k} \sum_{i=1}^{m} {w_{ki}}{Z_{k-1}} \exp( -y_i a_k G_k(x_i)) (ak,Gk)=ak,Gkargmini=1mwkiZk1exp(yiakGk(xi))

Z k − 1 Z_{k-1} Zk1 固定。所以损失函数可再化为:
( a k , G k ) = arg min ⁡ a k , G k ∑ i = 1 m w k i exp ⁡ ( − y i a k G k ( x i ) ) (8) (a_k,G_k)= \argmin_{a_k,G_k} \sum_{i=1}^{m} {w_{ki}} \exp(-y_i a_k G_k(x_i)) \tag{8} (ak,Gk)=ak,Gkargmini=1mwkiexp(yiakGk(xi))(8)

∑ i = 1 m w k i exp ⁡ ( − y i a k G k ( x i ) ) = ∑ G k ( x i ) = y i w k i e − a k + ∑ G k ( x i ) ≠ y i w k i e a k = e − a k ( 1 − e k ) + e a k e k (9) \begin{aligned} \sum_{i=1}^{m} {w_{ki}} \exp(-y_i a_k G_k(x_i))&= \sum_{G_k(x_i) = y_i} {w_{ki}} e^{-a_k} + \sum_{G_k(x_i) \neq y_i} {w_{ki}}e^{a_k}\\ & =e^{-a_k}(1-e_k) + e^{a_k} e_k \tag{9} \end{aligned} i=1mwkiexp(yiakGk(xi))=Gk(xi)=yiwkieak+Gk(xi)=yiwkieak=eak(1ek)+eakek(9)

e k e_k ek 已经是加权误差率(见 (1)式),所以可以直接得到 (9)式 最后的结果。

根据 (8)式,假设 a k a_k ak 已知,那么对于找 G k G_k Gk 其实就是找在现有的样本的新权重下的最优弱学习器:
G k ( x ) = arg min ⁡ G k ∑ i = 1 m w k i I ( G k ( x i ) ≠ y i ) (10) G_k(x) = \argmin_{G_k} \sum_{i=1}^{m} w_{ki} \mathbb I(G_k(x_i) \neq y_i) \tag{10} Gk(x)=Gkargmini=1mwkiI(Gk(xi)=yi)(10)

对 (9)式 求 a k a_k ak 的偏导:
∂ ( e − a ( 1 − e k ) + e a e k ) ∂ a k = − e − a k ( 1 − e k ) + e a k e k (11) \frac {\partial (e^{-a}(1-e_k) + e^a e_k)}{\partial {a_k}} = -e^{-a_k}(1-e_k)+e^{a_k} e_k \tag{11} ak(ea(1ek)+eaek)=eak(1ek)+eakek(11)
令 (11)式 偏导等于0,两边同时取指数,可得(4)式 a k a_k ak

因为:
f k ( x i ) = − y i ( f k − 1 ( x i ) + a k G k ( x i ) ) f_k(x_i) = -y_i (f_{k-1}(x_i) + a_k G_k(x_i)) fk(xi)=yi(fk1(xi)+akGk(xi))
w k i = exp ⁡ ( − y i f k − 1 ( x i ) ) / Z k − 1 w_{ki} = \exp(-y_i f_{k-1}(x_i)) / {Z_{k-1}} wki=exp(yifk1(xi))/Zk1
所以,对于下一轮 k + 1 k+1 k+1 轮的样本权重 w k + 1 \mathbf w_{k+1} wk+1
w k + 1 , i = exp ⁡ ( − y i ( f k − 1 ( x i ) + a k G k ( x i ) ) ) Z k = w k i Z k − 1 Z k exp ⁡ ( − y i α k G k ( x i ) ) (12) \begin{aligned} w_{k+1,i} &= \frac{\exp(-y_i (f_{k-1}(x_i) + a_kG_k(x_i)))} {Z_k}\\ &=\frac {w_{ki} Z_{k-1}}{Z_k} \exp(−y_i α_k G_k(x_i)) \tag{12} \end{aligned} wk+1,i=Zkexp(yi(fk1(xi)+akGk(xi)))=ZkwkiZk1exp(yiαkGk(xi))(12)

得 (5)式?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值