XGBoost 结果在单调预测器变换下不是不变的?

数据挖掘 xgboost
2021-09-27 21:13:23

许多人认为,基于树的方法在预测变量的单调变换下是不变的。但是最近我读了一篇论文(https://arxiv.org/pdf/1611.04561.pdf,后面简称为arxiv论文)说它是否不变取决于如何选择分割阈值(有三种方法) ,并且根据这篇论文,xgboost 在变换下是不变的,因为它使用左扫法。这在 pp.2 的最后一段和 pp.3 的第一段中提到。

但是当我阅读 Chen 的原始 xgboost 论文时,拆分算法看起来比 arxiv 论文中提到的任何方法都复杂得多,并且看起来它应该对转换敏感。我已经对几个数据集尝试了 xgboost 回归,如果我打开了列子采样,我确实会看到预测变量转换的不同结果。

谁能给我一些关于这个话题的确认?我主要对 arxiv 论文感到困惑。

1个回答

一个快速的实验表明 xgboost 在其训练集中的特征值之间的中点进行拆分:

https://github.com/bmreiniger/datascience.stackexchange/blob/master/74634.ipynb


事实证明,历史相对复杂,而且可能还在继续。

这个 github 问题中,有迹象表明中点拆分仅适用于小基数离散特征。该代码在代码的当前(发布时)版本中消失了。它在pull 5251commit 969ebbc中被删除,进一步的讨论被推到issue 5096中。

在相反的方向,该函数AddCutPoints并不总是存在,但同样的离散/连续优化显示在这里,提交 2017 年 1 月。所以似乎使用了历史上的左端点(至少对于连续数据),支持 arXiv 论文,但目前全线使用中点。

上面的实验以 Wisconsin Breast Cancer 数据集结束,该数据集具有超过 16 个相关特征的值,并且仍然在中点出现分裂。


最后,就单调性说几句话。首先,正如 arXiv 论文所提到的,这完全是一个模型将如何应用于看不见的数据以及落在训练数据中的值之间的特征值的问题。使用左端点将始终将这样的值放在拆分的右侧,因此任何单调递增的转换都不会影响这一点。单调递减的变换将完全逆转这一点。使用中点(以及左/右端点,取决于变换的符号)时,线性(/仿射)变换将保留行为。