许多人认为,基于树的方法在预测器的单调变换下是不变的。但是最近我读了一篇论文(https://arxiv.org/pdf/1611.04561.pdf,后来称为arxiv论文),它说它是否不变取决于如何选择分割阈值(有三种方法),根据本文,xgboost在变换下是不变的,因为它使用的是扫描左方法。在第2页的最后一段和第3页的第1段中提到了这一点。
但是当我读到陈的最初的xgboost论文时,分裂算法看起来比arxiv论文中提到的任何方法都要复杂得多,它看起来应该对转换很敏感。我已经尝试过一些数据集的回归,如果我打开了列次抽样,我确实看到了预测器转换的不同结果。
有人能给我一些关于这个话题的证实吗?我主要是被阿西夫的论文弄糊涂了。
发布于 2020-05-26 03:45:39
一个快速的实验表明,xgboost在它的训练集中的一个特征值之间的中点处发生了分裂:
https://github.com/bmreiniger/datascience.stackexchange/blob/master/74634.ipynb
事实证明,历史是相对复杂的,而且可能还在继续。
在这个github问题中,中点分裂只适用于小基数离散特性。该代码都不见了在当前(发布时)版本的代码中。它在拉5251,提交969提交中被删除,并进一步讨论了第5096期。
相反,函数AddCutPoints并不总是存在,但相同的离散/连续优化出现在这里,提交2017年1月。因此,历史上似乎使用了左端点(至少用于连续数据),支持arXiv文件,但目前的中点是全面使用的。
上面的实验结束于威斯康星州乳腺癌数据集,该数据集的相关特征有16个以上的值,而且在中点仍有分裂。
最后,关于单调性的几句话。首先,正如arXiv论文所提到的,这完全是一个模型将如何应用于不可见数据和训练数据中的值之间的特性值的问题。使用左端点总是会将这样的值放在拆分的右侧,因此任何单调递增的转换都不会影响到这一点。单调递减变换将完全扭转这种情况。线性(/affine)转换在使用中点(以及左/右端点,取决于转换的符号)时将保留行为。
https://datascience.stackexchange.com/questions/32638
复制相似问题