XGBoost的模型复杂度是由叶子节点个数和叶子节点值大小组成,叶子节点个数好理解,模型越复杂叶子节点个数自然就越多,但是叶子节点的值有点难理解,只能说叶子节点值越大,整个集成模型依靠这个若分类器的权重就越大


这和线性回归以及逻辑回归的原理是非常类似的,xgb最终的决策就是w1x1+w2x2+......wnxn,如果是二分类再套一个sigmoid,其中n是叶子结点数量,w是叶子结点的值,只不过这里的x都是1或0而已,假设一个极端的情况,第一个叶子结点对应的w1=1000,其它叶子结点权重为0.1,则显然w1对应叶子结点对最终的输出起到绝大部分的贡献,那么如果第一个叶子结点对应的基树拟合的过头,很容易导致整体的输出方差增大引发过拟合。


感觉有些回答讲得太过多无关内容,或者没有回答到题目,仅凭个人理解强答一波。

既然题主提出了这样的问题,证明应该是对XGBoost有一定的了解,XGBoost可以算是GBDT的一种变种,我们都知道,无论是boosting模型是还是bagging模型,都是将成百上千个基模型进行相加,即:

[公式]

其中 [公式] 表示第m棵决策树, [公式] 为决策树的参数,M为树的个数(即n_estimators参数)。

假设现在是针对某个回归任务,某条数据的y(标签)为5,那么下面两种拟合方案:

  1. 5 = 0.3 + 0.2 + 0.5 + 0.3 + 0.2 + 0.5 + 0.3 + 0.2 + 0.5 + 0.4 + 0.2 + 0.5 + 0.3 + 0.2 + 0.6
  2. 5 = 3 + 3

很明显,是不是直觉上会认为第一种方案会更好?因为每个基模型的值更小,就意味著每次向目标label的迈步就更「谨慎」,不容易超出,可以结合梯度下降的思想进行理解(每次对权值w进行更新的时候就会乘以一个学习率,防止「步子迈的太大了」)。所以这就是为什么需要将叶子节点值加入正则项,限制其大小。

同时,我们也应该知道XGBoost中的学习率,即对应的eta参数,也是起著类似的作用将我们每次拟合的步幅进一步缩小,防止过拟合,所以我们也会发现,当减小eta时,会发现我们需要训练更多的基模型进行拟合:

[公式]

以上,希望对您有帮助。


因为XGB中定义模型的复杂度的公式是 [公式]

[公式] 就是你说的叶子节点个数, [公式] 就是叶子节点的得分,这里用了L2-norm,类似RidgeRegression, [公式] 大模型的复杂度也会提升,相当于这个叶子节点的权重提高了,就也会过拟合

十三:从GBDT到XGBoost?

zhuanlan.zhihu.com图标

过拟合是?

是指模型结构相对数据复杂,模型学习能力强容易学习到片面统计杂讯。

xgboost模型结构复杂度的惩罚项:

叶子节点权重过大的影响?

当模型的叶子节点权重过大,意味著模型越容易依赖某部分数据特征,

以方差-偏差分解分析,不同数据训练的模型预测结果的分布波动(方差)较大,而缺失足够的泛化能力。即过拟合。


GBDT模型最终输出是多个提升树输出的和,其中某个树的输出过大会导致最终输出方差变大,即过拟合。


论文里面说了,可以尝试其他的正则化方法,只不过L2的正则的效果在实验中是最好的。个人感觉有两个直观想法导致推出这样的正则化,一个是要考虑方便跟前面的泰勒展开进行合并计算,另外一个就是能保证后续的树能有残差学习。ensemble的方法一个大前提就是弱分类器不能够一次性拟合当前的数据,如果当前的数据都已经能被一次性拟合的很好了,那这个分类器对于这个数据就不是弱分类器了。L2正则的好处就是把预测值限定在0附近,因此数据只能被多棵树一点点慢慢的拟合出来,尤其是对于ground truth的方差很大时,此时数据的多样性也很强,少量的树肯定就拟合不了。


因为叶子节点分的越细,就对那个数据集分的越好,但是,就只是针对那个数据集


步子大了,容易走到局部最优点,出不来了。


boosting训练过程中每棵树都要求是弱学习器,避免单棵树过量学习样本信息,取而代之的方法是逐渐增加树的数量,慢慢的减少偏差。如果叶子节点值过大,其实就意味著著这棵树可能拟合的过量了,可以想一想如果是个回归树,叶子节点值越大,是不是残差越小,下一棵树可学习的是不是就越少,而且如果是前面的树拟合多了,后面的树是无法调整的这种过拟合现象,因此会对叶子节点的值进行正则化处理。甚至会添加一个步长参数(类似梯度下降中的步长参数),减缓学习速度,从而防止过拟合。


推荐阅读:
相关文章