Ch.07
XGBoost、LightGBM、CatBoost:表数据实战三强
面对像电子表格一样的结构化/表格式数据,有一类方法常常比复杂深度学习更省事、更稳:梯度提升(Boosting)。它让一排“普通学生”(弱学习器)按顺序上阵,每个人专门补上一位同学还没答对的残差,最后合成一个很强的预测器。
本章拆解 XGBoost、LightGBM、CatBoost 三者的差异,并给出如何按数据特点选型的清晰标准(同样适用于 Kaggle 与业务落地)。
按章节的机器学习图示
选择章节后,下方图示会切换为该章节内容。可一览机器学习脉络。
三者扩展树的策略不同:按层扩展、按叶扩展、对称(oblivious)扩展。请看各面板的动画演示。
CH07 Boosting 三强:用一棵棵树吃掉残差
1. 核心机制:错题接力
概念: Boosting 把决策树依次串联,让新的一棵树重点去学当前集成模型剩下的误差(残差)。
直觉: 模考后只做错题本;下一位同学专攻这些题,再下一位专攻仍未解决的漏洞——轮数多了,整体正确率就会显著抬升。
更新式:
- :第 步累加后的预测
- :加上新树之前的预测
- :专门拟合剩余误差的新树
- :学习率,控制新树的贡献力度(常更小则更稳,但往往需要更多树)
实战: 信贷违约、流失、CTR 等表数据任务里,Boosting 仍然是顶级基线之一。
2. XGBoost:带正则的稳健主力
概念: 把现代梯度提升带向大众的经典实现。目标函数显式包含正则/复杂度惩罚,训练往往更可预期、更抗噪一些。
直觉: 像既抓进度、又抓基础的严师——模型开始“死记硬背”时会用惩罚把曲线拉回来。
3. LightGBM:大规模下的速度型选手
概念: 为海量样本优化:用直方图分箱减少计算,并常以按叶(leaf-wise)策略生长——优先分裂带来最大损失下降的那片叶子,而不是先齐整地铺满一层(level-wise)。
直觉: 会跳过已掌握的章节,把精力砸在最可能考的重点上——效率极高,但在小数据上更容易“钻牛角尖”过拟合。
注意: 务必配合 `max_depth`、`min_data_in_leaf` 等约束。
4. CatBoost:类别特征友好
概念: 来自 Yandex,名字拆自 Category + Boost。对高基数类别(城市、职业、商品 ID)往往能减少手工编码负担。
直觉: 表数据要警惕泄露:不小心把未来信息混进训练,分数会虚高。有序统计(ordered statistics)等设计有助于降低这类风险;默认参数常常也很好用。
5. 公式更容易读(符号含义 + 小算例)
Boosting/XGBoost 最常见的 3 个式子如下。建议每个式子都按 (a) 先认符号、(b) 再看一个小数值例子 的顺序理解。
(1) 预测的累加更新
- :加入新树之前的预测
- :新树给出的修正量
- :学习率(修正量要放大/缩小多少)
含义: 在旧预测基础上加一份“按学习率缩放后的修正”,误差就会按轮次逐步下降。
小算例: 旧预测=10,新树输出=+4,,则
。
(2) 目标函数 = 拟合误差 + 复杂度惩罚
- :全体样本的预测误差
- :限制模型过于复杂的正则项
含义: 不只追求“更贴合训练数据”,还要对“太复杂的模型”加惩罚,减少过拟合。
小算例: 若拟合误差和为 18、正则项为 3,则
。
(3) 分裂增益用到的一阶/二阶导
,
- :一阶导(梯度)— 应该往哪个方向改、改多大
- :二阶导(曲率)— 损失变化有多陡,用于稳定更新
含义: XGBoost 类方法同时利用 和 计算分裂增益,通常比只用一阶信息更稳定。
直觉提示:
- 越大,往往说明该样本当前误差还较大;
- 像“刹车/阻尼”,能避免更新过猛。
🔵 通用参数:音量旋钮与放大镜
① `learning_rate`(学习率):像音量旋钮,控制新树修正要加多大。调小更稳,但通常要增加轮数(`n_estimators`);调大收敛更快,但更容易抖动或过拟合。
② `n_estimators` / `iterations`:要叠加多少轮树。
③ `max_depth` / `depth`:树的“放大倍数”。越深越能抓细节,也越容易把噪声记住。入门常用 `learning_rate=0.03~0.1`、深度 `4~8`。
🟣 XGBoost:在精度与保守性之间找平衡
① `subsample`:每棵树只用部分样本行,缓解过拟合。
② `colsample_bytree`:每棵树只用部分特征列,降低对少数特征的过度依赖。
③ `min_child_weight`:防止证据不足的细碎分裂。
④ `reg_lambda` / `reg_alpha`:控制模型复杂度的正则“刹车”。
🟢 LightGBM:Leaf-wise 生长,核心在控叶子
① `num_leaves`:叶子上限。更大=表达力更强,但过拟合风险也更高(通常设在 以下)。
② `min_data_in_leaf`:每个叶子最少样本数,防止出现过小且不稳定的叶子。
③ `feature_fraction` / `bagging_fraction`:作用类似 XGBoost 的 `colsample_bytree` / `subsample`;过拟合时把它们从 1.0 往下调通常有效。
🟠 CatBoost:类别特征友好模型
① `cat_features`:最关键。明确哪些列是类别列,才能发挥 CatBoost 优势。
② `depth` 与 `iterations`:与其他提升树类似,但 CatBoost 对深度可能更敏感。
③ `l2_leaf_reg`:抑制预测值过于极端的正则参数。
表数据的“默认强者”
处理数据库表/CSV时,Boosting 经常是又快又准的首选基线;很多团队在做重型神经网络之前,会先把它跑通。
按数据选兵器
- 要稳定、中等规模:倾向 XGBoost
- 要速度/内存、超大规模:LightGBM
- 类别列多、想少折腾预处理:CatBoost
超参数就是方向盘
`learning_rate`、树的深度/叶子数、`n_estimators`、early stopping 共同决定偏差-方差与算力消耗;理解它们如何联动,调参就不再全靠试错。
① 典型流水线
缺失与类别处理 训练/验证切分 训练 Boosting 用 SHAP 等解释并交付业务 部署与监控。
② 早停(Early Stopping)
树不是越多越好——继续加会走向背答案。验证集损失不再提升甚至变差时,应及时停止,保留最优轮次。
③ 指标对齐业务目标
- 分类(流失、欺诈): 别只看准确率,结合 AUC、F1 等。
- 回归(销量、价格): 用 RMSE / MAE 与真实尺度对话。