Adaboost & gradient boosting学习总结

纸上得来终觉浅,觉知此事要躬行。综上,我什莫都不懂.这仅仅是个人的学习防忘笔记

Adaboost

关于 Adaboost 的算法描述其实很简单,有趣的是的它的误差分析:

algorithm

Adaboost & gradient boosting学习总结_第1张图片

其中

ϵ t = P r { i ∼ D t } [ h t ( x i ) ≠ y i ] = ∑ D t ( i ) I ( h t ( x i ) ≠ y i ) α t = 2 − 1 log ⁡ ( 1 − ϵ t ϵ t ) \begin{aligned} \epsilon_t &= Pr_\{i\sim D_t\}[h_t(x_i)\ne y_i]\\ &=\sum D_t(i)I(h_t(x_i)\ne y_i)\\ \alpha_t &= 2^{-1}\log (\frac{1-\epsilon_t}{\epsilon_t}) \end{aligned} ϵtαt=Pr{iDt}[ht(xi)̸=yi]=Dt(i)I(ht(xi)̸=yi)=21log(ϵt1ϵt)

PS : 稍后会证明,为什么, α t \alpha_t αt 取这个值

training error

Adaboost & gradient boosting学习总结_第2张图片

第一个不等式就不说了,分析,equal 和not equal 两种情况就好,我们来看第二个等式。

其实第二个等式非常简单,我们只需要将 D t D_t Dt 的递推式展开就好了:

D 2 ( i ) = m − 1 exp ⁡ ( − α 1 y i h 1 ( x i ) ) Z 1 , Z t   i s   n o r m l i z e   t e r m , a   c o n s t , f o r   i ∈ 1 , . . . , T D 3 ( i ) = D 2 ( i ) exp ⁡ ( − α 2 y i h 2 ( x i ) ) Z 2 = m − 1 exp ⁡ ( − y i ( α 1 h 1 ( x i ) + α 2 h 2 ( x i ) ) ) Z 1 Z 2 D T + 1 = m − 1 exp ⁡ ( − y i ( ∑ α t h t ( x i ) ) ) ∏ t Z t b e c o u s e ∑ i D t ( i ) = 1 , s u m   a t   l e f t   t e r m   a n d   r i g h t   t e r m ∏ t Z t = ∑ i m − 1 exp ⁡ ( − y i ( ∑ α t h t ( x i ) ) ) \begin{aligned} D_2(i)&=\frac{m^{-1}\exp (-\alpha_1y_ih_1(x_i))}{Z_1},Z_t\ is\ normlize\ term,a \ const,for\ i \in {1,...,T}\\ D_3(i)&=\frac{D_2(i)\exp(-\alpha_2y_ih_2(x_i))}{Z_2}\\ &=\frac{m^{-1}\exp(-y_i(\alpha_1h_1(x_i)+\alpha_2h_2(x_i)))}{Z_1Z_2}\\ D_{T+1}&=\frac{m^{-1}\exp(-y_i(\sum \alpha_th_t(x_i)))}{\prod_t Z_t}\\ becouse \sum_i D_t(i)=1,& sum\ at\ left\ term\ and\ right\ term\\ \prod_t Z_t&=\sum_i m^{-1}\exp(-y_i(\sum \alpha_th_t(x_i))) \end{aligned} D2(i)D3(i)DT+1becouseiDt(i)=1,tZt=Z1m1exp(α1yih1(xi)),Zt is normlize term,a const,for i1,...,T=Z2D2(i)exp(α2yih2(xi))=Z1Z2m1exp(yi(α1h1(xi)+α2h2(xi)))=tZtm1exp(yi(αtht(xi)))sum at left term and right term=im1exp(yi(αtht(xi)))

好这里表明这个 training 的error 的上界仅仅与 Z t Z_t Zt 相关,而

Z t = ∑ D t ( i ) exp ⁡ ( − y i α t h t ( x i ) ) Z_t=\sum D_t(i)\exp(-y_i\alpha_th_t(x_i)) Zt=Dt(i)exp(yiαtht(xi))

因此我们相当于需要优化 α t \alpha_t αt,

其实, y i h t ( x i ) = − 1 , 1 y_ih_t(x_i)={-1,1} yiht(xi)=1,1,因此我们可以对这个式子求个期望,由于 ϵ t = P r { i ∼ D t } [ h t ( x i ) ≠ y i ] \epsilon_t = Pr_\{i\sim D_t\}[h_t(x_i)\ne y_i] ϵt=Pr{iDt}[ht(xi)̸=yi],所以

Z t = ∑ D t ( i ) ( ϵ t exp ⁡ ( α t ) + ( 1 − ϵ t ) ( exp ⁡ ( − α t ) ) ) = ϵ t exp ⁡ ( α t ) + ( 1 − ϵ t ) ( exp ⁡ ( − α t ) ) \begin{aligned} Z_t&=\sum D_t(i)(\epsilon_t\exp(\alpha_t)+(1-\epsilon_t)(\exp(-\alpha_t)))\\ &=\epsilon_t\exp(\alpha_t)+(1-\epsilon_t)(\exp(-\alpha_t)) \end{aligned} Zt=Dt(i)(ϵtexp(αt)+(1ϵt)(exp(αt)))=ϵtexp(αt)+(1ϵt)(exp(αt))

Z t Z_t Zt α t \alpha_t αt 求导,并设为0,可得, α t = 2 − 1 log ⁡ ( 1 − ϵ t ϵ t ) \alpha_t=2^{-1}\log(\frac{1-\epsilon_t}{\epsilon_t}) αt=21log(ϵt1ϵt)

因此我们可以得到一个更有趣的bound

Adaboost & gradient boosting学习总结_第3张图片

其中 γ t = 1 2 − ϵ t \gamma_t=\frac{1}{2}-\epsilon_t γt=21ϵt , 假设这个base learner,比random 要好一些,那么 γ t ∈ [ 0 , . 5 ] \gamma_t \in[0,.5] γt[0,.5],也就是说 ∃ γ > 0 , γ t > γ   f o r   t ∈ 1 , . . . , T \exists \gamma>0,\gamma_t>\gamma\ for\ t \in{1,...,T} γ>0,γt>γ for t1,...,T

所以说 ∏ Z t ≤ exp ⁡ ( − 2 T γ 2 ) \prod Z_t\le \exp(-2T\gamma^2) Ztexp(2Tγ2)

也就是说,adaboost 的过程其实是在找一个 f = ∑ α t h t f=\sum \alpha_t h_t f=αtht 即若学习器的线性组合,其中找 α t \alpha_t αt 的过程其实是 coordinate-descent,并且training error 一定会收敛

generalize error

接下来谈论over-fitting 的问题,这问题有趣的地方是作者证明了一个届,表明 adaboost 不会出现over fitting,至于怎么证明的我就没管了

Adaboost & gradient boosting学习总结_第4张图片

Gradient Boosting

我原本是想找一下,如何将 adaboost 方法运用到回归问题,结果就找到了这个 Gradient boosting,这其实是一种 framework

可是我个人对它没有太多的intuition 和算法推导,所以这里就不写了,详细类容可见文末paper,以及我参考过的zhihu link

reference

  1. The Boosting Approach to Machine Learning:An Overview
  2. Greedy Function Aprroximation: A Gradient Boosting Machine
  3. 从 AdaBoost 到 Gradient Boosting

版权声明

本作品为作者原创文章,采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

作者: taotao

转载请保留此版权声明,并注明出处

你可能感兴趣的:(机器学习)