機器學習--集成學習GBDT

1. GBDT思想

GBDT也是集成學習Boosting的其中一種,Boosting是由多個弱學習器組成,與bagging不同,Boosting學習器之間有關聯的關係。AdaBoost是通過前面的學習器模型來決定當前的學習器模型的每個樣本的權重,然後計算出當前學習器組合權重,最後將學習器線性組合起來。而GBDT則是通過不斷的最小化樣本的殘差來達到集成學習的目的,每個弱學習器,都是用於擬合之前學習器中的殘差值,所以GBDT是一個串行的模型,並行運算能力比較差。因爲是要擬合殘差,所以GBDT弱學習器模型是要滿足高偏差,低方差的條件,一般都是選擇CART(也就是分類迴歸決策樹)作爲弱學習器模型。

2. 算法流程

1、構建第一棵樹

用樣本特徵去構建一個CART決策樹,葉子節點的取值用貪心的思想,選擇使偏差最小的常數。

F0(x)=argminci=1nL(yi,c)

其中yi 是樣本的label,L(,) 表示損失函數,如果是迴歸問題,可能使用MAE或者MSE,分類問題可能使用對數變換後的0/1損失函數,也就是找到一個合適的常數c,使得這個分類的損失值最小。

2、用負梯度下降的方法計算殘差並構建後面的樹

αim=L(yi,Fm1(xi))Fm1(xi)

(xi,αim) 組成新的數據,用新的學習器去擬合這組新的數組,再去之前的學習器組合起來,達到減少殘差的目的。

Fm(x)=argmincmi=1nL(αim,cm)

3、把所有的學習器疊加起來

Fm(x)=fm1(x)+fm(x)

重複過程直到損失少於一定的值或者迭代次數到一定值。

3. GBDT解決分類問題

爲了讓GBDT能解決分類問題主要有兩種方法:

  • 指數損失函數
  • 類似於邏輯迴歸的對數似然損失函數

這裏討論第二種,用對數思然函數。

二分類問題

對於二分類的問題,損失函數是:

L(y,f(x))=log(1+exp(yf(x)))

y 爲1或者-1,此時,負梯度誤差是:
αmi=L(yi,fm1(xi))fm1(xi)=yi1+exp(yif(xi))

各個葉子節點的最佳殘差擬合值爲:
cmj=argminclog(1+exp(yi(fm1(xi)+c)))

多分類問題

對於二分類的問題,損失函數是:

L(y,f(x))=k=1Kyklogpk(x)

如果類別是k,則yk 爲1,其餘情況爲0。第k類的概率表達式是,這是一個類似於softmax的函數:
pk(x)=exp(fk(x))Kl=1exp(fl(x))

結合上面兩式,求αmi 的負梯度值:
αmi=yilpl,m1(xi)

4. GBDT的正則化

正則化的手段有三種:控制迭代器步長、加入子採樣比例、剪枝

控制迭代器步長

對於每個弱學習器,是爲了擬合前面的殘差,爲了不然擬合程度太大,加入一個擬合步長v 對擬合程度進行縮放,一般取[0,1]之間。即原來:

fm(x)=fm1(x)+hm(x)

變爲:
fm(x)=fm1(x)+vhm(x)

加入子採樣比例

第二種正則化的方式是通過子採樣比例(subsample)。取值爲(0,1]。注意這裏的子採樣和隨機森林不一樣,隨機森林使用的是放回抽樣,而這裏是不放回抽樣。如果取值爲1,則全部樣本都使用,等於沒有使用子採樣。如果取值小於1,則只有一部分樣本會去做GBDT的決策樹擬合。選擇小於1的比例可以減少方差,即防止過擬合,但是會增加樣本擬合的偏差,因此取值不能太低。推薦在[0.5, 0.8]之間。使用了子採樣的GBDT有時也稱作隨機梯度提升樹(Stochastic Gradient Boosting Tree, SGBT)。由於使用了子採樣,程序可以通過採樣分發到不同的任務去做boosting的迭代過程,最後形成新樹,從而減少弱學習器難以並行學習的弱點。

剪枝

第三種是對於弱學習器即CART迴歸樹進行正則化剪枝。

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