統計學習方法——第8章 提升方法(AdaBoost+)

提升方法:

       對於一個複雜的問題,將多個專家的判斷進行適當的綜合所得出的結果,要不其中任何一個專家單獨判斷要好。

基本概念:

      強可學習和弱可學習:

     在概率近似正確(Probably Approximately Correct,PAC)學習的框架中,一個概念(一個類別)如果存在一個多項式算法能夠學習它,並且正確率很高,那麼就稱這個概念是強可學習的;一個概念(一個類別)如果存在一個多項式算法能夠學習它,學習的正確率僅僅比隨機猜測略好,那麼就稱這個概念是弱可學習的,理論證明(Schapire)證明強可學習和弱可學習是等價的。即在PAC學習框架中,一個概念是強可學習的充要條件是這個概念是弱可學習的。

      提升方法就是從弱學習方法出發,反覆學習,得到一系列弱分類器(基本分類器),然後組合弱分類器構成一個強分類器。對提升方法而言,有兩個問題需要解決:1、在每一輪如何改變訓練數據的權值或概率分佈;2、如何將弱分類器組合成強分類器。

AdaBoost的做法:

       1、提升前一輪弱分類器錯誤分類樣本的權重,降低正確分類樣本的權重,從而使後一輪弱分類器更加關注誤分類樣本;

       2、加權多數表決方法,加大分類誤差率小的弱分類器的權重,使其在表決中去決定作用;

       算法描述:

       輸入訓練數據集:T=\{(x_1,y_1), (x_2,y_2), ...,(x_N,y_N)\},輸出最終分類器函數G(x)

       (1)初始化數據權重:D_1 = \{w_{11}, .., w_{1i},...,w_{1N} \} \ \ \ w_{1i}=\dfrac{1}{N}

       (2)對於m=1,2,...,M

                 2.1:使用具有權值分佈D_m的訓練數據集學習,得到基本分類器:G_m(x)\rightarrow \math{X} \in \{-1, +1\}

                 2.2:計算分類誤差:e_m=P(G_m(x_i)\neq y_i) = \sum_i^N\alpha_{mi}I(G_m(x_i)\neq y_i)

                 2.3:計算G_m(x)的係數:\alpha_m=\dfrac{1}{2}\log(\dfrac{1-e_m}{e_m})【分類誤差越大,\alpha_mG_m分類器的權重越大】

                 2.4:更新數據集權重:D_{m+1}=(w_{m+1,1}, w_{m+1,2},...,w_{m+1,N}),其中,w_{m+1,i} = \dfrac{w_{mi}\exp(-\alpha_my_iG_m(x_i))}{\sum_i^Nw_{mi}\exp(-\alpha_my_iG_m(x_i))}

       (3)組合弱分類器:f(x) = \sum_{m}^M\alpha_mG_m(x),最終的分類器函數:G(x) = sign(f(x)) = sign(\sum_m^M\alpha_mG_m(x))

AdaBoost誤差分析:

      AdaBoost誤差上界:\dfrac{1}{N}\sum_i^NI(G_m(x_i)\neq y_i)) \leq \dfrac{1}{N}\sum_i^N\exp(-y_if(x_i))=\prod_{m}^{M}Z_m \ \ \ Z_m = \sum_i^Nw_{mi}\exp(-\alpha_my_iG_m(x_i))

      AdaBoost二分類誤差上界:\prod_{m}^{M}Z_m=\prod_{m}^{M}[2\sqrt{e_m(1-e_m)}]=\prod_{m}^{M}[\sqrt1-4\gamma_m^2]\leq\exp{-2\sum_m^M\gamma_m^2}

    

      推論:如果存在\gamma > 0,對所有m\gamma_m = \dfrac{1}{2}-e_m \geq \gamma,則:\dfrac{1}{N}\sum_i^NI(G(c_i)\neq y_i) \leq \exp(-2M\gamma^2)

前向分佈算法:

      考慮加法模型:f(x) = \sum_m^M\beta_mb(x, \gamma_m),其中b(x,\gamma_m)爲基函數,\gamma_m爲基函數參數,\beta_m爲基函數係數,顯然AdaBoost分類器:f(x) = \sum_{m}^M\alpha_mG_m(x)是一個加法模型,在給定訓練數據和損失函數L(y,f(x))的條件下,學習加法模型f(x)成爲經驗風險極小化即損失函數極小化問題:f(x) =\min_{\beta_m, \gamma_m} \sum_i^NL(y_i,\sum_m^M\beta_mb(x_i, \gamma_m))

       通常上式是一個複雜的優化問題。前向分佈算法的優化策略是:因爲學習是一個加法模型,如果能夠從先往後每一步只學習一個基函數及其係數,逐步逼近優化目標函數,那麼就可以簡化優化過程。

具體地,每一步只優化f_m(x) =\min_{\beta_m, \gamma_m} \sum_i^NL(y_i,\beta_mb(x_i, \gamma_m))

下一次更新:f_{m+1}(x) =f_m(x)+\beta_mb(x,\gamma_m)

最終的加法模型:f(x) = f_M(x) = \sum_m^M\beta_mb(x,\gamma_m)

GBDT的做法:

     梯度提升樹(Gradient Boost Decision Tree, GBDT),提升方法依然採用的是加法模型與前向分佈算法。以決策樹爲基函數的提升方法稱爲提升樹。GBDT與Adboost最主要的區別在於兩者如何識別模型的問題。Adaboost用錯分數據點來識別問題,通過調整錯分數據點的權重來改進模型。GBDT通過負梯度來識別問題,通過計算負梯度來改進模型。

     給定當前模型f_{m-1}(x),優化參數:\theta_m = \min_{\theta_m}\sum_i^NL(y_i, f_{m+1}(x_i)+T(x_i, \theta_m)),設損失函數L(y,f(x))爲平方和誤差,則:

L(y,f(x)) = \sum_i^N(y_i-f(x_i))^2=\sum_i^N(yi-f_{m-1}(x_i)-T(x_i,\theta_m))^2,記r=y-f_{m-1}(x),因此,對於迴歸問題,只需要簡單擬合殘差即可。

Xgboost的做法:

     Xgboost 的全稱是eXtreme Gradient Boosting,由華盛頓大學的陳天奇博士提出,在Kaggle的希格斯子信號識別競賽中使用,因其出衆的效率與較高的預測準確度而引起了廣泛的關注。GBDT算法只利用了一階的導數信息,Xgboost對損失函數做了二階的泰勒展開,即f(x+\bigtriangleup x)\simeq f(x)+f^{'}(x)\bigtriangleup x+ \frac{1}{2}f^{''}(x)\bigtriangleup x^{2},並在目標函數之外加入了正則項對整體求最優解,用以權衡目標函數的下降和模型的複雜程度,避免過擬合。

    Xgboost目標損失函數: Obj^{(t)}=\sum_{i=1}^{n}l(y_{i},\hat{y}_{i}^{(t)})+\sum_{i=1}^{t}\Omega(f_{i})=\sum_{i=1}^{n}l(y_{i},\hat{y}_{i}^{(t-1)}+f_{t}(x_{i}))+\Omega(f_{t})+C

 

其中,t表示第t輪,f(t)表示第t輪所生成的樹模型,\Omega(f(x_i))表示正則項,C = constant=\sum_{i=1}^{t-1}\Omega(f_{i})

參考博客:Boosting學習筆記(Adboost、GBDT、Xgboost)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章