1. 程式人生 > >機器學習 - 提升樹(下)- XGBoost 以及與 GBDT 的比較

機器學習 - 提升樹(下)- XGBoost 以及與 GBDT 的比較

機器學習 - 提升樹(下)- XGBoost 以及與 GBDT 的比較

本文介紹 Kaggle 等資料競賽的大殺器:XGBoost !

  • XGBoost(eXtreme Gradient Boost)

    1. 原理

      XGBoost 的核心原理與之前所講的提升樹是類似的,都是通過學習殘差近似來訓練模型。不同的是 XGBoost 同時使用了一階導與二階導。而且XGBoost 加入了正則項,從某種程度上可以進行預剪枝,所以約束了模型的複雜度。說了這麼多,“關鍵看療效”,但 XGBoost 真正工程應用上也是非常的棒,陳天奇前輩可謂“華人之光”啊!

      對於加法模型與前向分步演算法的過程是一樣的,那麼我們從損失函式來看 XGBoost 的靈性:

      我們想構建損失函式,並且想得到具有正則項的結構損失函式,那麼我就可以先抽象化的定義結構損失函式目標:

      L m =

      i = 1 n l (
      y i , y i ( m 1 ) + f m ( x i ) ) + Ω f m L^{m}=\sum_{i=1}^{n}l(y_i, y_i^{(m-1)}+f_m(x_i))+Ωf_m

      其中 l ( y i , y i ( m + 1 ) + f m ( x i ) ) l(y_i, y_i^{(m+1)}+f_m(x_i)) 為經驗損失函式, y i y_i 為真實值, y i ( m 1 ) y_i^{(m-1)} 為第 m-1 次迭代後模型的預測值, Ω f m Ωf_m 為正則項。

      那麼我們該如何具體地表示殘差以及正則項呢,XGBoost 選擇使用 泰勒公式的二階展開

      泰勒公式的二階展開式為: f ( x + x ) = f ( x ) + f ( x ) x + 1 2 f ( x ) x 2 f(x+\triangle x)=f(x) + f'(x)\triangle x+\frac{1}{2}f''(x)\triangle x^2

      根據此,我們將經驗損失函式 l ( y i , y i ( m + 1 ) + f m ( x i ) ) l(y_i, y_i^{(m+1)}+f_m(x_i)) 進行泰勒公式的二階展開:


      我們定義:

      g i = l ( y i , y i ( m 1 ) ) y i m 1 h i = 2 l ( y i , y i ( m 1 ) ) ( y i m 1 ) 2 x = f m ( x i ) 一階導:g_i=\frac{\partial l(y_i, y_i^{(m-1)})}{\partial y_i^{m-1}},二階導:h_i=\frac{\partial^2 l(y_i, y_i^{(m-1)})}{\partial (y_i^{m-1})^2},且恰好 \triangle x=f_m(x_i)

      所以:

      l ( y i , y i ( m 1 ) ) = i = 1 n [ l ( y i , y i ( m 1 ) + f m ( x ) ) + g i f m ( x i ) + 1 2 h i f m 2 ( x i ) ] l(y_i, y_i^{(m-1)})=\sum_{i=1}^{n}[l(y_i, y_i^{(m-1)}+f_m(x))+g_if_m(x_i)+\frac{1}{2}h_if_m^2(x_i)]