R nnet包不再起作用了

时间:2016-10-13 08:28:59

标签: r nnet rattle

我知道这是一个奇怪的问题,我甚至不能给MRE,但希望其他人遇到类似问题并解决它,我发布了这个问题。

我一直在使用Rattle和所有可用型号。 我想使用nnet standalone,自己检查结果并更好地控制参数。

在某些时候,我打开熵开关(我没有那么多的变量和因素)导致错误。我将开关切换回默认值(FALSE)但从那以后nnet从未正常工作。即使在Rattle内部,它也不适用于我使用过100次的训练集。我能够得到概率分数,现在Rattle给了我所有其他模型的概率分数但不是nnet。 Nnet仍然会产生二进制输出,即使在Rattle Score选项中选择了'Probability'。

有没有人遇到过与nnet类似的问题?

修改:代码部分为:

mnnet <- nnet(response1 ~ ., data=dftr, size=10, skip=TRUE, MaxNWts=100000, trace=FALSE, maxit=100)

增加MaxNWts似乎正在解决too many weights的错误,但现在需要花费很长时间才能运行并消耗大量内存。使用相同的数据集,我能够在一个不到一分钟的循环内运行许多训练大小的可能性。 (我在一个16GB的Mac Book Pro上)我们正在讨论一组~10000行和大约20个功能。

之前完美运作的示例代码:

pldata <- data.frame(nobs = NA,
                 ntrain = NA,
                 ntest = NA,
                 error = NA
)
#
obssize <- seq(0.8, 1.0, 0.1)
trsize <- seq(0.5, 0.8, 0.05)
#
set.seed(1234)
for (i in obssize){
  ind1 <- sample(nrow(df), i * nrow(df))
  dfp <- df[ind1,]
  size <- nrow(dfp)
  for (j in trsize){
    ind2 <- sample(nrow(dfp), j * nrow(dfp))
    dftr <- dfp[ind2, ]
    dftest <- dfp[-ind2, ]
    mnnet <- nnet(response1 ~ ., data=dftr, size=20, skip=TRUE, MaxNWts=10000, trace=FALSE, maxit=100)
    nnetp <- predict(mnnet, newdata = dftest)
    nnetp <- factor(nnetp, levels = levels(dftr$response1))
    cfm <- table(nnetp, dftest$response1)
    mcrate <- (length(nnetp) - sum(diag(cfm))) / length(nnetp)
    trainsize <- nrow(dftr)
    testsize <- nrow(dftest)
    temp <- data.frame(nobs = size, ntrain = trainsize, ntest =  testsize, error = mcrate)
    pldata <- rbind(pldata, temp)           
  }
}
#
pldata <- pldata[2:nrow(pldata),]

现在模型构建部件无法正常工作,更不用说将其置于循环中了。

编辑2:检查参数并发布会发生的事情:

mnnet <- nnet(response1 ~ ., data=dftr, size=10, skip=TRUE, MaxNWts=100000, trace=FALSE, maxit=100, entropy = FALSE)

> mnnet$entropy

[1] TRUE

一旦熵设置为“TRUE”,似乎无法将其设置为默认值。

0 个答案:

没有答案