概述
XGBoost是GBDT算法的一種變種驹饺,是一種常用的有監(jiān)督集成學(xué)習(xí)算法搏存;是一種
伸縮性強(qiáng)硝逢、便捷的可并行構(gòu)建模型的Gradient Boosting算法勃救。
注意:這里說可以并行構(gòu)建模型领曼,并不是說XGBoost建立的下一輪基模型不依賴于上一步的結(jié)果逗堵,而是指生成每個基模型的決策樹時泥从,能夠快速進(jìn)行并行運(yùn)算,即加速了單個模型的運(yùn)算昔瞧。
面試中 可能會問為什么XGBoost是一個并行結(jié)構(gòu)袁滥?我們可以反駁他說:XGBoost模型本身還是串行的憨奸,該模型還是基于梯度提升的理念進(jìn)行模型構(gòu)建的。只是在構(gòu)建每一個模型的時候可以進(jìn)行并行操作锚赤,相對提升一些運(yùn)行速度匹舞。
相關(guān)文獻(xiàn)
XGBoost官網(wǎng):http://xgboost.readthedocs.io;
XGBoost Github源碼位置:https://github.com/dmlc/xgboost线脚;
XGBoost支持開發(fā)語言:Python赐稽、R、Java浑侥、Scala姊舵、C++
在XGBoost中其實包含了兩套不同的API,雖然都在XGBoost包里寓落,兩種不同的API擁有兩種不同的傳輸方式括丁。一種是將數(shù)據(jù)轉(zhuǎn)化成XGBoost認(rèn)識的DMatrix。第二種兼容了Pthon的接受數(shù)據(jù)的方式:x_train零如,y_train躏将。
安裝
在Python中集成XGBoost,請參考我寫的《安裝 xgboost 庫》
回顧 CART考蕾、GBDT
05 決策樹 - 生成算法 ID3、C4.5会宪、CART
回顧 GBDT算法流程:最終預(yù)測結(jié)果=∑ 每棵樹上的預(yù)測值
小男孩在第1棵樹預(yù)測結(jié)果是2肖卧,第2棵樹預(yù)測結(jié)果是0.9,最終預(yù)測結(jié)果=f(1)+f(2) = 2+0.9掸鹅;
XGBoost模型-目標(biāo)函數(shù):
Boosting的模型多少會存在一些過擬合的問題塞帐,由于過擬合的存在,對最后的預(yù)測結(jié)果始終會存在一些錯誤巍沙,即使調(diào)參也調(diào)不好葵姥。所以在建立模型的時候會考慮加上懲罰項。
Obj(θ) 就是我想在第n+1輪構(gòu)建的目標(biāo)函數(shù)句携,在原有誤差 L(θ) 基礎(chǔ)上榔幸,增加一個懲罰項 Ω(θ) ; 以上是模型構(gòu)建的初步思路矮嫉,具體懲罰項加的是什么削咆?后續(xù)再考慮。
回顧 過擬合和欠擬合的概念:
06 回歸算法 - 損失函數(shù)蠢笋、過擬合欠擬合
GBDT目標(biāo)函數(shù) - y^
通過加入基模型拨齐,下圖引用自一篇陳天奇的論文,其中用f(x)表示基模型昨寞,我們之前講GDBT章節(jié)的時候用的符合是h(x)瞻惋;注意一下即可厦滤。
一步一步得預(yù)測,最后得到第t步的預(yù)測結(jié)果歼狼。
GBDT在每一輪迭代過程中馁害,使得預(yù)測值和損失值的誤差和達(dá)到最小,即完成了最優(yōu)模型的構(gòu)建蹂匹。 obj=∑ L(y,y^) 碘菜;
XGBoost的目標(biāo)函數(shù) - y^
XGBoost做了一個更新,從下圖可以看到限寞,左邊這部分提升算法的模型的步驟沒有變化忍啸。但提升算法中基模型f(x)的值怎么去計算發(fā)生了變化。
即最終的預(yù)測模型怎么得到發(fā)生了變化履植,最優(yōu)解y^對應(yīng)的損失函數(shù)obj在GBDT的損失函數(shù)obj基礎(chǔ)上计雌,我們增加的懲罰項來控制基模型的復(fù)雜度。
至此我們構(gòu)建了新的損失函數(shù)obj作為XGBoost的損失函數(shù):
q(x)是啥玫霎? 回顧上面小男孩凿滤、老爺爺?shù)哪菑垐D。
x是小男孩庶近、小姑娘翁脆、老爺爺。q(x)是落入當(dāng)前模型的葉子節(jié)點(diǎn)編號鼻种。
看下圖左邊這棵樹:q(小男孩) = 1反番,小男孩的觀測值落入了當(dāng)前葉子節(jié)點(diǎn)編號1。同理叉钥,得到其他的q(x)值罢缸。
對于左邊這棵樹,w1 是第一個葉子節(jié)點(diǎn)的預(yù)測值 = 小男孩投队;
ft(x) = wq(x)
最后分析針對第t棵樹的懲罰項:Ω(ft) = γTt + 0.5λ∑wj2 其中 j=(1,2,3...T)
Tt代表第t棵樹葉子節(jié)點(diǎn)個數(shù)枫疆,γ、λ即超參數(shù)敷鸦∠⑿ǎ∑wj2 代表第t棵樹葉子節(jié)點(diǎn)預(yù)測值的平方和。這個思想和構(gòu)建L2正則比較像轧膘,08 回歸算法 - 解決過擬合 - L2(Ridge)和L1(LASSO)正則钞螟。
根據(jù)上面的知識對XGBoost公式推導(dǎo)
第t次迭代后,模型的預(yù)測值= t-1次模型的預(yù)測值+第t棵樹的預(yù)測值谎碍。
目標(biāo)函數(shù)可以寫成:
回顧泰勒公式:
將誤差函數(shù)在yi^(t-1) 處進(jìn)行二階泰勒展開鳞滨。即對原損失函數(shù)進(jìn)行展開,yi是定值蟆淀,y^t是變化量拯啦,即泰勒公式中的Δx澡匪。
然后將yit展開: yit = L( y^ it-1 + ft(x))