透視 XGBoost(0) 總結篇
此篇總結 透視 XGBoost 系列,建議系列閱讀順序為
此篇總結 透視 XGBoost 系列,建議系列閱讀順序為
XGBoost 不只在算法上的改造,真正讓 XGBoost 大放異彩的是與工程優化的結合,這讓 XGBoost 在工業上可以應用於大規模數據的處理。
XGBoost 有兩種 split finding 策略,Exact Greedy and Approximate Greedy
data sample 量小的情況下, XGB tree 在建立分支時,會逐一掃過每個可能分裂點 (已對特徵值排序) 計算 similarity score 跟 gain, 即是 greedy algorithm。
greedy algorithm 會窮舉所有可能分裂點,因此能達到最準確的結果,因為他把所有可能的結果都看過一遍後選了一個最佳的。
但如果 data sample 不僅數量多 (row),特徵維度也多 (columns),採用 greedy algorithm,雖然準確卻也沒效率。
XGboost 是 gradient boosting machine 的一種實作方式,xgboost 也是建一顆新樹 $f_m(x)$ 去擬合上一步模型輸出 $F_{m-1}(x)$ 的 $\text{residual}$
不同的是, XGBoost 用一種比較聰明且精準的方式去擬合 residual 建立子樹 $f_m(x)$
此篇首先推導了 XGBoost 的通用 Objective Function,然後解釋為何 second order Taylor expansion 可以讓 XGBoost 收斂更快更準確
XGBoost 的 objective function 由 loss function term $l(y_i, \hat{y_i})$ 和 regularized term $\Omega$ 組成
在 第 $m-1$ 步建完 tree $f_{m-1}$時,total cost 為
進入第 $m$ 步,我們建一顆新樹 $f_m(x)$ 進一步減少 total loss,使得 $\mathcal{L}^{(m)}< \mathcal{L}^{(m-1)}$ , 則 $m$ 步 cost function 為
現在要找出新樹 $f_m(x_i)$ 的每個 leaf node 輸出能使式 (5) $\mathcal{L}^{(m)}$ 最小
當 loss function $l(y, \hat{y})$ 為 square error 時,求解式 (6) 不難,但如果是 classification problem 時,就變得很棘手。
所以 GBDT 對 regression problem 與 classification problem 分別用了兩種不同方式求解極值,求出 leaf node 的輸出
XGBoost 直接以 Second Order Tayler Approximation 處理 classification 跟 regression 的 loss function part $l(y,\hat{y})$
式(5) 的 loss function part 在 $\hat{y}^{m-1}(x_i)$ 附近展開:
將式 (7) 代入式(5):
式 (8) 即 XGBoost 在 $m$ 步的 cost function
Second Order Tayler Approximation 逼近 loss function $l(y, \hat{y})$後 ,對 $\mathcal{L}^{(m)}$ 求 $\gamma_{j,m}$ 極值,就變得容易多了
先將 regularization term $\Omega({f_{m}})$ 展開代入式 (8),並拿掉之後對微分沒影響的常數項 $l(y_i, \hat{y}^{(m-1)}_i)$
式 (9) 對 $\gamma_{j,m}$ 微分取極值
對於已經固定結構了 tree $f_m(x)$,式 (10) leaf node $j$ 的 output value $\gamma_{j,m}$ 為
將 式(11) $\gamma_{j,m}^*$ 代回 式 (9),即 objective function 的極值
當我們在做 gradient decent 時,我們是在嘗試 minimize a cost function $f(x)$,然後讓 $w^{(i)}$ 往 negative gradient 的方向移動
但 gradient $\nabla f(w^{(i)})$ 本身只告訴我們方向,不會告訴我們真正的 the minimum value,我們得到的是每步後盡量靠近 the minimum value 一點,這使的我們無法保證最終到達極值點
同樣的表達式下的 gradient boost machine 也相似的的問題
傳統的 GBDT 透過建一顆 regression tree $f_m(x)$ 和合適的 step size $\nu$ (learning rate) 擬合 negative gradient 往低谷靠近,可以說 GBDT tree $f_m(x)$ 本身就代表 loss function 的 $\text{negative graident}$ 的方向
Newton’s method 是個改良自 gradient decent 的做法。他不只單純考慮了 gradient 方向 (即 first order derivative) ,還多考慮了 second order derivative 即所謂 gradient 的變化趨勢,這他更精準的定位極值的方向
XGBoost 引入了 Newton’s method 思維,在建立子樹 $f_m(x)$ 不再單純只是 $\text{negatvie gradient}$ 方向 (即 first order derivative) ,還多考慮了 second order derivative 即 gradient 的變化趨勢,這也是為什麼 XGBoost 全稱叫 Extreme Gradient Boosting
而 loss function $l(y_i,\hat{y_i})$ 會因不同應用: regression , classification, rank 而有不同的 objective function,並不一定存在 second order derivative,所以 XGBoost 利用 Taylor expansion 藉由 polynomial function 可以逼近任何 function 的特性,讓 loss function 在 $f_m(x_i)$ 附近存在 second order derivative
可以說,XGBoos tree 以一種更聰明的方式往 the minimum 移動
XGBoost Part 1 (of 4): Regression
XGBoost Part 3 (of 4): Mathematical Details
XGboost 是 gradient boosting machine 的一種實作方式,xgboost 也是建一顆新樹 $f_m(x)$ 去擬合上一步模型輸出 $F_{m-1}(x)$ 的 $\text{residual}$
不同的是,Xgboost 做了大量運算和擬合的優化,這讓他比起傳統 GBDT 更為高效率與有效
GBDT 簡介在 一步步透視 GBDT Regression Tree
直接進入正題吧
訓練完的 GBDT 是由多棵樹組成的 function set $f_1(x), …,f_{M}(x)$
訓練中的 GBDT,每棵新樹 $f_m(x)$ 都去擬合 target $y$ 與 $F_{m-1}(x)$ 的 $residual$,也就是 $\textit{gradient decent}$ 的方向