Ch04 机器学习修订于 二〇二六年七月六日
概念-XGBoost
一句话理解
XGBoost(eXtreme Gradient Boosting)是 2014 年由陈天奇提出的梯度提升树算法,2026 年仍是结构化/表格数据的王者,在 Kaggle 竞赛和工业界中统治地位未被深度学习撼动。
核心创新
1. 正则化目标函数
XGBoost 在传统 GBDT(Gradient Boosting Decision Tree)的损失函数基础上加入了正则化项:
Obj = Σ L(y_i, ŷ_i) + Σ Ω(f_k)
其中 Ω(f) = γT + 1/2 λ||w||²
- T:叶子节点数量(γ 控制复杂度)
- ||w||²:叶子权重的 L2 正则化(λ 控制平滑度)
- 防止过拟合,提升泛化能力
这与传统 GBDT 只优化损失函数有本质区别,是 XGBoost 名字中”eXtreme”的来源之一。
2. 近似分裂算法(Approximate Algorithm)
传统 GBDT 对每个特征的每个可能分裂点都计算增益,在数据量大时非常慢。
XGBoost 的近似分裂算法:
- 按特征值的分位数(quantile)提出候选分裂点
- 对候选点计算分裂增益,选择最优
- 全局变体(proposal once at beginning)和局部变体(proposal per split)
- 速度提升 10-100 倍,精度损失可忽略
3. 列采样(Column Subsampling)
借鉴随机森林的思想,XGBoost 支持两种采样:
- 按树采样:每棵树随机选择部分特征
- 按层采样:树的每一层随机选择部分特征
- 进一步降低过拟合,减少计算量
4. 加权分位数草图(Weighted Quantile Sketch)
对于大规模数据,XGBoost 使用加权分位数草图来高效估计特征分位点,支持合并操作,适合分布式计算。
5. 系统级优化
- 列块(Column Block):按列存储数据,利用缓存局部性
- 缓存感知访问:预取梯度统计量到 CPU 缓存
- 稀疏感知:自动处理缺失值,学习最优缺省方向
- 并行化:特征维度并行计算分裂增益
- 核外计算:数据超出内存时,利用磁盘
XGBoost vs LightGBM vs CatBoost 对比
| 维度 | XGBoost | LightGBM | CatBoost |
|---|---|---|---|
| 开发者 | 陈天奇 (DMLC) | 微软 | Yandex |
| 发布时间 | 2014 | 2017 | 2017 |
| 树生长方式 | Level-wise(按层生长) | Leaf-wise(按叶生长) | Symmetric Tree |
| 训练速度 | 快 | 最快 | 中等 |
| 内存占用 | 中等 | 低 | 高 |
| 类别特征 | 需手动编码 | 需手动编码 | 原生支持 |
| 缺失值处理 | 自动学习方向 | 自动处理 | 自动处理 |
| GPU 支持 | 好 | 好 | 好 |
| 小数据表现 | 好 | 容易过拟合 | 最好 |
| 大数据表现 | 好 | 最好 | 好 |
| 超参数敏感度 | 中等 | 高 | 低(默认参数好用) |
| 2026年社区 | 极活跃 | 活跃 | 活跃 |
| 最佳场景 | 通用、竞赛 | 大规模数据、追求速度 | 类别特征多、不想调参 |
为什么深度学习打不过 XGBoost
对于表格数据(tabular data),XGBoost 在 2026 年仍能击败深度学习,原因如下:
1. 数据特性决定
- 表格数据特征独立:图像/文本有空间/语义结构,CNN/Transformer 利用这些结构;表格数据的列之间没有天然的局部结构
- 特征尺度差异大:表格数据中混合了数值、类别、序数特征,尺度差异巨大,深度学习需要大量归一化
- 缺失值普遍:表格数据中缺失值常见,树的稀疏感知天然处理这一点
2. 数据规模
- 中小规模数据:工业界大多数表格数据在 1K-100K 样本量级,深度学习需要更多数据
- XGBoost 在 10K 样本以下表现更好:深度学习需要大量数据才能发挥优势
- 小样本泛化:树的归纳偏置更简单,小样本时不容易过拟合到噪声
3. 训练效率
- 训练速度:XGBoost 秒级到分钟级;深度学习需要分钟级到小时级
- 超参数:XGBoost 只有几个关键超参数(max_depth, learning_rate, n_estimators),深度学习超参数空间大得多
- 可重现性:XGBoost 确定性训练;深度学习受随机种子影响大
2026 年地位
XGBoost 在 2026 年保持着以下核心地位:
- Kaggle 表格数据任务首选:大部分获奖方案仍以 XGBoost 为主要模型
- 工业界基石:金融风控、推荐系统、医疗诊断、工业预测的核心算法
- 基线模型:任何表格数据任务的第一件事就是跑 XGBoost
- 深度学习基准:新的表格数据深度学习模型(TabNet、FT-Transformer、TabPFN)都以 XGBoost 为对比基准
关键超参数
| 参数 | 含义 | 典型范围 | 说明 |
|---|---|---|---|
| max_depth | 树最大深度 | 3-10 | 越大越复杂,越容易过拟合 |
| learning_rate | 学习率 | 0.01-0.3 | 常用 0.1,越小需要更多树 |
| n_estimators | 树数量 | 100-1000 | 配合 early_stopping 使用 |
| subsample | 行采样比例 | 0.5-1.0 | 每棵树使用多少样本 |
| colsample_bytree | 列采样比例 | 0.5-1.0 | 每棵树使用多少特征 |
| reg_alpha | L1 正则化 | 0-10 | 特征选择,稀疏模型 |
| reg_lambda | L2 正则化 | 0-10 | 防止过拟合 |
| gamma | 分裂最小增益 | 0-5 | 越大越保守 |
适用场景
最适合的场景
- 结构化/表格数据:金融、医疗、电商、工业数据
- 中小规模数据:1K-1M 样本,XGBoost 表现优异
- 需要特征重要性解释:树模型天然提供特征重要性
- 快速迭代:训练快,适合快速实验
- 竞赛和科研基线:几乎总是第一个尝试的模型
不太适合的场景
- 图像、文本、语音:深度学习的主场
- 超大规模数据:1B+ 样本,LightGBM 可能更快
- 在线学习:XGBoost 主要支持批量训练,虽然也有增量训练
相关笔记
- 第4章 · 机器学习核心算法 — 机器学习算法知识体系
- 决策树 (Decision Tree) — XGBoost 的基础模型
- 概念-随机森林 — 另一种树集成方法
- 概念-XGBoost — 微软的梯度提升实现
- 概念-XGBoost — Yandex 的梯度提升实现
来源
- XGBoost 论文 (KDD 2016): https://arxiv.org/abs/1603.02754
- XGBoost GitHub: https://github.com/dmlc/xgboost
- XGBoost 官方文档: https://xgboost.readthedocs.io
- 陈天奇博士论文: https://homes.cs.washington.edu/~tqchen/data/pdf/GBC.pdf
- XGBoost vs Deep Learning 讨论: https://arxiv.org/abs/2207.08815
关联6
知识图谱局部图谱 · 点节点跳转