从回归树到GBDT
從回歸樹到GBDT
時間:2015-03-17 21:58:20 ???? 閱讀:3206 ???? 評論:0 ???? 收藏:0 ???? [點我收藏+]標簽:class???style???log???src???java???http???si???it???數據???
GBDT可以看做是由多棵回歸樹組成的,所以要理解GBDT,就要先理解回歸樹。回歸樹也是為了做預測,只是將特征空間劃分成了若干個區域,在每個區域里進行預測,舉個簡單例子。
圖中的數據有兩個特征:x1、x2,根據這兩個特征可以很容易地把數據分為左下角、左上角、右上角、右下角四個區域,這四個區域各有一個中心點(5,5)、(5,10)、(10,10)、(10,5),在對新數據做預測時,該數據落在哪個區域,就把該區域的中心點作為它的預測值。那么如何判斷新數據將落在哪個區域呢?這時候“樹”就派上用場了。樹的根節點以x1做劃分,小于8的劃分到左子樹,大于8的劃分到右子樹,在劃分好的左右子樹上再以x2做進一步的劃分,小于8的劃分為左葉子,大于8的劃分為右葉子,如下圖所示:
可以看到,回歸樹也相當于一個映射,一個函數,即根據輸入x1、x2來求得輸出 y,表達式如下:
其中,Rj就是一個個的區域,如第一張圖中的“左下角”、“左上角”等,如果x屬于Rj,那么它的預測值就是bj。I()為指示函數,當括號內的式子成立時返回1,否則返回0。
GBDT
在很多情況下,一棵回歸樹的預測是不太準確的,我們可以嘗試采用多棵回歸樹去預測,第 m 棵回歸樹可以表示為如下數學形式:
假設共有M棵回歸樹,那么最終的預測結果為:
y=FM(x)=∑m=1Mhm(x)
表達成遞歸形式則為:
y=FM?1(x)+hM(x)
最完美的GBDT(就訓練集而言,不考慮測試集)就是預測值 y 與目標值 t 相等,所以我們建立模型的目標就是令y=t,即:
t=FM?1(x)+hM(x)
GBDT也是從第一棵回歸樹開始的,不管效果怎么樣,先建第一棵回歸樹,有了第一棵樹,就可以通過上面的遞歸表達式建立第二棵,直到第M棵樹,那么我們先看一下第二棵樹怎么建立。對上面的遞歸式做個變形,即:
hM(x)=t?FM?1(x)
注意到hM(x)就是我們要建立的第2 (M=2)棵樹,已有的是第一棵樹,第一棵樹一經建成就不變了,相當于一個已知的函數,那么(t?FM?1(x))實際上就是我們在建第 M 棵樹時想要得到的預測值。所以在建第二棵樹時,我們將目標值 t 與第一棵樹的預測值的差作為新的目標值,同樣,在建第三顆樹時,我們將目標值 t 與前兩棵樹的預測值的差作為新的目標值,直到第 M 棵樹。(t?FM?1(x))就是所謂的殘差,這就是從殘差的角度來理解GBDT。
注意到,GBDT的建樹過程不是并行的,而是串行的,所以速度較慢,但所有的樹一旦建好,用它來預測時是并行的,最終的預測值就是所有樹的預測值之和。
拓展
GBDT實際上是由兩部分組成:GB 和 DT,DT 意味著每個basic learner (weaker learner)是“樹”的形式,而GB則是建樹過程中依據的準則。DT 可以不變,而 GB 有多種形式,上述的殘差只是其中的一種形式。注意到損失函數可以表示為:
該損失函數關于F(x)的導數(梯度)為:
dε/dF(x)=?(t?F(x))
該損失函數在FM?1(x)處的導數(梯度)為:
dε/dF(x)|FM?1(x)=?(t?FM?1(x))
所以在建立第 M 棵樹時,新的目標值正好就是損失函數在 FM?1(x) 處的負梯度。眾所周知,損失函數可以有多種形式,所以不同的損失函數就可以對應到不同的變種。
舉例
本例僅用于說明大意,實際結果肯能不同,比如數據有兩個feature:x1、x2,對應的目標值為 t=sin(x1)+sin(x2),如下圖所示:
根據feature1可以建立一個回歸樹,預測結果如下:
這兩張圖的差值用于建立第二棵回歸樹,這次選擇了feature2,預測結果如下:
上述兩棵樹的和就是正確的預測值。
總結
- 上一篇: 求解LambdaMART的疑惑?
- 下一篇: C4.5决策树 此博文包含图片(201