我在 xgboost 教程中遇到了一条评论。它说“请记住,当您想使用浅(低 max_depth)树时,伽玛会带来改进”。
我的理解是更高的伽玛更高的正则化。如果我们有很深的(高 max_depth)树,就会有更多的过拟合倾向。为什么伽马可以使用浅树来提高性能?
我在 xgboost 教程中遇到了一条评论。它说“请记住,当您想使用浅(低 max_depth)树时,伽玛会带来改进”。
我的理解是更高的伽玛更高的正则化。如果我们有很深的(高 max_depth)树,就会有更多的过拟合倾向。为什么伽马可以使用浅树来提高性能?
正如您正确注意到的那样,gamma
是一个正则化参数。与使用“树内”信息进行正则化相比min_child_weight
,它通过使用“跨树”信息进行正则化来工作。特别是通过观察损失变化的典型大小,我们可以适当地调整,以便我们指示我们的树仅在相关增益大于或等于时才添加节点。在Chen 相当著名的 2014 年 XGBoost 演讲中,第 33 页将称为“引入额外叶的复杂性成本”。max_depth
gamma
gamma
现在,我们会调整的一个典型情况gamma
是当我们尝试使用浅树来对抗过度拟合时。对抗过度拟合的明显方法是使用较浅的树(即 lower max_depth
),因此与调整gamma
相关的上下文是“当您想要使用浅(低 max_depth)树时”。的确,这有点重言式,但实际上,如果我们期望更深的树是有益的,那么调整gamma
虽然在正则化方面仍然有效,但也会给我们的学习过程带来不必要的负担。另一方面,如果我们错误地使用了更深的树,除非我们非常积极地进行正则化,否则我们可能会意外地到达一个局部最小值,而无法拯救我们。因此,确实与“浅树情况”更相关。:)可以在此处找到的精彩博客文章: xgboost:“嗨,我是 Gamma。我能为你做什么?” - 和正则化的调整。
最后提醒一句:请注意,强烈依赖于实际估计的参数和(训练)数据。这是因为我们的响应变量的规模有效地决定了我们的损失函数的规模以及我们认为有意义的损失函数的后续减少(即
Gamma通过限制何时进行分裂来导致较浅的树木(或者至少是叶子较少的树木)。
我认为本教程并不完全清楚/准确。例如,您所质疑的那个之前的项目符号指出伽玛惩罚大系数,但事实并非如此(阿尔法和拉姆达惩罚系数,伽玛只惩罚叶子的数量)。再往下看,alpha 是权重的 L1 惩罚,但权重是每个叶子的权重,而不是单个特征,因此 alpha 不像 Lasso 那样执行特征选择。(我想,虽然我还没有看到它讨论过,它可能会强制分割候选的叶子系数为零,导致算法忽略分割该特征,也许从长远来看完全跳过该特征?)