我们的研究部门已经创建了一个Shiny应用程序,该应用程序允许用户根据选定的标准获取事件的概率。它基于使用nnet库在脚本开头创建的神经网络。我已经设置了基本的Shiny Server来托管使用CentOS进行生产的应用程序。开发人员使用Windows工作站上的RStudio进行开发。
我们发现,当研究人员将他们的app.R脚本和支持CSV复制到CentOS框中,并在浏览器中查看该应用程序时,该应用程序返回的结果与他们在开发工作站上看到的结果大不相同。该应用程序在两种环境下均可正常运行,但概率不同!
在调试时,我已经比较了RStudio在两个盒子上生成的nnet。每个OS的权重和残差都存在显着差异。种子是相同的,因为脚本不会从一个操作系统更改为另一个操作系统。
我们已经检查并匹配了安装在所有包装盒上的R的版本-R 3.5.1(编辑-3.6.0)。我们还确保了该应用程序中使用的所有库均具有完全相同的版本。
我们已经尝试在Windows-1252和UTF-8所用的read.csv()调用中添加编码args,以确保这不是编码问题。
我们已经降低了CSV源文件中的值的精度,因为存在一个浮点问题,因为这些值本来是16位精度,所以我们不希望出现这种情况,并且我们不知道是否存在一些截断或四舍五入。
model.data <- read.csv('model.data.csv')
set.seed(110)
cut <- sample(2, nrow(model.data), replace = TRUE, prob = c(.90, .10))
train <- model.data[cut == 1,]
test <- model.data[cut == 2,]
train.x <- train[,-12]
train.y <- train[,12]
test.x <- test[,-12]
test.y <- test[,12]
nn.wp <- nnet(train.x, train.y,
decay = .10,
size = 4,
skip = 1)
从CSV采样数据(约55000行):
"TLG","TLG.log","OffLeadBefore","S.Transform","D.x","TG.x","DEZ","OTTO","DeDTTO","eff.time","ADV","OTW"
3600,8.1886891244442,0,0,1,10,75,3,3,0,1.36193576224564,1
3133,8.04974629095219,-3,-0.0535970710596484,1,10,90,2,3,0,-1.36193576224564,0
3109,8.04205641005875,-3,-0.0538035452921865,1,10,63,2,3,0,-1.36193576224564,0
预期结果是,生成的nnet模型在两个操作系统上都应匹配,因此应用程序本身将产生正确的概率。
编辑 我们还验证了相同的种子在两个框上也返回了相同的值。