梯度提升树:“变量越大越好”?


10

从XGBoost 的教程中,我认为当每棵树长大时,将扫描所有变量以选择拆分节点,然后选择具有最大增益拆分的变量。所以我的问题是,如果我将一些噪声变量添加到数据集中,这些噪声变量会影响变量选择(对于每棵树生长)吗?我的逻辑是,由于这些噪声变量根本不会给出最大的增益分配,因此将永远不会选择它们,因此它们不会影响树的生长。

如果答案是肯定的,那么“ XGBoost变量越多越好”是真的吗?我们不考虑培训时间。

同样,如果答案是肯定的,那么“我们不需要从模型中滤除非重要变量”是否成立。

谢谢!

Answers:


11

我的逻辑是,因为这些噪声变量根本不会给出最大的增益分配,所以将永远不会选择它们,因此它们不会影响树的生长。

这仅对于非常大的,接近无限的数据集是完全正确的,其中训练集中的样本数量可以很好地覆盖所有变化。在实践中,如果维数足够大,最终会带来很多采样噪声,因为数据越多维数,对可能示例的覆盖范围就越弱。

最终会偶然与目标变量相关联弱变量上的噪声可能会限制增强算法的效果,而这在决策树中的更深层拆分中更容易发生,在该决策树中,已评估的数据已被分组为一个小的子集。

添加的变量越多,您获得的弱相关变量就越有可能恰好适合某些特定组合的分割选择算法,然后创建学习此噪声而不是预期信号的树,最终一概而论。

实际上,我发现XGBoost在小范围内对噪声非常鲁棒。但是,我也发现,出于类似的原因,它有时会选择质量较差的工程变量,而不是关联性更好的数据。因此,这不是“变量越多对XGBoost越好”的算法,您确实需要考虑可能的低质量功能。


非常好。谢谢!那么,根据您的经验,您认为在安装XGBoost之前必须进行功能选择吗?
WCMC'3

@弗兰克:也许吧。您同样可以从全套功能入手,并使用xgboost变量重要性报告来帮助您。但总的来说,XGBoost并不能完全避免您对功能选择和工程设计的任何通常的担忧。
尼尔·斯莱特

@Neil,您好,只要有机会,请访问datascience.stackexchange.com/questions/17288/…。谢谢。
WCMC'3

@弗兰克:昨天我已经做了,留下一个问题要澄清,因为数字似乎有些偏离。
尼尔·斯莱特

@Neil,您好,由于上一个发布者没有回答您的问题,因此我在这里用自己的项目重新发布了它。我在那里也提供了数据集和R脚本,希望对其他人来说更方便理解问题。如果您想提供一些帮助,我们将不胜感激。
WCMC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.