機器學習相關知識整理系列之三:Boosting算法原理,GBDT&XGBoost

1. Boosting算法基本思路

提高方法思路:對於一個複雜的問題,將多個專家的判斷進行適當的綜合所得出的判斷,要比任何一個專家單獨判斷好。每一步產生一個弱預測模型(如決策樹),並加權累加到總模型中,能夠用於迴歸和分類問題;若是每一步的弱預測模型生成都是依據損失函數的梯度方向,則稱之爲梯度提高(Gradient boosting)。算法

梯度提高算法首先給定一個目標損失函數,它的定義域是全部可行的弱函數集合(基函數);提高算法經過迭代的選擇一個負梯度方向上的基函數來逐漸逼近局部極小值。這種在函數域的梯度提高觀點對機器學習的不少領域有深入影響。app

提高的理論意義:若是一個問題存在弱分類器,則能夠經過提高的辦法獲得強分類器。機器學習

2. Boosting算法推導

給定輸入向量\(X\)和輸出變量\(Y\)組成的若干訓練樣本,\((x_1,y_1),(x_2,y_2),...,(x_n,y_n)\),目標是找到近似函數\(\hat F(\vec x)\),使得損失函數\(L(y,F(\vec x))\)的損失值最小。函數

\(L(y,F(\vec x))\)的典型定義爲:\[L(y,F(\vec x)) = \frac{1}{2}(y-F(\vec x))^2\]
\[L(y,F(\vec x)) = | y-F(\vec x) |\]學習

假定最優函數爲\(F^*(\vec x)\),即:\[F^*(\vec x) = \arg\min_F E_{(x,y)}[L(y,F(\vec x))]\]
假定\(F(\vec x)\)是一族基函數\(f_i(\vec x)\)的加權和:
\[F(\vec x) = \sum_{i=1}^{M}\gamma _if_i(\vec x) + C\]
梯度提高方法尋找最優解\(F(\vec x)\),使得損失函數在訓練集上的指望最小。
首先,給定常函數\(F_0(\vec x)\)
\[F_0(\vec x) = \arg\min_c \sum_{i=1}^nL(y_i,c)\]spa

以貪心思路擴展獲得\(F_m(\vec x)\)
\[F_m(\vec x) = F_{m-1}(\vec x) + \arg\min_{f \in H}\sum_{i=1}^nL(y_i,F_{m-1}(\vec x_i) + f(\vec x_i))\]class

貪心法每次選擇最優基函數\(f\)時仍然困難,使用梯度降低的方法近似計算。將樣本帶入基函數\(f\)獲得\(f(\vec x_1),f(\vec x_2),...,f(\vec x_n)\),從而\(L\)退化爲向量\(L(y_1,f(\vec x_1)),L(y_2,f(\vec x_2)),...,L(y_n,f(\vec x_n))\)
\[F_m(\vec x) = F_{m-1}(\vec x) + \gamma_m \sum_{i=1}^n \Delta_fL(y_i,F_{m-1}(\vec x_i))\]
上式中的權值\(\gamma\)爲梯度降低的步長,使用線性搜索求最優步長:
\[\gamma_m = \arg\min_\gamma \sum_{i=1}^{n}L(y_i,F_{m-1}(\vec x_i) - \gamma\cdot\Delta_fL(y_i,F_{m-1}(\vec x_i)))\]變量

步驟以下:
(1)初始給定模型爲常數\(F_0(\vec x)\),對於\(m=1\)\(M\):
(2)計算僞殘差:\[\gamma_{im} = \left[\frac{\partial L(y_i,F(\vec x_i))}{\partial F(\vec x_i)}\right]_{F(\vec x) = F_{m-1}(\vec x)},i=1,2,...,n\]
(3)使用數據\(\left\{ (\vec x_i,\gamma_{im})\right\}^n_{i=1}\)計算擬合殘差的基函數\(f_m(x)\)
(4)計算步長\[\gamma_m = \arg\min_\gamma \sum_{i=1}^{n}L(y_i,F_{m-1}(\vec x_i) - \gamma\cdot f_m(\vec x_i)))\]擴展

(5)更新模型\[F_m(\vec x) = F_{m-1}(\vec x) - \gamma_m f_m(\vec x_i)\]lambda

3. GBDT算法推導

梯度提高的典型基函數即決策樹(尤爲是CART),在第\(m\)步的梯度提高是根據僞殘差數據計算決策樹\(T_m(x)\)。令樹\(T_m(x)\)的葉結點數目爲\(J\),即樹\(T_m(x)\)將輸入空間劃分爲\(J\)個不相交區域\(R_{1m},R_{2m},...,R_{Jm}\),而且決策樹\(T_m(x)\)能夠在每一個區域中給出某個類型的肯定性預測。使用指示標記\(I(x)\),對於輸入\(x\)\(T_m(x)\)爲:
\[T_m(\vec x) = \sum_{j=1}^J b_{jm}I(\vec x \in R_{jm})\]其中,\(b_{jm}\)是樣本\(x\)在區域\(R_{jm}\)的預測值(常量)。

使用線性搜索計算學習率,最小化損失函數
\[F_m(\vec x) = F_{m-1}(\vec x) + \gamma_m \cdot T_m(\vec x)\]
\[\gamma_m = \arg\min_\gamma \sum_{i=1}^n L(y_i,F_{m-1}(\vec x_i) + \gamma \cdot T_m(\vec x_i))\]
進一步,對樹的每一個區域分別計算步長,從而係數\(b_{jm}\)合併到步長,從而:
\[F_m(\vec x) = F_{m-1}(\vec x) + \sum_{j=1}^{J}\gamma_{jm} \cdot I(\vec x \in R_{jm})\]
\[\gamma_{jm} = \arg\min_\gamma \sum_{\vec x_i \in R_{jm}} L(y_i,F_{m-1}(\vec x_i) + \gamma \cdot T_m(\vec x_i))\]

當採用平方偏差損失函數時,\(L(y,f(\vec x)) = (y-f(\vec x))^2\),其損失變爲:
\[L\left(y, f_{m-1}(\vec x) + \gamma_m \cdot T_m(\vec x)\right) = \left[y-f_{m-1}(\vec x) - \gamma_m T_m(\vec x)\right] ^2 = \left[ r - \gamma_mT_m(\vec x)\right]^2\]
這裏,\(r = y- f_m(\vec x)\)。因此,對迴歸問題的提高樹算法來講,只須要簡單的擬合當前模型的殘差。

4. XGBoost算法推導

目標函數:
\[J(f_t) = \sum_{i=1}^nL(y_i, \hat y_i^{(t-1)} + f_t(x_i)) + \Omega(f_t) + C\]
根據Taylor展開式:\(f(x+ \Delta x) \approx f(x) + f^\prime(x) \Delta x + \frac{1}{2}f^{\prime\prime}(x)\Delta x^2\),令\[g_i= \frac{\partial L(y_i,\hat y_i^{(t-1)})}{\partial \hat y_i^{(t-1)}}, h_i = \frac{\partial^2 L(y_i,\hat y_i^{(t-1)})}{\partial \hat y_i^{(t-1)}}\]
則:\[J(f_t) \approx \sum_{i=1}^n \left[L(y_i, \hat y_i^{(t-1)}) + g_if_t(x_i) + \frac{1}{2}h_if_i^2(x_i)\right] + \Omega(f_t) + C\]
假定某決策樹的葉結點數目爲\(T\),每一個葉結點的權值爲\(\vec w = (w_1,w_2...w_T)\)。決策樹的學習過程,就是構造如何使用特徵獲得劃分,從而獲得這些權值的過程。樣本\(x\)落在葉結點\(q\)中,定義\(f\)爲:\(f_t(x) = w_{q(x)}\)

正則項,決策樹的複雜度可考慮葉結點樹和葉權值:\(\Omega(f_t) = \gamma^ {T_t} + \frac{1}{2}\lambda \sum_{j=1}^T w_j^2\),其中\(T_t\)爲葉結點數,\(w_j\)\(j\)葉子結點權重。

目標函數計算:\[J(f_t) \approx \sum_{i=1}^n \left[L(y_i, \hat y_i^{(t-1)}) + g_if_t(x_i) + \frac{1}{2}h_if_i^2(x_i)\right] + \Omega(f_t) + C\]
\[= \sum_{i=1}^n \left[g_if_t(x_i) + \frac{1}{2}h_if_i^2(x_i)\right] + \Omega(f_t) + C\]
\[= \sum_{i=1}^n \left[g_i w_{q(x_i)} + \frac{1}{2}h_i w_{q(x_i)}^2\right] + \gamma^ {T_t} + \frac{1}{2}\lambda \sum_{j=1}^{T_t} w_j^2 + C\]
\[=\sum_{j=1}^{T_t} \left[(\sum_{i \in I_j}g_i)w_j + \frac{1}{2}(\sum_{i \in I_j}h_i)w_j^2\right] +\gamma^ {T_t} + \frac{1}{2}\lambda \sum_{j=1}^{T_t} w_j^2 + C\]
\[=\sum_{j=1}^{T_t} \left[(\sum_{i \in I_j}g_i)w_j + \frac{1}{2}(\sum_{i \in I_j}h_i + \lambda)w_j^2\right] +\gamma^ {T_t} + C\]
定義:\[G_j = \sum_{i \in I_j}g_i, H_j = \sum_{i \in I_j}h_i\]
從而,\[J(f_t) =\sum_{j=1}^{T_t} \left[G_jw_j + \frac{1}{2}(H_i + \lambda)w_j^2\right] +\gamma^ {T_t} + C\]
\(w\)求偏導,得:\[\frac{\partial J(f_t)}{\partial w_j} = G_j + (H_j + \lambda) w_j\]令偏導等於0,獲得:\[w_j = - \frac {G_j}{H_j + \lambda}\]
代回目標函數,得\[J(f_t) = -\frac{1}{2} \sum_{j=1}^{T_t}\frac{G_j^2}{H_j+\lambda} + \gamma^{T_t}\]

構造決策樹的結構:

  • 對於某可行劃分,計算劃分後的\(J(f)\);
  • 對於全部可行劃分,選擇\(J(f)\)下降最小的分割點。

5. AdaBoost算法推導

假設給定一個二類分類的訓練數據集\(T = {(x_1,y_1),(x_2,y_2),...(x_n,y_n)}\)
初始化訓練數據集的權值分佈\(D_1 = (w_{11},w_{12},...,w_{1i},...,w_{1N}) ,w_{1i} = \frac{1}{N}, i=1,2,...,N\)
對於\(m=1,2,...,M\)
(1)使用具備權值分佈\(D_m\)的訓練數據集學習,獲得基本分類器:\(G_m(x): \chi \to \{-1,1\}\)
(2)計算\(G_m(x)\)在訓練數據集上的分類偏差率:\(e_m = P(G_m(x) \ne y_i) = \sum_{i=1}^N w_{mi}I(G_m(x) \ne y_i)\)
(3)計算\(G_m(x)\)的係數:\(\alpha_m = \frac{1}{2}\log\frac{1-e_m}{e_m}\),底取天然對數。
(4)更新訓練數據集的權值分佈:\[D_{m+1} = (w_{m+1,1},w_{m+1,2},...,w_{m+1,i},...,w_{m+1,N})\]
\[w_{m+1,i} = \frac{w_{mi}}{Z_m} \exp(-\alpha_my_iG_m(x_i)), i=1,2,...,N\]這裏\(Z_m\)是規範化因子,\(Z_m = \sum_{i=1}^N w_{mi}\exp(-\alpha_my_iG_m(x_i))\),它使\(D_{m+1}\)成爲一個機率分佈。
(5)構建基本分類器的線性組合:$f(x) = \sum_{m=1}^{M} \alpha_m G_m(x) $,獲得最終分類器:
\[G(x) = sign(f(x)) = sign( \sum_{m=1}^{M} \alpha_m G_m(x) )\]

說明:計算基本分類器的\(G_{m}{(x)}\)的係數\(\alpha_m\)\(\alpha_m\)表示\(G_{m}{(x)}\)在最終分類器中的重要性。當\(e_m \leq \frac{1}{2}\)時,\(\alpha_m \geq 0\)。而且\(\alpha_m\)隨着\(e_m\)的減少而增大,因此分類偏差率越小的基本分類器在最終分類器中的做用越大。全部的\(\alpha_m\)之和並不爲1。.

相關文章
相關標籤/搜索