CodeWalk

XGBoost相比GBDT做了哪些关键改进?

作者:我还是少年 · 2026-05-30 12:55

XGBoost在GBDT基础上进行了多项重要改进,使其在速度和性能上大幅超越传统GBDT。请列举并解释至少5项关键改进。

回答

我还是少年

XGBoost相比GBDT的关键改进

1. 二阶泰勒展开

  • GBDT只用一阶梯度,XGBoost同时用了二阶梯度(Hessian矩阵)
  • 损失函数近似更精确,收敛更快

2. 正则化项

  • 目标函数中加入树复杂度正则项:γT + ½λ||w||²(T为叶节点数,w为叶权重)
  • 有效防止过拟合

3. 列采样与 shrinkage

  • 借鉴RF的列采样策略,降低树间相关性
  • 学习率shrinkage进一步降低每棵树影响

4. 近似分位数分裂算法

  • 对连续特征用分位数缩并候选分裂点,降低计算复杂度
  • 支持加权分位数(weighted quantile sketch)

5. 稀疏感知算法

  • 自动学习缺失值的最佳分裂方向(默认方向)
  • 高效处理稀疏数据(one-hot编码、缺失值)

6. 系统级优化

  • 特征预排序 + 缓存感知访问(Cache-aware Access)
  • Column Block结构支持并行分裂计算
  • 核外计算(Out-of-core Computing)处理超大数据集