極限梯度提升 是什麼?

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 正則化強度

調優流程(實務經驗)

  1. 先用預設值訓練,觀察訓練/驗證曲線(過擬合還是欠擬合);
  2. 若過擬合,逐漸增加正則化:增加 gamma、reg_alpha、reg_lambda,或降低 subsample;
  3. 若欠擬合,逐漸增加樹的複雜度:增加 max_depth 或降低 gamma;
  4. 用早停確定 n_estimators;
  5. 微調學習率,通常降到 0.01–0.05,配合更多的迭代輪數;
  6. 最後進行特徵工程和資料清洗,往往比參數調優收益更大。

XGBoost vs. LightGBM vs. CatBoost

維度 XGBoost LightGBM CatBoost
樹的生長策略 層級生長 葉子生長 層級/對稱
大資料上性能 良好 優秀 良好
類別特徵支持 需手工編碼 需手工編碼 自動支持
超參數容錯度 高(穩定) 中(需調優) 高(穩定)
社區與教學資源 豐富 豐富 中等
實務使用廣泛度 第一(最廣泛) 第二(競賽常用) 第三

現代實務推薦:起點 XGBoost(最成熟可靠),大資料上考慮遷移 LightGBM,若資料含大量類別特徵考慮 CatBoost。

常見坑點

  1. 沒有進行特徵工程就跳入超參數調優,效率低;
  2. 訓練曲線監控不足,導致過擬合/欠擬合沒有及時發現;
  3. 超參數調優時沒有固定隨機數種子,導致結果不可重現;
  4. 忽視資料洩漏,在切分前進行資料增強或特徵工程;
  5. 獨立調優各參數,忽視參數之間的相互影響。

常見問題