XGBoost算法思想

本章涉及到的知識點清單:

1、boosting模式

2、集成學習模型的偏差和方差

3、bagging的偏差和方差

4、boosting的偏差和方差

5、XGBoost的基礎(chǔ)模型

6、XGBoost的目標函數(shù)

7、優(yōu)化目標函數(shù)

8、樹的函數(shù)表達式的拆分

9、模型的復雜度定義

10、繼續(xù)優(yōu)化目標函數(shù)

11、求解目標函數(shù)極值

12、樹節(jié)點分裂算法

13、XGBoost的算法步驟

14、案例演示

15、XGBoost的優(yōu)點

一、boosting模式

boosting屬于集成學習框架之一,與bagging類似,boosting也不再是用單一的模型來進行預(yù)測,而是組合若干弱學習器來產(chǎn)生一個強學習器

boosting:整個訓練過程呈階梯狀,弱學習器按照次序逐一進行訓練,與bagging不同在于每個弱學習器的訓練集,都按照某種策略進行一定的轉(zhuǎn)化,最后對所有弱學習器的預(yù)測結(jié)果進行線性綜合來產(chǎn)生最終的預(yù)測結(jié)果。即:

boosting模型

boosting有如下特點:

(1)所有弱學習器的學習過程均依賴于同一份訓練集結(jié)果,訓練集在每個弱學習器訓練完成后,都會按照同一策略更新轉(zhuǎn)化

(2)所有弱學習器的訓練過程是串行化的,即當前弱學習器訓練的參數(shù)依賴于上一個弱學習器訓練的結(jié)果

(3)所有弱學習器對于訓練集的每個樣本都有相同的初始化權(quán)重

(4)當每個弱學習器學習完,而對于那些預(yù)測結(jié)果錯誤的樣本會采用某個策略來增加其權(quán)重

(5)boosting總是更加關(guān)注被錯誤預(yù)測的弱規(guī)則

關(guān)于boosting算法比較常見的有:AdaBoost、GBDT以及本文分析的XGBoost

二、集成學習模型的偏差和方差

偏差:描述模型的預(yù)測值和樣本的真實值之間的差異,反映模型的準確度

方差:描述模型的預(yù)測值作為隨機變量的離散程度,反映模型的過擬合能力

這里我們可以用期望這個統(tǒng)計量來描述模型的偏差

由方差和協(xié)方差的基本定義出發(fā):

方差的定義
協(xié)方差的定義

對于集成學習模型,通過計算弱學習器模型的期望和方差,我們可以得到模型整體的期望和方差。而且不論是bagging還是boosting,其弱學習器都是線性組成的,我們設(shè)每個弱學習器為f_{i},總共有m個弱學習器,f_{i}對應(yīng)的權(quán)重為r_{i}F為整個模型

則模型的期望E(F)為:

模型的期望

模型的方差var(F)為:

模型的方差

這里需要用到二項展開公式

二項展開

帶入模型方差展開得

模型的方差

我們再引入2個統(tǒng)計量:標準差\sigma 和相關(guān)系數(shù)\rho ,用來代表整體模型的標準差和相關(guān)系數(shù),其基本定義為:

標準差和相關(guān)系數(shù)的定義

\sigma \rho 帶入模型方差,得

模型的方差

推導至此,我們得到了集成學習整體模型的期望E(F)方差var(F)的數(shù)學表達式

集成學習模型的期望和方差

集成學習模型的整體偏差和方差的關(guān)系可形象的展示為:

集成學習模型的整體偏差和方差

接下來我們分別討論在bagging或boosting算法下模型整體的期望和方差

三、bagging的期望和方差

對于bagging來說,每個弱學習器的權(quán)重r_{i}都為\frac{1}{m} ,且每個弱學習器訓練的樣本都是從原始樣本采取有放回式隨機抽樣,故每個弱學習器的期望E(f_{i})近似相等\mu

則bagging的期望為:

bagging的期望

bagging的方差為:

bagging的方差

比較集成學習模型的期望和方差,可以總結(jié)出bagging:

(1)模型整體的期望近似等于單個弱學習器的期望

(2)隨著訓練的進行,模型整體的方差降低

我們也可以看到,隨機森林(Random Forest)采取對訓練集的特征進行隨機抽樣的策略,使得各個弱學習器的相關(guān)性降低,從而達到減少方差的效果

四、boosting的偏差和方差

對于boosting來說,訓練集抽樣是強相關(guān)的,即模型的相關(guān)系數(shù) \rho近似等于1

則boosting的期望為:

boosting的期望

boosting的方差為:

boosting的方差

比較集成學習模型的期望和方差,可以總結(jié)出boosting:

(1)剛初始化時,模型整體的期望較低,方差較低

(2)隨著訓練的進行,模型整體的期望升高,方差也增大

五、XGBoost的基礎(chǔ)模型

XGBoost(Extreme Gradient Boosting)是GBDT的一種高效實現(xiàn),其弱學習器除了可以是CART回歸樹,也可以是線性分類器。這里我們用CART樹來當作弱學習器

考慮場景:我們要預(yù)測一家人對電子游戲的喜好程度,為此可以構(gòu)建2顆CART樹

第1顆CART樹:考慮到年輕和年老相比,年輕更可能喜歡電子游戲,故使用“年齡”作為第1個特征來二分樣本集;再考慮到男性和女性相比,男性更喜歡電子游戲,故使用“性別”作為第2個特征來二分子樣本集,最后逐一給各人在電子游戲喜好程度上打分

第2顆CART樹:考慮到喜歡電子游戲的人每天使用電腦的頻率較高,故使用“每天使用電腦的頻率”作為特征來二分子樣本集,最后逐一給各人在電子游戲喜好程度上打分

場景CART樹

對于上述兩顆CART樹,我們要計算小男孩的預(yù)測分數(shù),只需在每顆CART樹中找到小男孩落在的樹葉位置,將樹葉對應(yīng)的分數(shù)累加即可

上述物理場景的行為過程如下:

(1)有K顆CART樹

(2)對于任意n維樣本x_{i},找到其在每顆樹中所在葉子的位置和該葉子的權(quán)重

(3)將這些權(quán)重相加,作為x_{i}最后的預(yù)測分數(shù)

我們將上述場景數(shù)學化

設(shè)\hat{y}_{i}是樣本x_{i}的最終預(yù)測分數(shù),f_{i}是第i顆樹的葉子打分映射,則預(yù)測函數(shù)

模型的預(yù)測函數(shù)

所有樹的葉子打分映射將共同構(gòu)成模型的函數(shù)空間,即

模型的函數(shù)空間

(PS:注意這里不再是模型的參數(shù)空間\theta ,而是函數(shù)空間f

六、XGBoost的目標函數(shù)

我們繼續(xù)定義出模型的損失函數(shù)

模型的損失函數(shù)

其中l(y_{i}, \hat{y}_{i})是單個樣本x_{i}的損失函數(shù),可以是任意可微函數(shù),比如平方誤差邏輯誤差函數(shù)

平方誤差函數(shù)
邏輯誤差函數(shù)

接下來我們再定義出模型的復雜度為

模型的復雜度

其中\Omega(f_{i})可以用樹的深度、葉子的數(shù)量、葉子權(quán)重的L2范式等量化

我們對上述模型的損失函數(shù)和復雜度進行線性組合,便得到了XGBoost的目標函數(shù)Obj

XGBoost的目標函數(shù)

顯然,XGBoost的目標函數(shù)加入了正則項,即:L(F)表示模型的偏度(期望),用 \Omega (F)表示模型的復雜度(方差)

七、優(yōu)化目標函數(shù)

從數(shù)學角度看,目標函數(shù)Obj的定義是一個泛函,優(yōu)化目標函數(shù)等價于泛函最優(yōu)化問題,這使得我們很難進行優(yōu)化

(PS:\hat{y}_{i}的自變量包含K個函數(shù)f_{i}(x_{i}),即\hat{y}_{i}函數(shù)的函數(shù)—泛函

為此我們需要對目標函數(shù)進行變換,根據(jù)boosting的思想:

(1)每次迭代,都是在現(xiàn)有模型的基礎(chǔ)上,增加一個弱學習器

(2)新增加的弱學習器就是一個新函數(shù)f,用來擬合當前模型的預(yù)測結(jié)果和真實值的殘差

(3)通過不斷迭代K個弱學習器來不斷降低模型的預(yù)測結(jié)果和真實值的殘差

我們將上述思想進行數(shù)學化,即

加入第0顆樹,當前模型的預(yù)測結(jié)果為

加入第0顆樹

加入第1顆樹,當前模型的預(yù)測結(jié)果為

加入第1顆樹

加入第2顆樹,當前模型的預(yù)測結(jié)果為

加入第2顆樹

根據(jù)數(shù)學歸納法,加入第t顆樹,即第t次迭代,當前模型的預(yù)測結(jié)果為

加入第t顆樹

將上述迭代結(jié)果帶入目標函數(shù),則目標函數(shù)改為迭代版本如下

迭代版本的目標函數(shù)

下面我們需要對目標函數(shù)進行一些數(shù)學上的近似處理

我們知道二階泰勒公式的迭代形式為

二階泰勒公式的迭代形式

這里我們將目標函數(shù)類比二階泰勒公式,即

類比二階泰勒公式

且定義g_{i}h_{i}類比二階泰勒公式中的一階導數(shù)和二階導數(shù),即

類比二階泰勒公式

有了上述近似類比,我們將目標函數(shù)在f_{t}(x_{i})處進行二階泰勒展開,得

目標函數(shù)的泰勒二階展開

我們繼續(xù)優(yōu)化目標函數(shù)

由于目標函數(shù)只受到基學習器f的影響,上一次的誤差l(y_{i},\hat{y_{i}}^{(t-1)}) 是常數(shù)項,對本次迭代沒有影響(常量微分為0),于是我們可以刪除掉常數(shù)項,即

優(yōu)化目標函數(shù)

至此我們得到了迭代過程下,目標函數(shù)的近似表達式,繼續(xù)優(yōu)化之前,我們需要先討論每棵樹的函數(shù)表達式 f_{t}(x_{i})

八、樹的函數(shù)表達式的拆分

我們將第t顆樹的函數(shù)表達式 f_{t}(x_{i}),拆分成樹結(jié)構(gòu)部分q葉子權(quán)重部分w,即

樹結(jié)構(gòu)和葉子權(quán)重

如上圖,樹的物理意義為:

每個樣本均落在樹中對應(yīng)的葉子中,且每片葉子都有權(quán)重分數(shù)值

我們將其數(shù)學化,即定義:

q(x_{i}):=在樹中,任意樣本x_{i}落在葉子的位置

w_{q(x_{i})}:=在樹中,任意樣本x_{i}所在葉子的權(quán)重

至此,我們可以將樹的函數(shù)表達式 f_{t}(x_{i})寫為

樹的函數(shù)表達

九、模型的復雜度定義

緊接著我們定義出模型的復雜度\Omega(f_{t})

我們用葉子節(jié)點的個數(shù)T和每片葉子的權(quán)重w_{j}的L2范數(shù)來共同描述模型的復雜度,即

模型的復雜度

其中\gamma\lambda是超參數(shù),\gamma用來收縮葉子個數(shù),\lambda控制葉子權(quán)重分數(shù)不會過大,二者同時防止模型過擬合

十、繼續(xù)優(yōu)化目標函數(shù)

有了樹的函數(shù)表達式 f_{t}(x_{i})的拆分和模型的復雜度\Omega(f_{t}),我們繼續(xù)優(yōu)化目標函數(shù)

將二者帶入目標函數(shù),得

目標函數(shù)

下面需要用到一個數(shù)學技巧,仔細觀察上式

目標函數(shù)

上式中,紅色部分表示:對整個樣本集合的遍歷;藍色部分表示:對所有葉節(jié)點的遍歷

為了將二者的累加形式統(tǒng)一,我們有如下結(jié)論

(1)由于所有樣本在樹結(jié)構(gòu)中,最終都會落在葉子節(jié)點上

(2)則遍歷所有樣本\Leftrightarrow?遍歷所有葉子節(jié)點中的子樣本

因此我們定義I_{j}表示樹中第j個葉子中樣本的集合,即

第j個葉子中樣本集合

I_{j}帶入目標函數(shù),我們就可以統(tǒng)一兩個\sum的物理意義和數(shù)學形式,即

目標函數(shù)

緊接著我們定義G_{i}H_{i}來簡化目標函數(shù)

簡化目標函數(shù)

帶入則目標函數(shù)最終可以化簡為

目標函數(shù)

至此,我們一步步推導出了XGBoost目標函數(shù)的最終表達式,接下來就可以求解其極值

十一、求解目標函數(shù)極值

此時弱學習器—樹已經(jīng)構(gòu)造完成,即樹結(jié)構(gòu)q(x)確定,為了使得目標函數(shù)達到最小值,我們令對每個葉子的偏導數(shù)為0,即

每個葉子的偏導數(shù)為0

求解上述偏導數(shù),便可解出每個葉子的最優(yōu)權(quán)重w_{j}^{*}為:

每個葉子的最優(yōu)權(quán)重

將其帶入目標函數(shù),便得到模型的最小損失obj^{*}為:

模型的最小損失

至此,我們完成了XGBoost對目標函數(shù)的最優(yōu)化過程。且從本質(zhì)上講,這就是轉(zhuǎn)化為一個二次函數(shù)最優(yōu)化問題

十二、樹節(jié)點分裂算法

下面我們需要關(guān)心XGBoost的基學習器—樹到底長什么樣子?

顯然,一棵CART樹的生長過程,是由一個根節(jié)點開始二分裂,然后各子節(jié)點繼續(xù)二分裂直到分裂產(chǎn)生葉子節(jié)點停止

那么一個節(jié)點應(yīng)該怎么分裂?就成為了接下來我們要探討的關(guān)鍵

我們采取貪心算法來分裂樹節(jié)點

(1)從根節(jié)點開始對每個節(jié)點,都遍歷所有特征

(2)將所有特征的特征值進行排序,選取不同分位點作為候選點

(3)遍歷所有候選點,量化計算按照當前候選點分裂后產(chǎn)生的增益Gain

(4)選擇Gain最高的特征和候選點作為當前節(jié)點的最優(yōu)特征和最優(yōu)分割點

(5)直到產(chǎn)生葉子節(jié)點,則停止節(jié)點分裂

關(guān)于Gain增益的計算,我們使用當前樹的最小損失,用節(jié)點分裂前的損失值減去分裂后的損失值,作為按當前特征和候選點分裂的增益量化

Gain的計算

按照貪心算法構(gòu)建樹,有下面兩種構(gòu)建方案

方案一:當Gain為負值則停止分裂,樹生長完成,這樣做效率會高,但有可能會放棄一些更好的情況(預(yù)剪枝)

方案二:先讓樹生長到最大深度,再遞歸到Gain為負數(shù)的節(jié)點進行修剪(后剪枝)

這里我們選取方案二進行建樹剪枝

十三、XGBoost的算法步驟

(1)循環(huán)增加一顆CART樹 f_{t}(x_{i})

(2)用貪婪算法構(gòu)建樹,包含用損失函數(shù)一階和二階導數(shù)信息計算葉子的最優(yōu)權(quán)重w_{j}和節(jié)點分裂的最優(yōu)增益Gain

(3)用構(gòu)建好的樹迭代優(yōu)化函數(shù)空間:\hat{y}^{(t)}_{i} = \hat{y}^{(t-1)}_{i} + f_{t}(x_{i})

(4)重新更新計算損失函數(shù)的一階和二階導數(shù)

(5)重復第(1)步,直到生成K顆樹

從上面步驟可以看到,關(guān)鍵點是樹的構(gòu)造和剪枝

十四、案例演示

下面我們用原生python來實現(xiàn)myXGBoost模型(不考慮并行計算)

訓練樣本集為

訓練樣本集

首先構(gòu)造樹節(jié)點類和方法

樹節(jié)點類
計算樣本所在葉子權(quán)重
遞歸統(tǒng)計回歸樹葉子節(jié)點數(shù)量和葉子節(jié)點的父節(jié)點數(shù)量
剪枝操作

下面構(gòu)造樹模型類和方法

樹模型類
訓練CART樹
遞歸構(gòu)建回歸樹
選擇使得節(jié)點分裂最好的特征
計算葉節(jié)點的權(quán)重值
計算節(jié)點分裂后的增益
根據(jù)特征和分割點二分化

最后我們構(gòu)建XGBoost類和方法

XGBoost類
貪婪算法構(gòu)建樹
預(yù)測測試集類別

接下來我們定義損失函數(shù),這里用logistic函數(shù)

定義損失函數(shù)

logistic函數(shù)的一階和二階偏導數(shù)為:

logistic函數(shù)

最后比較我們自己寫的myXGBoost和官方封裝好的黑盒模型xgboost的預(yù)測結(jié)果差異,用準確度和ROC曲線下面積這兩個統(tǒng)計量來比較

和官方黑盒模型比較預(yù)測結(jié)果

可以看到自己寫的模型的預(yù)測結(jié)果,很逼近官方黑盒模型的預(yù)測效果

十五、XGBoost的優(yōu)點

最后我們可以總結(jié)出XGBoost有如下優(yōu)點:

(1)泰勒二階

XGBoost對Loss函數(shù)的數(shù)學處理用到了泰勒二階展開,除了提高了誤差精度,更將待優(yōu)化的Loss函數(shù)轉(zhuǎn)化為關(guān)于f_{t}(x)的二次函數(shù)最優(yōu)化問題

(2)支持自定義損失函數(shù)

XGBoost對Loss函數(shù)進行泰勒二階展開,即支持任意二階可導的函數(shù)作為模型的損失函數(shù)

(3)正則化

XGBoost的Loss加入了正則化項,包含了對復雜模型的懲罰,比如懲罰了葉子的節(jié)點數(shù)量和葉子權(quán)重的分數(shù)值大小,降低了模型的方差,防止模型過擬合

(4)特征列抽樣

XGBoost借鑒了隨機森林的做法,對每個訓練集特征進行隨機不放回式抽樣,降低了不同樹之間的相關(guān)性,從而降低了模型的方差,防止模型過擬合

(5)貪心構(gòu)建樹

采取貪心策略構(gòu)建最大深度的樹,在遞歸剪枝

(6)支持并行

樣本數(shù)據(jù)事先排好序并以block的形式存儲,利于并行計算

還可把XGBoost模型高度抽象為:

把樣本從根分配到葉子結(jié)點,本質(zhì)是一個排列組合,而不同的組合對應(yīng)不同的損失函數(shù),我們要優(yōu)化尋找的,就是使得損失函數(shù)達到最小值的那一種組合方案

案例代碼見:XGBoost算法思想

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容