1. 程式人生 > >GBDT算法簡述

GBDT算法簡述

機器學習 原因 擬合 兩種方法 erro 2個 技術 都是 表現

提升決策樹GBDT

梯度提升決策樹算法是近年來被提及較多的一個算法,這主要得益於其算法的性能,以及該算法在各類數據挖掘以及機器學習比賽中的卓越表現,有很多人對GBDT算法進行了開源代碼的開發,比較火的是陳天奇的XGBoost和微軟的LightGBM

一、監督學習

1、 監督學習的主要任務

監督學習是機器學習算法中重要的一種,對於監督學習,假設有m個訓練樣本:

技術分享圖片

其中,技術分享圖片

技術分享圖片

,如分類問題;也可以為連續值,如回歸問題。在監督學習中利用訓練樣本訓練出模型,該模型能夠細線從樣本特征 。技術分享圖片

為了能夠對映射F進行求解,通常對模型設置損失函數技術分享圖片

,並求的損失函數最小的情況下的映射為最好的映射。

對於一個具體的問題,如線性回歸問題,其映射函數的形式為:

技術分享圖片

梯度下降法算法是求解最優化問題最簡單、最直接的方法。梯度下降法是一種叠代的優化算法,對於優化問題:

技術分享圖片

其基本步驟為:

1) 隨機選擇一個初始點技術分享圖片

2) 重復以下過程:

決定下降的方向:技術分享圖片

選擇步長技術分享圖片

更新:技術分享圖片

直到滿足終止條件

梯度下降法的具體過程如下圖所示:

技術分享圖片

技術分享圖片

2、 在函數空間的優化

以上是在指定的函數空間中對最優化函數進行搜索,那麽,能否直接在函數空間中查找到最優的函數呢?根絕上述的梯度下降法的思路,對於模型的損失函數,為了

技術分享圖片

技術分享圖片

二、Boosting

1、 集成方法之Boosting

Boosting方法是集成學習中重要的一種方法,在集成學習方法中最主要的兩種方法是Bagging和Boosting,在bagging中,通過對訓練樣本重新采樣的方法得到不同的訓練樣本集,在這些新的訓練樣本集上分別訓練學習器,最終合並每一個學習器的結果,作為最終的學習結果,Bagging方法的具體過程如下圖所示:

技術分享圖片

在Bagging方法中最重要的算法為隨機森林RF算法。由以上的圖中可以看出,在Bagging方法中,b個學習器之間彼此是相互獨立的,這樣的特點使得Bagging方法更容易並行。與bagging不同的是,在Boosting算法中,學習器之間是存在先後順序的,同時,每一個樣本是都有權重的,初始時,每一個樣本的權重都是相等的,首先,第1個學習器對訓練樣本進行學習,當學習完成後,增大錯誤樣本的權重,同時減小正確樣本的權重,再利用第2個學習器對其進行學習,依次進行下去,最終得到b個學習器,最終,合並這b個學習器的結果,同時,與Bagging中不同的是,每個學習器的權重也不一樣,Boosting方法的具體過程如下圖所示:

技術分享圖片

在Boosting方法中,最重要的方法包括:Adaboost和GBDT。

GB,梯度提升,通過進行M次叠代,每次叠代產生一個回歸樹模型,我們需要讓每次叠代生成的模型對訓練集的損失函數最小,而如何讓損失函數越來越小呢?我們采用梯度下降的方法,在每次叠代時通過損失函數的負梯度方向移動來使得損失函數越來越小,這樣我們就可以得到越來越精確的模型。

假設GBDT模型T有4棵回歸樹構成:t1,t2,t3,t4,樣本標簽Y(y1,y2,y3,….,yn)

設定該模型的誤差函數為L,並且為SquaredError,則整體樣本的誤差推導如下:

技術分享圖片

對於首顆樹,可以看出,擬合的就是訓練樣本的標簽,並且得到t1預測後的殘差,從誤差函數的公式中可以看出,後面的殘差r2=r1-t2,r3=r2-t3,r4=r3-t4……,由此可以得出,後面的回歸樹t2,t3,t4創建時都是為了擬合前一次留下的殘差,可以看出,殘差不斷在減小,直至達到可接受的閾值為止。

對於梯度版本,采用誤差函數的當前負梯度值作為當前模型預測留下的殘差,因此創建新的一棵回歸樹來擬合該殘差,更新後,整體gbdt模型的殘差將進一步降低,也帶來L的不斷降低。

Gbdt樹分為兩種,

(1) 殘差版本

殘差其實就是真實值和預測值之間的差值,在學習的過程中,首先學習一棵回歸樹,然後將“真實值-預測值”得到殘差,再把殘差作為一個學習目標,學習下一棵回歸樹,依次類推,直到殘差小於某個接近0的閾值或回歸樹數目達到某一閾值。其核心思想是每輪通過擬合殘差來降低損失函數。

總的來說,第一棵樹是正常的,之後所有的樹的決策全是由殘差來決定。

(2) 梯度版本

與殘差版本把GBDT說成一個殘差叠代樹,認為每一顆回歸樹都在學習前N-1棵樹的殘差不同,Gradient版本把GBDT說成一個梯度叠代樹,使用梯度下降法求解,認為每一棵回歸樹都在學習前N-1棵樹的梯度下降值。總的來說兩者相同之處在於,都是叠代回歸樹,都是累加每棵樹結果作為最終結果,每棵樹都在學習前N-1棵樹尚存的不足,從總體流程和輸入輸出上兩者是沒有區別的;

兩者的不同主要每步叠代時,是否使用Gradient作為求解方法。前者不用gradient而用殘差-殘差是全局最優值,gradient是局部最優方向*步長,即前者每一步都在試圖讓結果變成最好,後者則每一步試圖讓結果更好一點。

兩者優缺點。看起來前者更科學一點-有絕對最優方向不學,為什麽舍近求遠學一個局部最優方向呢?原因在於靈活性。前者最大的問題是,由於它依賴殘差,損失函數一般固定為放映殘差的均方差,因此很難處理純回歸問題之外的問題。而後者求解辦法為梯度下降法,只要可求導的損失函數都可以使用。

總結:GBDT又叫MART,是一種叠代的決策樹算法,該算法是由多棵決策樹組成,所有樹的結論累加起來做最終答案,它在被提出之初就和SVM一起被認為是泛化能力較強的算法。

GBDT中的樹是回歸樹(不是分類樹),GBDT用來做回歸預測,調整後可以用於分類。

重要參數的設置及意義

問題:XGBoost和GBDT在調參的時候為什麽樹的深度很小就能達到很高的精度?

用xgboost/gbdt在調參的時候把樹的最大深度調成6就有很高的精度了,但是用Desion Tree、RandomForest的時候,需要把樹的深度調到15或更高。用RandomForest所需要的樹的深度和DesionTree一樣,我能理解,因為他是用disitionTree組合在一起的,相當於做了很多次的DecisionTree一樣。但是xgboost/gbdt僅僅用梯度上升法就能達到很高的預測精度,使我驚訝到懷疑他是黑科技,請問下xgboost/gbdt是怎麽做到的?她的節點和一般般的Desition不同嗎?

答:Boosting主要關註降低偏差,因為boosting能給予泛化性能相當弱的學習器構建出很強的集成;Bagging主要關註降低偏差,因此它在不剪枝的決策樹、神經網絡等學習器上效果更為明顯。

隨機森林和GBDT都屬於集成學習的範疇。集成學習下有兩個重要的策略Bagging和Boosting

對於Bagging算法來說,由於我們會並行的訓練很多不同的分類器的目的就是降低這個方差,因為,采用了相互獨立的基分類器以後,h值自然就會靠近,所以對於每個分類器來說,目標就是如何降低這個偏差,所以我們就會采用很深的甚至不剪枝的決策樹。

對於Boosting來說,每一步我們都會在上一輪的基礎上更加擬合原始數據,所以可以保證偏差,所以對於每個基分類器來說,問題就在於如何選擇方差更小的分類器,既簡單的分類器,所以我們選擇了深度很淺的決策樹。

GBDT算法簡述