樹演算法系列之三 GBDT

2021-10-07 07:39:37 字數 2914 閱讀 1265

gbdt與提公升樹有非常密切的關係。為方便閱讀本文,可以先參考提公升樹一文。

在提公升樹一文中,我們提到每一輪迭代,都是去擬合上一輪的"殘差",如果用乙個簡單的公式表示就是yi−

fm−1

(x

)y_i - f_(x)

yi​−fm

−1​(

x)gbdt與上面普通提公升樹的不同在於,其擬合的不是殘差,而是梯度下降的方向。也就是將殘差的計算替換為損失函式梯度的計算:

r mi

=−[∂

l(yi

,f(x

i))∂

f(xi

)]f(

x)=f

m−1(

x)

\large } = -\left[\frac \right]_(x)}

rmi​=−

[∂f(

xi​)

∂l(y

i​,f

(xi​

))​]

f(x)

=fm−

1​(x

)​如果損失函式為mse, 損失函式為l(y

i,f(

xi))

=12(

yi−f

(xi)

)2

l(y_i,f(x_i)) = \frac(y_i - f(x_i))^2

l(yi​,

f(xi

​))=

21​(

yi​−

f(xi

​))2

,此時模型的負梯度方向即為殘差方向rmi

=yi−

f(xi

)r_ = y_i - f(x_i)

rmi​=y

i​−f

(xi​

)。如果將gbdt名字拆開比較好理解,包含了三個關鍵的部分

1.g(gradient) 梯度(殘差)

2.b(boosting) 提公升方法,即為加法模型與前向分布演算法

3.dt(decision tree) cart回歸樹,弱學習器。

所以將gbdt演算法的流程做個總結如下:

一、初始化

f 0(

x)=a

rgmi

nc∑i

=1nl

(yi,

c)

f_0(x) = argmin_c \sum_^n l(y_i, c)

f0​(x)

=arg

minc

​i=1

∑n​l

(yi​

,c)使損失函式最小,其只是乙個根節點的樹。

二、對m=1, 2, …m

2.1 計算梯度(殘差)

r mi

=−[∂

l(yi

,f(x

i))∂

f(xi

)]f(

x)=f

m−1(

x)

\large } = -\left[\frac \right]_(x)}

rmi​=−

[∂f(

xi​)

∂l(y

i​,f

(xi​

))​]

f(x)

=fm−

1​(x

)​即將損失函式的負梯度在當前模型的值,將它作為殘差的估計(如果是mse,就是通常意義所說的殘差。如果是其他損失函式,則為殘差的近似)

2.2 得到乙個新的回歸樹t(x

;θm)

t(x;\theta_m)

t(x;θm

​)。2.3 更新fm(

x)=f

m−1(

x)+t

(x;θ

m)

f_m(x) = f_(x) + t(x; \theta_m)

fm​(x)

=fm−

1​(x

)+t(

x;θm

​)三、得到最終的模型

f m(

x)=∑

m=1m

t(x;

θm

)f_m(x) = \sum_^m t(x; \theta_m)

fm​(x)

=m=1

∑m​t

(x;θ

m​)提公升樹每一次所謂的提公升過程,都是通過上次的**結果與真實值的差值作為新的訓練資料進行訓練。因為cart樹預設的損失函式為mse,所以直接使用殘差進行計算。

而gbdt針對的是更為一般的損失函式,所以用負梯度近似代替殘差,將上次**結果代入梯度中來獲取本輪的訓練資料。

本質上是在生成新的訓練資料的時候採用了不同的方式。

gbdt每次的計算是為了減小上一次的殘差(residual)。而為了消除殘差,可以在殘差減少的梯度(gradient)方向上建立乙個新的模型。因此在gradient boosting中,每個新的模型的建立是為了使得之前模型的殘差往梯度方向減少。而傳統boosting的方法是對正確,錯誤樣本進行不同程度加權有比較大的區別。

西瓜書(周志華老師出品的機器學習)中對此有解釋:boosting主要關注降低偏差,因此boosting能基於泛化效能相當弱的學習器構建出很強的整合;bagging主要關注降低方差,因此它在不剪枝的決策樹、神經網路等學習器上效用更為明顯。

優點1.可以靈活處理各種型別資料,包括連續值與離散值。

2.非線性能力比較強,表達能力強,不需要做複雜的特徵工程和特徵變換。

3.在相對較少調參的情況下,可以達到比較高的精度。

4.可解釋性強,可以自動做特徵重要性排序。因此在深度學習火熱以前,常作為`發現特徵組合『的有效思路。

5.使用一些健壯的損失函式,對異常值的魯棒性較高。比如huber loss。

缺點1.boost訓練是序列過程,不好並行化。

2.計算複雜度高,不太適合高維稀疏特徵,如果feature個數太多,每一棵回歸樹都要耗費大量時間

演算法系列之三 單鏈表反轉

問題 實現單鏈表反轉 答案 鍊錶準備 class node public int getdata public void setdata int data public node getnext public void setnext node next public static void mai...

演算法系列之三 歸併排序

歸併排序是分治演算法的另乙個典型的體現。與快速排序一樣,它依賴資料之間的比較進行排序。其缺點是需要額外的空間來輔助排序的過程。這使得歸併排序的實用性大大降低,因為在日常的應用中,使用歸併排序的場景都可以使用快速排序來替代。但是它的優點是可以按照預期來切分陣列,每一次都可以對半分,這樣不會出現因為分割...

白話經典演算法系列之三 希爾排序的實現

希爾排序的實質就是分組插入排序,該方法又稱縮小增量排序,因dl shell於1959年提出而得名。該方法的基本思想是 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序 增量足夠小 時,再對全體元素進行...