GBDT梯度提升迴歸樹

原理:

提升樹利用加法模型與向前分步算法實現學習的優化過程。
(我覺得就是把提升樹算法裏的殘差用當前損失函數的負梯度在當前模型的值近似替代,擬合下一顆樹。)
爲啥用負梯度的值而不用提升樹裏的方法算殘差呢,是因爲當前損失函數是平方損失和指數損失函數時每步優化都很簡單,但是對於一般損失函數而言,每一步的優化並不是那麼容易,所以提出了梯度提升作爲殘差的近似值來擬合。基於殘差進行學習,那麼損失函數就會越來越小。
這樣是不是可以這樣認爲:提升樹是梯度提升迴歸樹的一個特例。

梯度提升算法

輸入:訓練數據集T = {(x1,y1),(x2,y2),…,(xN,yN)},
在這裏插入圖片描述
損失函數爲:L(y,f(x))
輸出爲:迴歸樹F(x)
(1).初始化
在這裏插入圖片描述(2).對m = 1,2,…,M
a:對 i = 1,2,…,N計算
在這裏插入圖片描述
b:對rmi擬合一個迴歸樹,得到第m棵樹的葉節點區域Rmj,j = 1,2,…,J.
c:對j = 1,2,…,J,計算
在這裏插入圖片描述
(3)得到迴歸樹
在這裏插入圖片描述
舉個栗子:
在這裏插入圖片描述
有上面四組數據每組有兩個特徵一個標籤。
首先構造f0取訓練樣本標籤值的均值
(1.1+1.3+1.7+1.8)/4 = 1.475
(意思就是找到一個值使得與四個真實的誤差最小,所以取得均值。)
算殘差,用梯度算(但這裏是損失函數用的是平方誤差,因此求完梯度後在乘個無關緊要的0.5,那麼就是真實值減預測值就是殘差。)
在這裏插入圖片描述
用殘差去擬合迴歸樹
在這裏插入圖片描述
同樣的方法計算ms,找到最小的,取相應的切分點進行劃分。
在這裏插入圖片描述
繼續算ms取最小,成爲切分點。最終得到第一棵迴歸樹。
這樣就可以進行更新:
前面算的
1.475+0.1(-0.375) = 1.4375
1.475+0.1(-0.175) = 1.4575
1.475+0.1(0.225) = 1.4975
1.475+0.1(0.325) = 1.5075
這裏的0.1是因爲爲了避免過擬合乘的超參,可以當作做了正則化。
以此作爲更新後的值與真實值做殘差這樣可以得到第二棵樹的值,可以在得出第二棵樹的殘差值,以此類推第三棵,第四棵,第五棵,第六棵。。。但這裏的第幾棵樹是根據一開始設的超參設置。
最後得到第五個數據的預測值爲:
1.475 +0.1(0.225+0.2025+0.1823+0.164+0.1476)=1.56714

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章