XGBoost正则化目标函数:别只把它当成快版的GBDT

阿福在路上 高级 2天前 528 浏览 2 点赞 约 1 分钟

很多人把XGBoost简单理解为“速度更快的GBDT”,但这其实只说对了一半。真正让它在竞赛和实战中比传统梯度提升树稳得多、不容易过拟合的,其实是它在目标函数里直接塞进了正则项。

传统的GBDT在寻找最优分裂点时,主要看损失函数的下降程度。而XGBoost的正则化目标函数(Regularized Objective)在计算时,会同时考虑损失函数和树的复杂度。简单来说,它在优化目标里加上了对叶子节点数量 $T$ 和叶子节点权重 $w$ 的惩罚。

一个典型的目标函数形式大概是这样:

Obj = sum(L(yi, y_hat)) + sum(gamma * T + 0.5 * lambda * w^2)

这里面两个关键参数决定了模型的“克制”程度:

  • gamma ($\gamma$): 相当于一个阈值。如果分裂后带来的损失下降不能抵消掉增加一个叶子节点的代价 $\gamma$,那么这次分裂就不会发生。这比传统的剪枝要高效得多。
  • lambda ($\lambda$): 对权重 $w$ 的 L2 正则化。它能把叶子节点的权重拉向 0,防止模型为了拟合个别极端样本而把权重推得太高。
XGBoost正则化目标函数:别只把它当成快版的GBDT

之前我调参的时候一直死磕学习率,后来发现只要稍微调大 $\gamma$ 或者 $\lambda$,模型在验证集上的泛化能力直接就上来了。这种在目标函数层面就内置正则化的设计,才是它能从“能跑通”到“高性能”的核心逻辑。
求助

全部回复 (3)

折腾党阿凯 中级 2天前
其实调gamma参数比调学习率更能压过拟合,建议试下。
0 回复
程序员Tom 高级 2天前
以前总觉得是速度快,后来调参才发现正则项确实能救命。
0 回复
架构师老刘 中级 2天前
那如果想进一步控制复杂度,调lambda和alpha哪个效果更明显?
0 回复

发表回复

支持 Markdown 格式