透視 XGBoost(0) 總結篇
此篇總結 透視 XGBoost 系列,建議系列閱讀順序為
- 透視 XGBoost(1) 圖解 Regression
- 透視 XGBoost(2) 圖解 Classification
- 透視 XGBoost(3) 蘋果樹下的 objective function
- 透視 XGBoost(4) 神奇 optimization 在哪裡?
XGBoost 通用 objective function
XGBoost 的 loss function 以 second order Taylor Expansion approximate,使的 loss function 存在 first and second order derivative
通用 objective function 使 XGBoost 在 classification, regression, rank 的任務上表達式皆一致
請參閱 透視 XGBoost(3) 蘋果樹下的 objective function
XGBoost v.s. GBDT
- 一般 GBDT 用 regression tree 擬合 residuals,本質上是往 negative gradient 方向移動
- XGBoost tree $f_m(x)$ 擬合 residuals,同時考慮 gradient 的方向和 gradient 變化趨勢,這讓他朝 optimal value 移動時顯得更加聰明有效
- gradient 的方向: first order derivative
- gradient 變化趨勢: second order derivative
請參閱 透視 XGBoost(3) 蘋果樹下的 objective function
What Makes XGBoost so Effective?
Avoiding Overfitting
- Objective function 內加入 regularization term,限制 leaf node 輸出大小 和 leaf node number
- 可以設置 min_child_weight 限制 each leaf node 的 cover
- 可以設置 max_depth 限制 XGB tree 的深度
- Column sampling and Row sampling
參閱
Split Findding
- 採用 approximate greedy algorithm 選取 candidate split 點,candidate split 基於 weighted quantile 切分
- weighted Quantile Sketch 盡量使 quantiles 間的 summation of weight 相等
- weight 計算直接來自 second derivative of loss function $h_i$
參閱 透視 XGBoost(4) 神奇 optimization 在哪裡?
System Design
- 數據量大時,將 data samples 切分成 multi blocks 方便 parallel computing
- 訓練前 sorting block 內的 columns values,避免每次分裂皆要對特徵 (columns) 排序
- 開 thread pre-fetch $g_i \ h_i$, 優化 cache hitting rate
- out-of-core blocks 將放不進 memory 的 block 成塊的放到 hard disks,並在要計算前 pre-fetch to memory using thread
參閱 透視 XGBoost(4) 神奇 optimization 在哪裡?
Other
- data samples 內的 missing value (NAs) 可以在訓練時學出來分裂位置
透視 XGBoost(0) 總結篇