1. Boosting算法基本思路
提升方法思路:對於一個復雜的問題,將多個專家的判斷進行適當的綜合所得出的判斷,要比任何一個專家單獨判斷好。每一步產生一個弱預測模型(如決策樹),並加權累加到總模型中,可以用於回歸和分類問題;如果每一步的弱預測模型生成都是依據損失函數的梯度方向,則稱之為梯度提升(Gradient boosting)。
梯度提升算法首先給定一個目標損失函數,它的定義域是所有可行的弱函數集合(基函數);提升算法通過迭代的選擇一個負梯度方向上的基函數來逐漸逼近局部極小值。這種在函數域的梯度提升觀點對機器學習的很多領域有深刻影響。
提升的理論意義:如果一個問題存在弱分類器,則可以通過提升的辦法得到強分類器。
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$$
假定最優函數為\(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)\),使得損失函數在訓練集上的期望最小。
首先,給定常函數\(F_0(\vec x)\):
以貪心思路擴展得到\(F_m(\vec x)\):
貪心法每次選擇最優基函數\(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))\)
上式中的權值\(\gamma\)為梯度下降的步長,使用線性搜索求最優步長:
步驟如下:
(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)$$
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)\)為:
進一步,對樹的每個區域分別計算步長,從而系數\(b_{jm}\)合並到步長,從而:
當采用平方誤差損失函數時,\(L(y,f(\vec x)) = (y-f(\vec x))^2\),其損失變為:
這里,\(r = y- f_m(\vec x)\)。所以,對回歸問題的提升樹算法來說,只需要簡單的擬合當前模型的殘差。
4. XGBoost算法推導
目標函數:
根據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$$
定義:$$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})$$
說明:計算基本分類器的\(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。.
