機器學習總結(一) Adaboost,GBDT和XGboost算法


一: 提升方法概述

提升方法是一種常用的統計學習方法,其實就是將多個弱學習器提升(boost)為一個強學習器的算法。其工作機制是通過一個弱學習算法,從初始訓練集中訓練出一個弱學習器,再根據弱學習器的表現對訓練樣本分布進行調整,使得先前弱學習器做錯的訓練樣本在后續受到更多的關注,然后基於調整后的樣本分布來訓練下一個弱學習器。如此反復學習 ,得到一系列的弱學習器,然后 組合這些弱學習器,構成一個強學習器。提升方法生成的弱學習器之間存在強依賴關系,必須串行生成一系列的弱學習器。目前提升方法主要有 AdaBoost,GBDT,XGBoost等算法。而通常我們所知的Bagging,隨機森林等算法生成的弱學習器之間不存在強依賴關系,可同時生成並行化的方法。

二: 提升方法AdaBoot算法

通常對提升方法來說,有兩個問題需要回答:一是如何在每一輪改變訓練樣本的分布,二是如何將弱分類器組合成一個強分類器。

對於第一個問題,AdaBoost算法的做法是提高被前一輪弱分類器錯誤分類樣本的權值,而降低被正確分類樣本的權值。這樣,沒有得到正確分類的數據由於權值被加大而受到后輪的弱分類器更大關注。

對於第二個問題,AdaBoost算法的做法是AdaBoosting采取 加權多數表決的方法。具體就是加大分類誤差小的弱分類器的權值,使其在表決中起較大的作用,減小分類誤差率大的弱分類器的權值。

 AdaBoost算法的具體步驟(該步驟主要是基於模型為加法模型,損失函數為指數函數):

給定一個二類分類的訓練數據集,每個樣本點由實例xi與標記yi y={-1,1}組成,樣本數為N 

目標從訓練數據中學習一系列弱分類器,然后將這些弱分類器Gm(x)組合成一個強分類器G(x)。

(1)初始化訓練數據的權值分布

(2)對於第m=1,2,..M輪迭代

(a)使用具有權值分布的Dm的訓練數據集學習,得到基本分類器

(b)計算基分類器Gm(x)在訓練數據集上的分類誤差

這里wmi表示第m輪中第i個實例的權值,Gm(x)在加權的訓練集上的分類誤差是被Gm(x)誤分類的樣本的權值和,由此可看出基分類器Gm(x)的分類誤差與權值分布Dm關系

(c)計算Gm(x)基分類的系數即基分類器的權值,log為自然對數

可知當em<=1/2時,αm>0,且分類誤差率em越小的弱分類器,其權值αm越大。所以分類誤差率越小的弱分類器在最終分類器中的作用越大。

(d)更新訓練數據集的權值分布

其中,Zm為規范化因子,意思就是讓Dm+1是被正確定義的 概率

權值分布更新也可表達成如下形式:

由此可知,下一輪訓練時正確分類的樣本的權值得以縮小,而被誤分類的樣本的權值得以擴大。因此誤分類的樣本在下一輪中起更大的作用,不改變所給的訓練數據,而不斷的改變訓練數據的權值分布,使得訓練數據在弱分類器的學習過程中起不同的作用。

(3)構建弱分類器的線性組合:步驟2完成后得到M(m=1,2,…M)個弱分類器Gm(x):

得到最終的強分類器:

線性組合f(x)實現了 M個基本分類器的加權表決。系數αm表示基本分類器Gm(x)的重要性,系數之和並 不 為1。f(x)的符號決定了實例x的類別,f(x)的絕對值表示分類的確信度。

三:GBDT(梯度提升樹)算法

提升樹:是一種以分類樹或者回歸樹作為基本分類器的算法。提升樹一般采用加法模型,即基函數的線性組合與前向分步算法。對分類問題決策樹是二叉分類樹,對回歸問題決策樹是二叉回歸樹。提升樹模型可表示為決策樹的加法模型:

 

表示為第m棵決策樹,表示為第m決策樹參數,M表示樹的棵數。

提升樹算法采用前向分步算法,第m步的模型是

其中fm-1(x)為當前樹,損失函數如下:

 

即通過迭代,第m棵決策樹使得L(fm(x),y)的損失最小化。

對於損失函數,回歸問題用平方誤差損失函數,分類問題用指數損失,一般決策問題用一般損失函數。

GBDT梯度提升樹:

對於提升樹,當損失函數是平方誤差損失函數和指數損失函數時,每一步優化比較簡單,但是對於一般損失函數,往往每一步優化沒那么容易。

通常優化損失函數,是希望損失函數能夠不斷的減小,而且是損失函數能夠盡可能快的減小。而梯度提升算法針對這問題 ,讓損失函數沿着梯度方向最速下降的方法,關鍵是利用損失函數的負梯度在當前模型的值:

作為回歸問題提升樹算法中殘差的近似值。其中為當前模型。gbdt 每輪迭代的時候,都去擬合損失函數在當前模型下的負梯度。這樣每輪訓練的時候都能夠讓損失函數盡可能快的減小,盡快的收斂達到局部最優解或者全局最優解。

GBDT的算法如下:

 (1)首先計算損失函數在當前模型Fm1(x)的負梯度值:

 (2)根據yi學習得到了第m棵回歸樹,對應的葉節點區域為am

 (3)在葉結點區域上求得損失最小化的pm

 (4)得到最終模型

四:XGBoost算法

XGBoost(eXtreme Gradient Boosting)也是一種梯度提升樹算法

1:XGboost的損失函數推導

XGboost的基分類器為分類和回歸樹(CART)

CART會把輸入根據輸入的屬性分配到各個葉子節點,而每個葉子節點上面都會對應一個實數分數。得到一個實數分數有很多好處,如可以做概率預測,排序。

一顆樹往往過於簡單,所以將多棵樹集成在一起。如下圖,用兩棵樹來進行預測。我們對於每個樣本的預測結果就是每棵樹預測分數的和。

 XGboost 的Tree Ensemble 模型以及損失目標函數為:

假設Model中有K棵樹,根據損失函數和正則化構造一個目標函數,然后我們要做的就是去嘗試優化這個目標函數。目標函數的左邊為經驗損失誤差,右側為正則化項,目標是降低模型的復雜度。這里目標函數優化的是整體的模型,yi^是整個累加模型的輸出,正則化項是所有樹的復雜度之和(k棵樹的復雜度之和)。

 

對於yi^ 采用前向 分布算法和加法模型,跟boosting的學習策略一樣,每次學習當前的樹,找到當前最佳的樹模型加入到整體模型中,因此關鍵在於學習第t棵樹。

在第t輪也就是學習第t棵樹時,目標就是第t棵樹的加入能夠使得整個模型的誤差損失最小。

 

所以如上,即優化目標 Objt,yi^(t-1)為常量,前t-1棵樹的復雜度為常量,用constant表示。Ω(ft)為第t棵樹的正則化項,ft為第t棵樹的復雜度。如果損失函數為平方損失,那么跟回歸問題提升樹一樣,只需要擬合當前模型的殘差就可以得到第t棵樹。

倘若損失函數不是平方損失,我們可以用GBDT算法,利用損失函數的負梯度在當前模型的值來近似殘差。在GBDT中只需對當前模型求一階導。

而XGBoost的思想是對誤差函數進行二階展開,保留二次項。與GBDT相比,多了計算損失函數的二階梯度這一項系數。

於是省略掉一些常數項后,可得到新的損失目標函數

目標函數保留的泰勒展開的二次項。在這個目標函數里需要優化gi和hi。得到這個目標函數有啥意義?

2:重新定義每棵樹的復雜度

把樹拆分成結構部分q葉子權重部分w。下圖是一個具體的例子。結構函數q把輸入映射到葉子的索引號上面去,而w給定了每個索引號對應的葉子分數是什么。如wq(x)是該節點的打分,即該樣本的模型預測值 。

定義這個復雜度包含了一棵樹里面節點的個數,以及每個樹葉子節點上面輸出分數的L2模平方。當然這不是唯一的一種定義方式,不過這一定義方式學習出的樹效果一般都比較不錯。

在這種新的定義下,我們可以把目標函數進行如下改寫,其中I被定義為每個葉子上面樣本集合

在這一目標函數中,加了兩個正則項,一個是葉子結點個數的正則項,一個是葉節點分數的正則項。所以目標函數里出現了兩種累加,一種是葉子節點中樣本個數的累加,一種是葉子節點個數的累加

從目標函數看出,包含了兩個相互獨立的單變量二次函數,令

目標函數可化簡為

 

對目標函數的wj進行求導得:

然后把最優解代入得到:

Obj代表了當一棵樹的結構(葉節點個數)是確定的時候,目標函數的分數越小即結構分數(structure score),結構越好。

切分點的查找采用貪心算法:遍歷每一個已有的葉子,並嘗試去分割,在分割后,目標函數的變化如下:

分割后,可以觀察到,不僅是結構分數發生了變化,葉節點的的復雜度也有變化.優化這個目標對應了樹的剪枝, 當引入的分割帶來的增益小於一個閥值的時候,我們可以剪掉這個分割。

 XGBOOST的算法流程如下:

 

五 :總結

(一):Adaboost與GBDT算法

Adaboost算法的模型是一個弱學習器線性組合,特點是通過迭代,每一輪學習一個弱學習器,在每次迭代中,提高那些被前一輪分類器錯誤分類的數據的權值,降低正確分類的數據的權值。最后,將弱分類器的線性組合作為強分類器,給分類誤差小的基本分類器大的權值。每一次迭代都可以減少在訓練集上的分類誤差率。

AdaBoost能夠有效的降低偏差,能夠在泛化性能非常弱的學習器上構建成很強的集成。缺點是對噪聲敏感。

GBDT與Adaboost的主要差別為,Adaboost每輪學習的一個基本學習器是通過改變樣本的權值,關注上輪分類錯誤的樣本的權值,以逐步減少在訓練集上的分類誤差率。而GBDT每輪學習一個基本學習器是通過改變輸出值,每輪擬合的值為真實值與已有的加法模型的差值(即殘差)。GBDT無論是進行分類還是回歸問題,都用的CART樹。對於分類問題用二叉分類樹,回歸問題用二叉回歸樹。 

(二):GBDT與XGboost

1:傳統GBDT在優化時只用到一階導數信息,xgboost則對代價函數進行了二階泰勒展開,同時用到了一階和二階導數。xgboost工具支持自定義代價函數,只要函數可一階和二階求導。

2:Xgboost在代價函數里加入了正則項,用於控制模型的復雜度。正則項里包含了樹的葉子節點個數、每個葉子節點上輸出的score的L2模的平方和。從Bias-variance tradeoff角度來講,正則項降低了模型variance,使學習出來的模型更加簡單,防止過擬合,這也是xgboost優於傳統GBDT的一個特性。正則化包括了兩個部分,都是為了防止過擬合,剪枝是都有的,葉子結點輸出L2平滑是新增的。還可以進行列抽樣,從而降低過擬合的風險。

3:XGboost可進行並行計算,但是這種並行計算並不是像隨機森林那樣是在tree粒度上去進行,而是在特征粒度上並行。


(三):

Boosting算法的基學習器之間都存在強的依賴關系,必須串行的生成序列化的方法。訓練過程關注偏差的降低。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM