【機器學習】十五、Gradient boosting算法原理詳解

上篇文章分享了AdaBoost的算法原理,這篇文章將講解Boosting家族中的梯度提升算法(Gradient boosting)。建議看本文之前,先看一下AdaBoost算法的原理。碼字不易,喜歡請點贊!!!
在這裏插入圖片描述

1.梯度提升算法簡介

梯度提升(Gradient boosting),一般簡稱爲GBDT,是由大牛Freidman提出來的。上一節,分享了AdaBoost算法的原理,可以知道AdaBoost算法是前向分佈算法。同樣,GBDT也是前向分佈算法。但是AdaBoost每次是極小化損失函數,而GBDT每次通過擬合上一次的殘差來減小損失。並且AdaBoost的基學習器不限定,而GBDT的基學習器限定爲CART。

例如,比如一個人身高180,我們首先用170擬合,發現差了10cm,然後用8cm,去擬合,發現殘差爲2cm,然後我們用1.5cm去擬合,發現差了0.5cm,一直這樣擬合下去,殘差將會越來越小,知道達到我們的可接受範圍,或者擬合次數達到上限。

其關鍵是採用損失函數的負梯度在當前模型的值作爲迴歸問題提升樹算法中的殘差的近似值,來擬合一個迴歸樹。例如,訓練數據xi,yix_i,y_i在第m輪時,首先計算xix_ifm1(x)f_{m-1}(x)上的殘差rmir_{mi}來作爲第m輪擬合的數據(xi,rmi)(x_i,r_{mi}),其中
rmi=[L(y,f(xi))f(xi)]f(x)=fm1(x)r_{mi}=-[\frac{∂L(y,f(x_i))}{∂f(x_i)}]_{f(x)=f_{m-1}(x)}

2.GBDT迴歸

GBDT迴歸的算法流程如下:
輸入:訓練樣本集T={(x1,y1),(x2,y2),...,(xN,yN)}T= \{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\},其中,xiχRnx_i\in \chi \in R^nyiYRy_i\in Y \in R;損失函數L(y,f(x))L(y,f(x))
輸出:迴歸樹f(x)f(x)
(1)初始化
f0(x)=argminci=1NL(yi,c)f_0(x)=arg\min _c \sum_{i=1}^{N}L(y_i,c)
其中c爲基學習器葉子節點對應的輸出值。
(2)對m=1,2,…,M
(a)對i=1,2,...,Ni=1,2,...,N,計算殘差:
rmi=[L(y,f(xi))f(xi)]f(x)=fm1(x)r_{mi}=-[\frac{∂L(y,f(x_i))}{∂f(x_i)}]_{f(x)=f_{m-1}(x)}
(b)對rmir_{mi}擬合一個迴歸樹,得到第m棵樹的葉節點區域Rmj,j=1,2,...,JR_{mj},j=1,2,...,J
(c)對j=1,2,...,Jj=1,2,...,J,計算
cmj=argmincxiRmjL(yi,fm1(xi)+c)c_{mj}=arg\min_{c}\sum_{x_i \in R_{mj}}L(y_i,f_{m-1}(x_i)+c)
(d)更新
fm(x)=fm1(x)+j=1JcmjI(xRmj)f_m(x)=f_{m-1}(x)+\sum_{j=1}^{J}c_{mj}I(x \in R_{mj})
(3)得到迴歸樹
f(x)=fM(x)=m=1Mj=1JcmjI(xRmj)f(x)=f_M(x)=\sum_{m=1}^{M}\sum_{j=1}^{J}c_{mj}I(x \in R_{mj})

說明:
算法的第一步初始化,估計使損失函數極小化的常數值,它是一個只有根節點的樹;
2(a)中,使用損失函數的負梯度作爲殘差的估計。

3.GBDT分類

對於AdaBoost分類算法來說,我們將其基分類器限制爲分類樹,即成爲了提升樹分類算法,這時提升樹算法就是AdaBoost算法的一個特例了。

4.GBDT優缺點

GBDT是一個非常重要且效率和準確率高的算法,其主要優點有:

  1. 可以靈活處理各種類型的數據,包括連續值和離散值。
  2. 在相對少的調參時間情況下,預測的準確率也可以比較高。這個是相對SVM來說的。
  3. 使用一些健壯的損失函數,對異常值的魯棒性非常強。比如 Huber損失函數和Quantile損失函數。

GBDT算法的缺點:

  • 由於弱學習器之間存在依賴關係,難以並行訓練數據。不過可以通過自採樣的SGBT來達到部分並行。

參考文獻
李航 《統計學習方法》
https://blog.csdn.net/Asher117/article/details/103517786
https://www.cnblogs.com/pinard/p/6140514.html

發佈了192 篇原創文章 · 獲贊 362 · 訪問量 41萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章