XGBoost相比GBDT做了哪些关键改进?
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)处理超大数据集