極限梯度提升(XGBoost)是什麼?

一個高效、可擴展的梯度提升實現,引入二階導數、正則化和缺失值處理,成為工業級標準。|本頁含完整原理、應用場景、iPAS 考試重點與 3 個常見問答。

英文
XGBoost
主題標籤
機器學習、梯度提升、XGBoost
考點定位
非 iPAS 核心術語
最後更新
2026/07/30
極限梯度提升(XGBoost)是什麼? 機器學習梯度提升
術語快查

搜尋意圖: 如果你在找「極限梯度提升 是什麼」或「極限梯度提升 和相近概念差在哪」,先看這頁的短定義、完整說明與延伸比較。

TL;DR: 一個高效、可擴展的梯度提升實現,引入二階導數、正則化和缺失值處理,成為工業級標準。

實用情境: 適合用在閱讀 AI 文章、產品文件或和同事討論時,先用一頁快速對齊概念。

下一步: 先讀完定義,再往下看延伸比較與對應工具,把概念轉成實際應用。

一個高效、可擴展的梯度提升實現,引入二階導數、正則化和缺失值處理,成為工業級標準。

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. 獨立調優各參數,忽視參數之間的相互影響。

常見問題

XGBoost 中二階梯度(Hessian)為什麼這麼重要?

梯度(一階導數)告訴我們「損失函數在當前點的方向」,Hessian(二階導數)告訴我們「這個方向的曲率有多大」。直觀比喻:一階梯度告訴你「下山往哪走」,二階梯度告訴你「陡峭程度」,幫助你決定步長和更新的激進程度。在最優化中,二階信息(如牛頓法)通常比一階方法(如梯度下降)更精確、收斂更快。XGBoost 在分裂點選擇時使用 Hessian,能更精確地評估每個分裂的收益,結果是更優的樹結構,同等模型複雜度下性能更好,或同等性能下模型更簡潔。這是 XGBoost 相比傳統梯度提升的關鍵優勢之一。

什麼時候應該用 XGBoost,什麼時候用 LightGBM?

選擇的主要考量是資料規模和調優精力:資料量 < 100 萬且需要快速迭代 → XGBoost 優先,因為它對超參數容錯度高,預設參數通常表現不錯;資料量 > 100 萬或追求競賽最高分 → LightGBM 優先,它的訓練速度和記憶體效率明顯更優,並且若有充分調優能達到更好的性能;若有大量類別特徵且不想手工編碼 → CatBoost。在沒有明確瓶頸的情況下,XGBoost 是最穩妥的選擇,因為社區最大、教學資源最豐富、出問題最容易找到解決方案。

XGBoost 怎麼用早停防止過擬合?

做法很簡單:在 fit 時傳入 eval_set(驗證集)和 early_stopping_rounds,XGBoost 會在每輪迭代後在驗證集上評估,若驗證性能連續 early_stopping_rounds 輪(如 10 輪)沒有改善,就停止訓練。示例:model.fit(X_train, y_train, eval_set=[(X_val, y_val)], early_stopping_rounds=10, verbose=50)。早停的驗證集應該獨立於訓練集(不能混入訓練資料的一部分,否則對評估是欺騙),且大小至少幾千樣本。早停結合較低的學習率(0.01–0.05)是防止 XGBoost 過擬合的標配做法,往往比複雜的正則化調優更有效。