【发布时间】:2020-05-10 22:27:45
【问题描述】:
我在两台不同的服务器上有一个xgboost 模型——一个测试服务器和一个生产服务器。每个服务器都有完全相同的数据和完全相同的代码,但是当我将相同的模型应用于每个环境中的相同数据时,我得到的结果略有不同。我们需要结果相同。
我发现下一行返回的稀疏矩阵对象在每台服务器上都不一样:
mm <- sparse.model.matrix(y ~ ., data = df.new)[,-1]
测试服务器上的mm 具有长度为182 的@i 和@x,而生产服务器上的mm 具有长度为184 的@i 和@x。我再次比较了来自两台服务器的df.new,它们是相同的。
我已尝试在生产服务器上降级 Matrix 包以使版本匹配,但仍会产生不同的结果。我剩下的唯一想法是匹配每个包的版本。
有人对可能发生的事情有什么建议吗?不幸的是,我无法共享数据,但如果有帮助,它是 227 个混合类型的变量(转换为稀疏模型矩阵时为 775 个)。很多变量大多为0。
不知道有没有区别,但是测试服务器是Windows,生产服务器是Linux。
【问题讨论】:
-
xgboost模型是加载到服务器上还是每次都创建?它可以在模型中进行一些采样,因此使用相同的代码和数据,除非控制种子,否则它可以产生不同的模型输出 -
模型已加载,因此输出应该相同。如果我从每台服务器获取 smm 并在本地机器上通过模型运行它们,我会遇到同样的问题(即每个预测值略有不同 - 始终如此)
-
我有一个有序因子变量
stry,它的值可以是:1、1.5、2、2.5、3。新数据具有stry=2的观察值,但一旦转换为稀疏矩阵测试服务器有stry.L = 0.00e+00和stry.C=-4.09e-16,而生产服务器有stry.L = -3.51e-17和stry.C=1.75e-16。我真的不明白这些数字是从哪里来的(我原以为它们应该是二进制文件),但是在 Linux 和 Windows 上 `sparse.model.matrix' 处理非常小的数字的方式会有所不同吗? -
是的,这可能是操作系统的差异。它对模型预测有很大影响吗?这些数字仍然很小,无论是
-4.09e-16还是1.75e-16,我都不会想到这会对预测误差产生任何明显的影响 -
差异很小,我一般不会担心。但是,由于各种业务原因,数据不变但预测值不同的观察结果会导致许多问题。
标签: r matrix sparse-matrix