【问题标题】:sparse.model.matrix creating inconsistent outputsparse.model.matrix 创建不一致的输出
【发布时间】: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+00stry.C=-4.09e-16,而生产服务器有stry.L = -3.51e-17stry.C=1.75e-16。我真的不明白这些数字是从哪里来的(我原以为它们应该是二进制文件),但是在 Linux 和 Windows 上 `sparse.model.matrix' 处理非常小的数字的方式会有所不同吗?
  • 是的,这可能是操作系统的差异。它对模型预测有很大影响吗?这些数字仍然很小,无论是-4.09e-16 还是1.75e-16,我都不会想到这会对预测误差产生任何明显的影响
  • 差异很小,我一般不会担心。但是,由于各种业务原因,数据不变但预测值不同的观察结果会导致许多问题。

标签: r matrix sparse-matrix


【解决方案1】:

你被两个问题的结合所困扰:

(1) 浮点计算是inherently sensitive to small differences (platform, compiler, compiler settings ...) (2) R 中的有序因子使用 正交多项式 对比(参见 ?contr.poly、Venables 和 Ripley Modern Applied Statistics with Shere),其中涉及浮动-点计算。

dd <- data.frame(x=ordered(0:2))
> Matrix::sparse.model.matrix(~x,dd)
3 x 3 sparse Matrix of class "dgCMatrix"
  (Intercept)           x.L        x.Q
1           1 -7.071068e-01  0.4082483
2           1 -7.850462e-17 -0.8164966
3           1  7.071068e-01  0.4082483

您可以看到这里的条目之一接近但不完全等于零。到目前为止,我实际上还没有想出一个例子来显示我方便使用的两个平台(Ubuntu Linux 和 MacOS)之间的差异,但这几乎肯定是你问题的根源;接近零的条目在一个平台上被计算为完全为零,但在另一个平台上则不然。

这个问题可能没有完美的解决方案,但zapsmall() 会将小条目转换为零,drop0 会将它们从显式转换为隐式(结构)零条目,所以drop0(zapsmall(mm)) 可能会工作......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 2019-11-07
    • 2018-04-30
    • 2013-04-15
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    相关资源
    最近更新 更多