1. 程式人生 > >5. 整合學習(Ensemble Learning)GBDT

5. 整合學習(Ensemble Learning)GBDT

1. 前言

如果讀了我之前的幾篇整合學習的博文,相信讀者們已經都對整合學習大部分知識很有了詳細的學習。今天我們再來一個提升,就是我們的集大成者GBDT。GBDT在我們的Kaggle的比賽中基本獲得了霸主地位,大部分的問題GBDT都能獲得異常好的成績。

2. GBDT原理

GBDT的中文名叫梯度提升樹,GBDT也是整合學習Boosting家族的成員,但是卻和傳統的Adaboost有很大的不同。回顧下Adaboost,我們是利用前一輪迭代弱學習器的誤差率來更新訓練集的權重,這樣一輪輪的迭代下去。GBDT也是迭代,使用了前向分佈演算法,但是弱學習器限定了只能使用CART迴歸樹模型,同時迭代思路和Adaboost也有所不同。

在GBDT的迭代中,假設我們前一輪迭代得到的強學習器是\(f_{t-1}(x)\), 損失函式是\(L(y,f_{t-1}(x))\),我們本輪迭代的目標是找到一個CART迴歸樹模型的弱學習器\(h_t(x)\),讓本輪的損失函式\(L(y,f_t(x)=L(y,f_{t-1}(x)+h_t(x))\)最小。也就是說,本輪迭代找到決策樹,要讓樣本的損失儘量變得更小。即梯度提升樹是用CART樹去擬合前一個弱模型的損失函式的殘差,使得本輪的損失更小。

3. 提升樹

迴歸問題提升樹的前向分步演算法:

假設第\(m\)個模型是\(f_m(x)\),則有以下公式
\[ f_0(x)=0 \]
\[ f_m(x)=f_{m-1}(x)+T(x,\theta_m) \]


\[ f_M(x)=\sum_{m=1}^MT(x,\theta_m) \]
有了模型函式後,我們就得到了損失函式:
\[ L(y,f_m(x))=L(y,f_{m-1}(x)+T(x,\theta_m))=L(r_{m-1},T(x,\theta_m)) \]
其中的\(T(x,\theta)\)需要用CART樹去擬合,而\(r_{m-1}\)是上一個學習器的損失的殘差。
\[ r_{m-1}=L(y,f_{m-1}(x)) \]
我們舉個例子,假設損失函式是平方損失函式:
\[ L(y,f(x))=(y-f(x))^2 \]
則第\(m\)個模型的損失函式
\[ L(y,f_m(x))=L(y,f_{m-1}(x)+T(x,\theta_m))=L(r_{m-1},T(x,\theta_m))=(r_{m-1}-T(x,\theta_m))^2 \]

4. 梯度提升樹

前面的提升樹利用加法模型和前向演算法進行,當損失函式是平方損失或者指數損失的時候,很好推算,但是對於一般的損失函式,就比較難處理。這時候我們可以利用最速下降法來近似,關鍵是利用了損失函式的負梯度在當前模型的值

\[ r_{ti} \approx -\bigg[\frac{\partial L(y_i, f(x_i))}{\partial f(x_i)}\bigg]_{f(x) = f_{t-1}\;(x)} \]

輸入:是訓練集樣本\(T={(x_1,y_1),(x_2,y_2),...(x_N,y_N)}\), 最大迭代次數\(M\), 損失函式\(L\)

輸出:強學習器\(f_M(x)\)

  1. 初始化弱學習器

\[ f_0(x) = arg min_{c}\sum\limits_{i=1}^{N}L(y_i, c) \]

  1. 對迭代輪數\(m=1,2,...M\)有:
    1. 對樣本\(i=1,2,...,N\),計算負梯度\(r_{mi} \approx -\bigg[\frac{\partial L(y_i, f(x_i))}{\partial f(x_i)}\bigg]_{f(x) = f_{t-1}\;(x)}\)
    2. 利用\((x_i,r_{mi})(i=1,2,..N)\), 擬合一顆CART迴歸樹,得到第t顆迴歸樹,其對應的葉子節點區域為\(Rmj,(j=1,2,...,J)\)。其中\(J\)為迴歸樹t的葉子節點的個數。
    3. 對葉子區域\(j=1,2,...,J\)計算最佳擬合值\(c_{mj} = arg min_{c}\sum\limits_{x_i \in R_{mj}} L(y_i,f_{m-1}(x_i) +c)\)
    4. 更新強學習器\(f_{m}(x) = f_{m-1}(x) + \sum\limits_{j=1}^{J}c_{mj}I(x \in R_{mj})\)
  2. 得到強學習器f(x)的表示式\(f(x) = f_M(x) =f_0(x) + \sum\limits_{m=1}^{M}\sum\limits_{j=1}^{J}c_{mj}I(x \in R_{tj})\)

5. GBDT的正則化

  1. 和Adaboost類似的正則化項,即步長(learning rate)。
  2. 正則化的方式是通過子取樣比例(subsample)。
  3. 對於弱學習器即CART迴歸樹進行正則化剪枝。

6. 總結

GBDT也是需要正則化的過程,
最後總結下GBDT的優缺點。

GBDT主要的優點有:

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

GBDT的主要缺點有:

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

(歡迎轉載,轉載請註明出處。歡迎溝通交流: [email protected]