GBDT
1.GBDT定義
說(shuō)到Xgboost,不得不先從GBDT(Gradient Boosting Decision Tree)說(shuō)起。因?yàn)閤gboost本質(zhì)上還是一個(gè)GBDT,但是力爭(zhēng)把速度和效率發(fā)揮到極致,所以叫X (Extreme) GBoosted。包括前面說(shuō)過(guò),兩者都是boosting方法。
GBDT的原理很簡(jiǎn)單,就是所有弱分類器的結(jié)果相加等于預(yù)測(cè)值,然后下一個(gè)弱分類器去擬合誤差函數(shù)對(duì)預(yù)測(cè)值的梯度/殘差(這個(gè)梯度/殘差就是預(yù)測(cè)值與真實(shí)值之間的誤差)。當(dāng)然了,它里面的弱分類器的表現(xiàn)形式就是各棵樹(shù)。如圖所示:Y = Y1 + Y2 + Y3。
舉一個(gè)非常簡(jiǎn)單的例子,比如我今年30歲了,但計(jì)算機(jī)或者模型GBDT并不知道我今年多少歲,那GBDT咋辦呢?
它會(huì)在第一個(gè)弱分類器(或第一棵樹(shù)中)隨便用一個(gè)年齡比如20歲來(lái)擬合,然后發(fā)現(xiàn)誤差有10歲;
接下來(lái)在第二棵樹(shù)中,用6歲去擬合剩下的損失,發(fā)現(xiàn)差距還有4歲;
接著在第三棵樹(shù)中用3歲擬合剩下的差距,發(fā)現(xiàn)差距只有1歲了;
最后在第四課樹(shù)中用1歲擬合剩下的殘差,完美。
最終,四棵樹(shù)的結(jié)論加起來(lái),就是真實(shí)年齡30歲。實(shí)際工程中,gbdt是計(jì)算負(fù)梯度,用負(fù)梯度近似殘差。
注意,為何gbdt可以用負(fù)梯度近似殘差呢?
回歸任務(wù)下,GBDT 在每一輪的迭代時(shí)對(duì)每個(gè)樣本都會(huì)有一個(gè)預(yù)測(cè)值,此時(shí)的損失函數(shù)為均方差損失函數(shù),
那此時(shí)的負(fù)梯度是這樣計(jì)算的
所以,當(dāng)損失函數(shù)選用均方損失函數(shù)時(shí),每一次擬合的值就是(真實(shí)值 - 當(dāng)前模型預(yù)測(cè)的值),即殘差。此時(shí)的變量是,即“當(dāng)前預(yù)測(cè)模型的值”,也就是對(duì)它求負(fù)梯度。
另外,這里還得再啰嗦一下,上面預(yù)測(cè)年齡的第一個(gè)步驟中的“隨便”二字看似隨便,其實(shí)深入思考一下一點(diǎn)都不隨便,你會(huì)發(fā)現(xiàn)大部分做預(yù)測(cè)的模型,基本都是這么個(gè)常規(guī)套路,先隨便用一個(gè)值去預(yù)測(cè),然后對(duì)比預(yù)測(cè)值與真實(shí)值的差距,最后不斷調(diào)整 縮小差距。所以會(huì)出來(lái)一系列目標(biāo)函數(shù):確定目標(biāo),和損失函數(shù):縮小誤差。
再進(jìn)一步思考,你會(huì)發(fā)現(xiàn)這完全符合人類做預(yù)測(cè)的普遍常識(shí)、普遍做法,當(dāng)對(duì)一個(gè)事物不太了解時(shí),一開(kāi)始也是根據(jù)經(jīng)驗(yàn)嘗試、初探,直到逼近某種意義上的接近或者完全吻合。
還是年齡預(yù)測(cè)的例子。
簡(jiǎn)單起見(jiàn),假定訓(xùn)練集只有4個(gè)人:A,B,C,D,他們的年齡分別是14,16,24,26。其中A、B分別是高一和高三學(xué)生;C,D分別是應(yīng)屆畢業(yè)生和工作兩年的員工。
所以,現(xiàn)在的問(wèn)題就是我們要預(yù)測(cè)這4個(gè)人的年齡,咋下手?很簡(jiǎn)單,先隨便用一個(gè)年齡比如20歲去擬合他們,然后根據(jù)實(shí)際情況不斷調(diào)整。
如果是用一棵傳統(tǒng)的回歸決策樹(shù)來(lái)訓(xùn)練,會(huì)得到如下圖所示結(jié)果:
現(xiàn)在我們使用GBDT來(lái)做這件事,由于數(shù)據(jù)太少,我們限定葉子節(jié)點(diǎn)最多有兩個(gè),即每棵樹(shù)都只有一個(gè)分枝,并且限定只學(xué)兩棵樹(shù)。
我們會(huì)得到如下圖所示結(jié)果:
在第一棵樹(shù)分枝和圖1一樣,由于A,B年齡較為相近,C,D年齡較為相近,他們被分為左右兩撥,每撥用平均年齡作為預(yù)測(cè)值。
此時(shí)計(jì)算殘差(殘差的意思就是:A的實(shí)際值 - A的預(yù)測(cè)值 = A的殘差),所以A的殘差就是實(shí)際值14 - 預(yù)測(cè)值15 = 殘差值-1。
注意,A的預(yù)測(cè)值是指前面所有樹(shù)累加的和,這里前面只有一棵樹(shù)所以直接是15,如果還有樹(shù)則需要都累加起來(lái)作為A的預(yù)測(cè)值。
殘差在數(shù)理統(tǒng)計(jì)中是指實(shí)際觀察值與估計(jì)值(擬合值)之間的差。“殘差”蘊(yùn)含了有關(guān)模型基本假設(shè)的重要信息。如果回歸模型正確的話, 我們可以將殘差看作誤差的觀測(cè)值。
進(jìn)而得到A,B,C,D的殘差分別為-1,1,-1,1。
然后拿它們的殘差-1、1、-1、1代替A B C D的原值,到第二棵樹(shù)去學(xué)習(xí),第二棵樹(shù)只有兩個(gè)值1和-1,直接分成兩個(gè)節(jié)點(diǎn),即A和C分在左邊,B和D分在右邊,經(jīng)過(guò)計(jì)算(比如A,實(shí)際值-1 - 預(yù)測(cè)值-1 = 殘差0,比如C,實(shí)際值-1 - 預(yù)測(cè)值-1 = 0),此時(shí)所有人的殘差都是0。
殘差值都為0,相當(dāng)于第二棵樹(shù)的預(yù)測(cè)值和它們的實(shí)際值相等,則只需把第二棵樹(shù)的結(jié)論累加到第一棵樹(shù)上就能得到真實(shí)年齡了,即每個(gè)人都得到了真實(shí)的預(yù)測(cè)值。
換句話說(shuō),現(xiàn)在A,B,C,D的預(yù)測(cè)值都和真實(shí)年齡一致了。Perfect!
A: 14歲高一學(xué)生,購(gòu)物較少,經(jīng)常問(wèn)學(xué)長(zhǎng)問(wèn)題,預(yù)測(cè)年齡A = 15 – 1 = 14 (兩棵樹(shù)的預(yù)測(cè)值相加)
B: 16歲高三學(xué)生,購(gòu)物較少,經(jīng)常被學(xué)弟問(wèn)問(wèn)題,預(yù)測(cè)年齡B = 15 + 1 = 16
C: 24歲應(yīng)屆畢業(yè)生,購(gòu)物較多,經(jīng)常問(wèn)師兄問(wèn)題,預(yù)測(cè)年齡C = 25 – 1 = 24
D: 26歲工作兩年員工,購(gòu)物較多,經(jīng)常被師弟問(wèn)問(wèn)題,預(yù)測(cè)年齡D = 25 + 1 = 26
所以,GBDT需要將多棵樹(shù)的得分累加得到最終的預(yù)測(cè)得分,且每一次迭代,都在現(xiàn)有樹(shù)的基礎(chǔ)上,增加一棵樹(shù)去擬合前面樹(shù)的預(yù)測(cè)結(jié)果與真實(shí)值之間的殘差。
參考文章:https://blog.csdn.net/v_JULY_v/article/details/81410574
總結(jié)
- 上一篇: 宝可梦剑盾在哪捕捉小木灵 小木灵捕捉位置
- 下一篇: auto js的安装及使用