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