【機器學習演算法】XGBoost原理

九年义务漏网鲨鱼發表於2024-11-30

一、基本內容

  • 基本內容:GBDT的基礎上,在損失函式上加入樹模型複雜度的正則項

與GBDT一樣,也是使用新的弱學習器擬合殘差(當前模型負梯度,殘差方向

  • GBDT損失函式

\[Loss = \sum_{i=1}^{N}L(y_i, y_i^{t}) \]

  • XGboost損失函式

\[Loss = \sum_{i=1}^{S}L(y_i, y_i^{t}) + \sum_{j=1}^{N}\Omega(f_j)) \]

  • 正則項

\[\Omega(f_t))=\gamma L+\frac{1}{2} \lambda \sum_{j=1}^L \omega_j^2 \]

其中,\(L\)表示當前弱學習器的葉子節點個數,\(\gamma,\lambda\)表示懲罰項,\(\omega_j\)表示當前弱學習器的葉子節點\(j\)值。

二、目標函式最佳化

​ 弱學習器損失函式可以寫為:

\[Loss =\gamma N+ \sum_{j=1}^{L} 【\sum_{i=1}^{N}(L(y_i, y_i^{t})) + \frac{1}{2} \lambda \omega_j^2)】 \]

​ 其中,\(y_i^t = y_i^{t-1}+\omega_j\),表示當前的預測輸出機率為前\(t-1\)個學習器的輸出結果加上當前學習器的輸出,\(y_i^{t-1}\)為常數;

​ 目標函式:

\[argmin_{\omega}(\gamma N+ \sum_{j=1}^{L} 【\sum_{i=1}^{N}(L(y_i, y_i^{t-1}+\omega_j)) + \frac{1}{2} \lambda \omega_j^2)】) \]

[!note]

泰勒二階展開基礎公式:

\[f(x) = f(x_0) + f'(x_0)(x-x_0) + \frac{1}{2}f''(x_0)(x-x_0)^2 \]

​ 在目標最佳化中,對函式\(L(y_i, y_i^{t-1}+\omega_j)\)二階泰勒展開,可得:

\[L(y_i, y_i^{t-1}+\omega_j)=L(y_i, y_i^{t-1}) + L'(y_i, y_i^{t-1})\omega_j + \frac{1}{2}L''(y_i, y_i^{t-1})\omega_j^2 \]

​ 捨去常數項,令$g_i=L'(y_i, y_i^{t-1})\omega_j,h_i =\frac{1}{2}L''(y_i, y_i{t-1})\omega_j2 \(,表示第\)i\(個樣本的真實值與前\)t-1$弱學習器模型輸出值的損失導數

\[Loss = \gamma N+ \sum_{j=1}^{L} 【\sum_{i=1}^{N}(g_i\omega_j + \frac{1}{2}h_i\omega_j^2)) + \frac{1}{2} \lambda \omega_j^2)】 \]

\[=\gamma N+ \sum_{j=1}^{L} 【\omega_j\sum_{i=1}^{N}g_i + \frac{1}{2}\omega_j^2 (\sum_{i=1}^{N}h_i+ \lambda)】 \]

​ 令\(G_i=\sum_{i=1}^{N}g_i,H_i= \sum_{i=1}^{N}h_i\),最後的最佳化目標函式可以寫為:

\[Obj_{fun} = argmin_{\omega}(\gamma L +\sum_{j=1}^{L}(w_jG_j+\frac{1}{2}w_j^2(\lambda+H_j))) \]

​ 可以發現,目標函式是關於\(\omega\)的二次函式,使得損失最小的\(\omega\)值為:

\[w_j=-\frac{b}{2a} =-\frac{G_j}{H_j + \lambda} \]

\(\omega\)代入目標函式,可得:

\[Obj_{fun}=\gamma L -\frac{1}{2} \sum_{j=1}^L\frac{G_j^2}{H_j + \lambda} \]

三、樹結構的確定

3.1 窮舉法

逐一舉例,時間複雜度過大,不可能實現

3.2 精確貪心演算法

基本原理與決策樹的結點選取類似,以資訊增益的思想,遍歷所有特徵以及閾值選取當前節點的特徵和閾值

​ 假設當前葉子結點數為\(1\),進一步劃分的葉子節點數目為2,假設劃分後的左子結點的樣本二階導之和為\(G_L\),同理右子節點的樣本二階導之和為\(G_R\),則未劃分前應該是二者之和,因此,劃分前後的目標損失分別為:

\[Obj_{fun} = \begin{cases} \gamma \times 1 -\frac{1}{2} \frac{(G_L+G_R)^2}{H_L+H_R + \lambda},\,\,分裂前\\ \gamma \times 2 -\frac{1}{2} \sum_{j=1}^2\frac{G_j^2}{H_j + \lambda},\,\,分裂後\\ \end{cases} \]

​ 損失減少,則表明當前分裂work,記錄當前分裂特徵和閾值,\(Gain\)越大,表明效果越好

\[Gain = Obj_{分裂前} - Obj_{分裂後} \]

3.3 列取樣

一種對特徵降取樣的方式:選取一定的特徵分裂,每一個弱學習器選取子特徵集,例如從原有特徵選擇80%的特徵,而弱學習器的每一個結點也可以在當前樹下的子特徵集重新隨機選取,也可以全部使用進行遍歷。

3.4 特徵值分桶法

一種對特徵值降取樣的方式:對特徵的值進行分桶,例如某一特徵的值為0-9,分為五個桶只需要遍歷五次,大大增加運算效率,桶數越大,與精確貪心演算法的越接近,當每個桶只有一個樣本時,即為精確貪心演算法。

  • 全域性策略:分裂結點的特徵一樣時,當前弱學習器的分桶閾值不變;
  • 區域性策略:分裂結點的特徵一樣,當前弱學習器的新結點也會重新計算分桶閾值;

​ 在論文中,桶的數目個數計算為:

\[Num = \frac{1}{eps} \]

​ 如圖可以得到以下結論:

  1. 區域性策略在一般情況下比全域性策略好;
  2. \(eps\)足夠小時,時間複雜度以及精度是與精確貪心演算法接近的,並且效果優於區域性策略;

image

相關文章