跳到主要内容

XGBoost 与梯度提升

问题

XGBoost 的原理是什么?和 GBDT、LightGBM 有什么区别?

答案

一、GBDT 原理

GBDT(Gradient Boosting Decision Tree)串行训练决策树:

模型 = 树1 + 树2 + 树3 + ...
每棵新树拟合前面所有树的【残差】(梯度)
Fm(x)=Fm1(x)+ηhm(x)F_m(x) = F_{m-1}(x) + \eta \cdot h_m(x)

其中 hmh_m 是第 mm 棵树,η\eta 是学习率。

二、XGBoost 改进

改进项GBDTXGBoost
目标函数一阶梯度二阶梯度(牛顿法)
正则化树复杂度正则(叶节点数 + 权重)
缺失值需预处理自动处理
并行特征级并行(分裂点搜索)
剪枝预剪枝后剪枝(更优)

三、XGBoost vs LightGBM vs CatBoost

对比维度XGBoostLightGBMCatBoost
树生长策略Level-wiseLeaf-wiseOrdered
训练速度
分类特征需编码原生支持原生支出最佳
内存占用
精度小数据集最佳
适用场景通用大数据集多分类特征

四、关键超参数

参数作用建议值
n_estimators树的数量100~1000(配合 early stopping)
max_depth树最大深度3~8
learning_rate学习率0.01~0.3
subsample样本采样率0.6~1.0
colsample_bytree特征采样率0.6~1.0
reg_alphaL1 正则0~1
reg_lambdaL2 正则1~5

常见面试问题

Q1: XGBoost 为什么用二阶梯度?

答案

  • 二阶梯度(Hessian)相当于用牛顿法优化,收敛更快
  • 二阶信息帮助更好地估计分裂增益,选择更优分裂点
  • 同时为正则化提供了自然的权重衰减

Q2: LightGBM 为什么比 XGBoost 快?

答案

  • Leaf-wise 生长:只分裂增益最大的叶子(XGBoost 是 Level-wise 逐层生长)
  • 直方图算法:将连续特征离散化为直方图 bin,减少分裂点搜索量
  • GOSS:梯度单边采样,保留大梯度样本,随机采样小梯度样本
  • EFB:互斥特征捆绑,减少特征数量

Q3: 结构化数据建模首选什么算法?

答案

  • 首选 XGBoost/LightGBM:在 Kaggle 等竞赛中,结构化数据 90% 以上的冠军方案使用 GBDT 类算法
  • 深度学习在结构化数据上通常不如 GBDT 类算法
  • TabNet 等深度表格模型在特定场景有优势,但通用性不如 XGBoost

相关链接