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

数据挖掘 xgboost 自习
2021-10-01 05:22:30

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

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

另外,如果答案是肯定的,那么“我们不需要从模型中过滤掉不重要的变量”是真的吗?

谢谢!

1个回答

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

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

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

添加的变量越多,就越有可能得到弱相关的变量,这些变量恰好适合某些特定组合的拆分选择算法,然后创建学习这种噪声而不是预期信号的树,最终概括得很糟糕。

在实践中,我发现 XGBoost 在小范围内对噪声非常稳健。但是,我还发现,出于类似的原因,它有时会选择质量较差的工程变量,而不是更好的相关数据。因此,它不是一种“变量越多对 XGBoost 越好”的算法,您确实需要关心可能的低质量特征。