1. 程式人生 > >整合學習之boosting,Adaboost、GBDT 和 xgboost(一)

整合學習之boosting,Adaboost、GBDT 和 xgboost(一)

在前面的部落格(https://blog.csdn.net/qq_16608563/article/details/82878127)
介紹了整合學習的bagging方法及其代表性的隨機森林。此次接著介紹整合學習的另一個方法boosting以及boosting系列的一些演算法,具體包括 Adaboost、GBDT和xgboost

boosting(提升)方法是一種常用的統計學習方法,應用廣泛且有效。在分類問題中
,它通過改變訓練樣本的權重,學習多個分類器,並將這些分類器進行線性組合,提高分類的效能。與bagging不同的是,各個預測函式只能順序生成,因為後一個模型引數需要前一輪模型的結果。

提升方法AdaBoost演算法

提升演算法的基本思想:對於一個複雜的任務來說,將多個分類器的判斷進行適當的綜合得出的判斷,要比任何一個分類器單獨判斷的結果要好。

強可學習與弱可學習:在概率近似正確的學習框架中(PAC),一個概念,如果存在一個多項式的學習演算法可以學習它,並且正確率很高,那麼稱這個概念是強可學習的。
如果存在一個多項式的學習演算法可以學習它,但學習的正確率僅僅比隨機猜測略好,那麼這個概念是弱可學習的。

結論:在PAC學習的框架下,一個概念是強可學習的充分必要條件是這個概念是弱可學習的。
那麼問題來了,如果已經發現了“弱學習演算法”,那麼是否可以將它提升為“強可學習演算法”
(弱學習演算法是比較容易發現的)

提升方法就是從弱學習演算法出發,反覆學習,得到一系列弱分類器(又稱為基本分類器),然後組合這些弱分類器,構成一個強分類器。

大多數的提升方法都是改變訓練資料的概率分佈(訓練資料的權值分佈),針對不同的訓練資料分佈呼叫弱學習演算法學習一系列的弱分類器。

這樣,對於提升方法來說,有兩個問題需要回答:
1)在每一輪如何改變資料的權值(訓練樣本的權重)或概率分佈
2)如何將弱分類器組合成一個強分類器。

AdaBoost(Adaptive Boost):自適應提升

AdaBoost巧妙而自然的回答了以上的2個問題並把他們完美的融合在了一個演算法中。

針對第一個問題,AdaBoost的做法是:**提高那些被前一輪弱分類器錯誤分類樣本的權值,而降低那些被正確分類樣本的權值。**這樣一來,那些沒有被正確分類的樣本,由於其權值的加大而受到後一輪弱分類器的更大關注。

針對第二個問題:即弱分類器的組合,AdaBoost採取加權多數表決的方法。具體的加大分類誤差率小的弱分類器的權重,使其在表決中起較大作用,減小分類誤差率大的弱分類器的權重,使其在表決中起較小的作用(體現在弱分類器的權重 α α 與分類誤差率 e m e_m 的關係式 α m = 1 2 l o g 1 e m e m α_m=\frac{1}{2}log\frac{1-e_m}{e_m} )後面詳解。

AdaBoost演算法:

輸入:訓練資料集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x N , y N ) y i = ( + 1 , 1 ) T={(x_1,y_1),(x_2,y_2),…(x_N,y_N)}其中y_i={(+1,-1)}
弱學習演算法
輸出:最終分類器G(x)
針對這個演算法我想這樣來學習:先縱向看,再橫向看,怎麼講?往下看
首先縱向看:看什麼?看順序,即演算法流程,先算什麼後算什麼,引數是如何聯絡與推導的?

1)初始化訓練資料的權值分佈(提升方法的2個問題中的第一個問題
D 1 = ( w 1 , 1 w 1 , i , w 1 , N ) D_1=(w_{1,1},w_{1,i}…,w_{1,N}) 其中 w 1 , i = 1 N w_{1,i}=\frac{1}{N}
縱向看:演算法的第一步是初始化了一個訓練資料的權重向量 D 1 D_1 **
橫向看:向量的每一個元素對應著一個訓練樣本的權重 w 1 , i w_{1,i} :其中1 代表是訓練的輪數,i代表這一輪的第i個樣本的權重。
還有這個權重向量在每一輪都會進行更新(所以才叫自適應啊,講究),如何更新見下面的步奏。
2)對 m=1,2…M (這個是訓練的輪數,也是弱分類器的個數)
(a)有了權重向量了 D m D_m 以後,在原始的訓練資料上結合權重向量 D m D_m 以及弱學習演算法,就可以得到基本分類器了 G m ( x ) G_m(x)
(b) 有了基本分類器 G m ( x ) G_m(x) 之後,我們可以計算這個弱分類器 G m ( x ) G_m(x) 在訓練資料集上的分類誤差率
e m = P ( G m ( x i ) y i ) = e_m=P(G_m(x_i)≠y_i)= i = 1 N w m i I ( G m ( x i ) y i ) \displaystyle\sum_{i=1}^{N}w_{mi}I(G_m(x_i)≠y_i)

其實,弱分類器 G m ( x ) G_m(x) 在加權的訓練資料集上的分類誤差率是被 G m ( x ) G_m(x) 誤分類樣本的權值之和。**

e m = P ( G m ( x i ) y i ) = e_m=P(G_m(x_i)≠y_i)= G m ( x i ) y i w m i \displaystyle\sum_{G_m(x_i)≠y_i}w_{mi}

(c)誤分類率 e m e_m 出來了,就可以使用它來計算弱分類器的權重了(前面說了分類效果不好的權重要低點)
α m = 1 2 l o g 1 e m e m α_m=\frac{1}{2}log\frac{1-e_m}{e_m}