我在工作中使用的 xgboost 有这个问题。我的任务是将当前在 R 中运行的一段代码移植到 python。
代码的作用:
我的目标是使用 XGBoost 来确定增益最大的特征。我确保 XGBoost 的输入在 R 和 python 中是相同的。 XGBoost 运行大约 100 次(在不同的数据上),每次我通过增益提取 30 个最佳特征。
我的问题 这是:
R 和 python 中的输入是相同的。然而,python 和 R 输出了截然不同的特征(无论是每轮的特征总数,还是选择了哪些特征)。它们只共享大约 50% 的功能。我的参数是一样的,我没有使用任何样本,所以没有随机性。
另外,我注意到的另一件事 - 与具有相同参数的 R 相比,XGBoost 在 python 中速度较慢。这是一个已知问题吗?
R parameters
Python parameters
我一直试图环顾四周,但没有发现任何人有类似的问题。我不能分享数据或代码,因为它是 secret 的。有人知道为什么功能差异如此之大吗?
R 版本:3.4.3
XGBoost R 版本:0.6.4.1
python 版本:3.6.5
XGBoost python 版本:0.71
在 Windows 上运行。
最佳答案
您在 R 代码中设置内部种子,而不是在 Python 代码中设置。
更多的问题可能是 Python 和 R 也可能使用不同的随机数生成器,因此尽管始终设置内部和外部种子,但您可以获得不同的序列。 This线程可能会在这方面有所帮助。
我还会猜测未在一个模型中选择的变量提供与在另一个模型中选择的变量相似的信息,其中以一种或另一种方式交换变量不应显着影响模型性能。虽然我不知道 R 模型和 Python 模型是否表现相同?
关于python - XGBoost R 与 python - 不同的性能和功能重要性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50723605/