極限梯度提升 是什麼?
XGBoost:極限梯度提升 的完整解釋
一個高效、可擴展的梯度提升實現,引入二階導數、正則化和缺失值處理,成為工業級標準。
XGBoost 是機器學習工程化的典範:它不僅在演算法上做了精妙的改進,更在系統設計上考慮了實務應用的每一個細節,從而成為了當今最被信賴的工業級 Boosting 方案。
核心改進點
1. 二階泰勒展開
傳統梯度提升只用一階梯度,XGBoost 用二階泰勒展開近似損失函數:
L(y, F_{t-1}(x) + h_t(x)) ≈ L(y, F_{t-1}(x)) + g_t(x) × h_t(x) + 0.5 × h_s(x) × h_t(x)²
其中 g_t 是一階梯度,h_s 是二階梯度(Hessian)。二階項提供了更精確的損失估計,使最優化決策邊界更準確。
2. 內建正則化
XGBoost 的目標函數包含了顯式的正則化項:
Obj = Σ L(y_i, ŷ_i) + Σ Ω(f_t)
其中 Ω(f_t) 是對樹 f_t 的複雜度懲罰,包括葉子數量和葉子權重的 L1/L2 正則化。這在訓練時直接防止過擬合,無需額外的技巧。
3. 稀疏感知(Sparse Aware)
XGBoost 自動處理缺失值,在訓練時同時學習「缺失值應該走左還是走右」,無需預先填補。這個設計對含有大量缺失的真實資料特別友善。
4. 並列與分布式支持
- 列採樣並列化:在構建每棵樹的分裂點時,XGBoost 對特徵進行並列搜索,利用多核 CPU;
- 分布式支持:可以在 Spark、Flink 等分布式框架上執行,支持超大規模資料集;
- GPU 加速:提供 GPU 版本,在 GPU 上的訓練速度可再快 10 倍。
5. 自定義損失函數與評估指標
XGBoost 允許用戶定義任意梯度和 Hessian,使其適應各種非標準損失函數(如分位數迴歸、LambdaRank 排序損失)。
關鍵超參數解讀
# 樹相關
max_depth: 樹的最大深度,通常 6-8,過深易過擬合
min_child_weight: 葉子的最小樣本和,過小易過擬合
subsample: 每棵樹使用的樣本比例,通常 0.8
colsample_bytree: 每棵樹使用的特徵比例,通常 0.8
# Boosting 相關
learning_rate (eta): 梯度下降步長,通常 0.01-0.1,越小訓練越慢但越穩定
n_estimators: 樹的總數,通常用早停決定
# 正則化
gamma: 分裂的最小信息增益,越大限制越多
reg_alpha: L1 正則化強度
reg_lambda: L2 正則化強度
調優流程(實務經驗)
- 先用預設值訓練,觀察訓練/驗證曲線(過擬合還是欠擬合);
- 若過擬合,逐漸增加正則化:增加 gamma、reg_alpha、reg_lambda,或降低 subsample;
- 若欠擬合,逐漸增加樹的複雜度:增加 max_depth 或降低 gamma;
- 用早停確定 n_estimators;
- 微調學習率,通常降到 0.01–0.05,配合更多的迭代輪數;
- 最後進行特徵工程和資料清洗,往往比參數調優收益更大。
XGBoost vs. LightGBM vs. CatBoost
| 維度 | XGBoost | LightGBM | CatBoost |
|---|---|---|---|
| 樹的生長策略 | 層級生長 | 葉子生長 | 層級/對稱 |
| 大資料上性能 | 良好 | 優秀 | 良好 |
| 類別特徵支持 | 需手工編碼 | 需手工編碼 | 自動支持 |
| 超參數容錯度 | 高(穩定) | 中(需調優) | 高(穩定) |
| 社區與教學資源 | 豐富 | 豐富 | 中等 |
| 實務使用廣泛度 | 第一(最廣泛) | 第二(競賽常用) | 第三 |
現代實務推薦:起點 XGBoost(最成熟可靠),大資料上考慮遷移 LightGBM,若資料含大量類別特徵考慮 CatBoost。
常見坑點
- 沒有進行特徵工程就跳入超參數調優,效率低;
- 訓練曲線監控不足,導致過擬合/欠擬合沒有及時發現;
- 超參數調優時沒有固定隨機數種子,導致結果不可重現;
- 忽視資料洩漏,在切分前進行資料增強或特徵工程;
- 獨立調優各參數,忽視參數之間的相互影響。