1. 程式人生 > >機器學習提升演算法之Adaboost、GB、GBDT與XGBoost演算法

機器學習提升演算法之Adaboost、GB、GBDT與XGBoost演算法

一、提升演算法概論

Boosting(提升)是一族可將弱學習器提升為強學習器的演算法。提升演算法基於這樣一種思想:對於一個複雜的任務,將多個專家的判斷總和得出的結果要比任何一個專家單獨的判斷好。這族演算法的工作機制類似:先從初始訓練集訓練出一個基學習器,再根據基學習器表現對訓練樣本分佈進行調整,是的先前基學習器做錯的樣本在後續收到更多關注(賦予做錯的樣本更大的權值),然後基於調整後的樣本分佈來訓練下一個基學習器,一直反覆進行,直到達到指定值。對樣本加權的過程如下:

上圖中被放大的點是被加權的樣本,樣本加權後,在下一次的學習中就會收到更多的關注。

也就是說提升演算法對分類錯誤的樣本更為關注,通過改變錯誤樣本所佔的權值來改變分類邊界,從而一步步提升演算法的準確度。

二、AdaBoost演算法

  

AdaBoost演算法是提升演算法中最具代表性的。正如上面所說的,在AdaBoost演算法中會提高前一輪分類器分類錯誤的樣本的權值,而降低那些被分類正確樣本的權值。對於弱分類器的組合,AdaBoost演算法採取加權多數表決的方法。具體的說就是加大分類誤差率小的弱分類器的權值,使其在表決中起到較大的作用;減小分類誤差率大的弱分類器的權值,使其在表決中起較小的作用。下面具體說一下AdaBoost演算法的流程。

關於AdaBoost演算法做如下說明:

以上關於AdaBoost演算法流程來自《統計學習方法》,更多關於AdaBoost演算法內容可以參見《統計學習方法》

三、Gradient boosting(GB) 梯度提升演算法

  梯度提升演算法首先給定一個目標損失函式,它的定義域是所有可行的若函式集合(基函式);提升演算法通過迭代的選擇一個負梯度方向上的基函式來逐漸逼近區域性最小值。

梯度提升演算法過程如下:

1.初始化模型為常數


2.迭代生成M個基學習器

2.1.計算偽殘差(也就是梯度方向)

 

2.2.基於資料計算擬合殘差的基函式(基函式也就是基學習器,例如決策樹等演算法)

2.3.計算最優的步長gamma,L是損失函式,通過經驗風險最小化來選取引數gamma:


2.4.更新模型

四、GBDT(Gradient Boosting Decision Tree) 梯度提升決策樹演算法

GB演算法中最典型的基學習器是決策樹,尤其是CART,正如名字的含義,GBDT是GB和DT的結合。要注意的是這裡的決策樹是迴歸樹,GBDT中的決策樹是個弱模型,深度較小一般不會超過5,葉子節點的數量也不會超過10,對於生成的每棵決策樹乘上比較小的縮減係數(學習率<0.1),有些GBDT的實現加入了隨機抽樣(subsample 0.5<=f <=0.8)提高模型的泛化能力。通過交叉驗證的方法選擇最優的引數。因此GBDT實際的核心問題變成怎麼基於\{(x_i, r_{im})\}_{i=1}^n使用CART決策樹樹生成\! h_m(x)(下面用tm(x)表示)。

在梯度提升中是根據偽殘差資料計算基學習器的。令樹tm(x)的葉節點數目為J,也就是將輸入劃分為J個不相交的區域,並且決策樹tm(x)可以在每個區域中給出某個型別的確定性預測。使用指示記號I(x),對於輸入x,tm(x)為:


bjm是樣本x在第j個區域的預測值。

在GB演算法的更新和gamma的選擇中,將上式帶入到h(x)中、

即對於:

tm(x)帶入到hm(x)中可得:


代入時,將與bjm的乘積用表示。

其餘步驟和GB演算法類似。

五、XGBoost演算法

XGBoost是提升演算法的高效實現,在各項機器學習、大資料比賽中的效果非常好。下面簡要介紹一下其推導過程。

XGBoost與GBDT主要的不同在於其目標函式使用了正則項並且利用了二階導數資訊,如下式:

紅色箭頭指向的l即為損失函式;紅色方框為正則項,包括L1、L2;紅色圓圈為常數項。xgboost利用泰勒展開三項,做一個近似,我們可以很清晰地看到,最終的目標函式只依賴於每個資料點的在誤差函式上的一階導數和二階導數。

對上式做進一步化簡:

對於上式中的累加和,可以做以下變換:


最終公式可以化簡為

通過對求導等於0,可以得到


然後把最優解代入得到:

打分函式

Obj代表了當我們指定一個樹的結構的時候,我們在目標上面最多減少多少。我們可以把它叫做結構分數(structure score)



參考文獻:

周志華《機器學習》

李航《統計學習方法》

鄒博 機器學習視訊與pdf

http://blog.csdn.net/shenxiaoming77/article/details/51542982