1. 程式人生 > >提升方法總結

提升方法總結

1. Boosting

提升方法通過改變訓練樣本權重,學習多個分類器,並將分類器線性組合提高分類效能。Boosting需要做到兩件事,一是在每一輪如何改變訓練資料的權值或概率分佈;二是如何將弱分類器組合成一個強分類器。

2. AdaBoost

為了解決Boosting的兩個要求,adaboost在每一輪提高被錯分的樣本的權值,降低正確分類樣本的權值。在組合分類器的時候,給誤分率小的分類器較大權值,誤分率大的分類器較小權值。一句話概括adaboost就是用樣本權值計算分類器的權值,再用分類器的權值去更新樣本的權值。

AdaBoost的過程如下:

 輸入:訓練資料集T ={(x1, y1), (x2, y2), ..., (xN, yN)},其中xi∈X⊆Rn,yi∈Y={-1, +1};

 輸出:最終分類器G(x)

1. 初始化訓練資料的權值分佈

w=(w_1,w_2,w_3...w_n) \qquad w_i=\frac{1}{N}

2. 在每一輪訓練中,設當前訓練到第m輪

(a) 使用帶權訓練資料學習,得到該輪的基本分類器       G_m(x):X->(-1,1)

(b) 計算當前分類器的誤分類率

e_m=\sum_{i=1}^{n}w_iI(G_m(x)\neq y)

(c) 計算當前分類器G_m的權值

\alpha _m=\frac{1}{2}log\frac{1-e_m}{e_m}

(d) 更新樣本的權值

w_{m+1,i}=\frac{w_{mi}}{Z_m} e^{-\alpha _my_iG_m(x_i)}

觀察上式,Z_m是w_{mi} e^{-\alpha _my_iG_m(x_i)}的歸一化因子,e是自然對數,e的指數其實就是\alpha _m的正負項,可以驗證當分類正確的時候指數是負的,當分類錯誤的時候指數是正的,這樣就有對誤分的樣本增大權值,對分類正確的樣本減小權值的效果。

3. 最終分類器是每輪分類器的加權線性組合

adaboost的本質

adaboost是模型為加法模型,損失函式為指數函式,學習演算法為前向分步演算法時的二類分類學習方法。

解釋:http://breezedeus.github.io/2015/07/12/breezedeus-adaboost-exponential-loss.html

3. GBDT

梯度提升樹(Gradient Boosting Decison Tree),和adaboost一樣也是迭代模型,使用了前向分佈演算法,但是弱學習器限定了只能使用CART迴歸樹模型。在迭代的過程中,當前的分類器目標是擬合前一輪分類器的殘差。下面是一個預測年齡的例子,我們限定樹只能有兩層,第一輪預測了15和25(預測值是子節點樣本的均值),第二輪預測的是第一輪的殘差。最後的預測結果是所有樹預測的和。

GBDT過程:

1. 初始化分類器

f_0(x)=argmin \sum_{i=1}^{m}L(y_i,c)

2. 對迭代1,2....T輪:

(a) 樣本1,2,...m,計算負梯度。注意負梯度是t-1輪模型的負梯度,我們用t-1的負梯度來生成第t輪的樹

之所以是計算負梯度,和損失函式有關,GBDT常用的損失函式有均方差、絕對損失等,以均方差損失函式為例

L(y,x)=\frac{1}{2}(y-f(x))^2

梯度是-(y-f(x)),負梯度正好是預測的殘差,所以說GBDT擬合殘差就是在擬合負梯度

(b) 利用(x_i,r_{ti})擬合CART迴歸樹,得到第t輪的迴歸樹T

(c) 更新模型

f_m(x)=f_{m-1}(x)+T

(d) 輸出模型

GBDT分類

由於GBDT使用的是cart迴歸樹,而分類的標籤是離散的標籤,所以實現方法和迴歸不同。分類的GBDT常用損失函式有指數函式和對數損失。當用指數損失函式的時候,GBDT退化為adaboost

當用對數釋然函式的時候,用預測概率和真實概率的差來擬合損失

參考

https://zhuanlan.zhihu.com/p/31639299

https://blog.csdn.net/herr_kun/article/details/81139457

https://www.jianshu.com/p/005a4e6ac775  引數設定

https://www.zhihu.com/question/63560633

https://zhuanlan.zhihu.com/p/25257856