xgboost算法_手把手机器学习实战系列:xgboost 算法
算法簡介
xgboost算法是一種boosting的集成學(xué)習(xí)算法,是將多個弱學(xué)習(xí)模型進(jìn)行組合,從而獲得更好的效果,使得組合后的模型有更強(qiáng)的泛化能力, 它通常是由基本的回歸樹(CART)樹模型組成
如圖所示:通過輸入用戶的年齡,性別來判斷用戶喜歡玩游戲的得分值
上面是一個CART的實(shí)例,它是將輸入的樣本根據(jù)輸入的屬性分配到不同的葉子節(jié)點(diǎn)中,每個葉子節(jié)點(diǎn)中都會得到一個預(yù)測分值
由于單個CART模型過于簡單,常常會出現(xiàn)過擬合的現(xiàn)象,所以可以用多棵樹進(jìn)行預(yù)測
假設(shè)現(xiàn)在有K個樹,那么預(yù)測模型表示為
fk(xi)就是某個葉子節(jié)點(diǎn)的預(yù)測值,當(dāng)建立了K-1棵樹后,第K顆樹的對應(yīng)的葉子節(jié)點(diǎn)的預(yù)測值如何確定?
通常的方法是用葉子節(jié)點(diǎn)內(nèi)的樣本的標(biāo)簽值的均值,能不能通過目標(biāo)函數(shù)進(jìn)行優(yōu)化得到呢?
目標(biāo)函數(shù)
在XGboost算法中,目標(biāo)函數(shù)由損失函數(shù)和正則項(xiàng)組成,如下式所示:
損失函數(shù)表示
(1)平方誤差函數(shù)
(2)如果不是平方誤差函數(shù),可以通過泰勒公式進(jìn)行展開
正則項(xiàng)表示
由公式發(fā)現(xiàn): 如果要求目標(biāo)函數(shù)預(yù)測誤差盡量小,需要葉子節(jié)點(diǎn)盡量少,葉子節(jié)點(diǎn)數(shù)值盡量不極端(要保持大致相同)
舉例說明: 如果樣本的標(biāo)簽數(shù)值是4
如果第一個回歸樹預(yù)測為3,另外一顆預(yù)測為1 另外一組回歸樹,一顆預(yù)測為2,另一顆預(yù)測為2, 此時選擇的是后一種,因?yàn)榈谝环N第一課樹預(yù)測為3,太接近真實(shí)值了,有些過擬合了
模型學(xué)習(xí)
在XGboost算法中,目標(biāo)函數(shù)由損失函數(shù)和正則項(xiàng)組成,如下式所示:
現(xiàn)在需要通過數(shù)據(jù)進(jìn)行學(xué)習(xí)出這個模型,那么首先需要確定我們優(yōu)化的參數(shù)是什么呢?
優(yōu)化每個葉子節(jié)點(diǎn)的得分值,即f(xi)
XGboost是以CART回歸樹作為基本分類器,當(dāng)給定訓(xùn)練數(shù)據(jù)后,單個樹的結(jié)構(gòu)基本確定了(如葉子節(jié)點(diǎn)個數(shù),樹深度)
但是Xgboost并不是將這幾顆回歸樹簡單的相組合,而是利用加法模型,它將模型上次的預(yù)測(t-1顆樹組成的模型)產(chǎn)生的誤差作為參數(shù)進(jìn)行下一顆樹的參考,如下圖就為加法模型案例,它將模型預(yù)測值與實(shí)際值殘差作為下一顆樹的輸入數(shù)據(jù)
模型的加法策略
初始化,模型沒有樹,預(yù)測結(jié)果為0,往模型中加入第2顆樹,往模型中加入第N顆樹
目標(biāo)函數(shù)的表示:
泰勒公式:
樹結(jié)構(gòu)分?jǐn)?shù)
在建立好樹結(jié)構(gòu)后,每個樣本肯定會落到某個葉子節(jié)點(diǎn)中,
定義:
落在葉子序號為j的所有的樣本,i 代表的是樣本的序號
目標(biāo)函數(shù)變?yōu)?
對目標(biāo)函數(shù)求導(dǎo),令導(dǎo)數(shù)為0, 可得:
Obj表示在某個確定的樹結(jié)構(gòu)下的結(jié)構(gòu)分?jǐn)?shù)(structure score), 類似于基尼系數(shù),信息增益等,分?jǐn)?shù)越小,樹結(jié)構(gòu)越好
樹結(jié)構(gòu)學(xué)習(xí)
貪心算法:
每一次嘗試去對已有的葉子加入一個分割。對于一個具體的分割方案,增益計算如下
對于每次樹的擴(kuò)展,需要枚舉所有可能的分割方案,如何高效地枚舉所有的分割呢?
首先根據(jù)需要劃分的那列特征值排序,然后從左到右的掃描就可以枚舉出所有分割的梯度和
算法如下:
過擬合問題
1.Shrinkage
在每次迭代中對樹的每個葉子節(jié)點(diǎn)中的分?jǐn)?shù)乘上一個縮減權(quán)重w, 可以使得每一顆樹的影響力不會太大,防止已經(jīng)預(yù)測的非常正確了,使得后面的優(yōu)化沒有了必要,從而產(chǎn)生了過擬合
舉例: 假如第一顆樹的預(yù)測值是3.8,而實(shí)際的label是4, 那么它的參數(shù)是0.2, 意味著第二顆樹只是學(xué)習(xí)0.2,沒什么學(xué)習(xí)內(nèi)容了,為了減少過擬合,對葉子節(jié)點(diǎn)預(yù)測值乘以一個權(quán)重0.3,那么誤差是4 - 3.8*0.3=2.86,類似梯度下降學(xué)習(xí)率
2.Column Subsampling:
類似于隨機(jī)森林中的選取部分特征進(jìn)行建樹
(1)按層隨機(jī)采樣在,對同一層內(nèi)每個結(jié)點(diǎn)分裂之前,先隨機(jī)選擇一部分特征,然后只需要遍歷這部分的特征,來確定最優(yōu)的分割點(diǎn), 對應(yīng)參數(shù) colsample_bylevel,選擇0.5-1
(2)隨機(jī)選擇特征,則建樹前隨機(jī)選擇一部分特征然后分裂就只遍歷這些特征。一般情況下前者效果更好
總結(jié)
以上是生活随笔為你收集整理的xgboost算法_手把手机器学习实战系列:xgboost 算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一家反欺诈公司的面试经历——3.hibe
- 下一篇: 搜索练习2(P6207 [USACO06