nrow [w] * ncol [w]中的错误:二元运算符

时间:2018-04-06 18:33:05

标签: r neural-network

更新:当查看足够小的阈值(即等于或低于默认值0.01)时,此错误似乎是覆盖非收敛的一揽子声明。监控threshold后增加stepmaxlifesign可以使算法收敛,尽管准确度会受到影响。

在前面,这不是一个重复的问题,因为我在这里查看了所有其他16个类似的问题/答案,这些解决方案要么不完全适用,要么不解决这个看似简单的问题。我找到的最接近的是Getting errors while using neuralnet function,它有一些很好的见解,但是尽管在代码中更改了参数,但仍然给我留下了相同的唠叨错误。

数据样本(仅前几行):

X1  X2  X3  X4  X5  X6  X7  X8  X9  X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30
18  1   2   4   1   5   5   5   1   2   1   1   1   1   1   1   1   1   1   0   0   0   0   0   0   0   0   0   0   0
19  2   1   1   1   2   1   1   1   2   1   1   1   1   1   1   1   1   1   0   0   0   0   0   0   0   0   0   0   0
20  2   1   1   1   5   3   5   1   2   4   1   4   4   2   1   3   1   1   2   3   0   1   1   0   0   0   1   0   0
20  2   1   1   1   3   4   4   1   2   1   1   2   2   1   1   4   1   1   1   0   0   0   0   0   0   0   0   0   0
34  1   2   2   1   2   2   2   1   2   1   1   1   1   1   1   1   1   1   0   2   0   0   0   0   0   0   0   0   0
25  2   1   1   2   3   5   3   1   2   2   1   4   3   1   2   1   1   1   2   2   0   0   0   0   0   0   0   0   1
19  1   2   1   2   2   4   2   1   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
21  1   2   1   2   2   4   3   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
23  1   2   1   2   2   3   4   1   2   2   2   2   2   1   3   2   2   1   2   10  0   0   0   0   1   1   1   1   0
19  2   1   1   2   2   2   2   1   2   2   2   1   2   1   2   1   1   1   2   14  0   0   0   0   1   1   1   0   0
28  2   1   1   2   1   3   3   1   2   1   0   1   4   1   1   1   1   1   1   0   0   0   0   0   0   0   0   0   0
19  1   2   1   2   1   3   2   1   2   2   2   2   2   2   3   4   2   1   2   12  0   1   1   0   1   1   1   0   0
18  1   2   1   1   3   4   1   1   2   2   2   1   3   2   1   1   1   1   2   17  0   0   0   1   0   1   1   0   0
20  1   2   1   2   3   4   1   1   1   1   1   1   1   1   1   1   1   1   0   5   0   0   0   0   0   0   0   0   0
20  1   2   1   1   1   1   3   1   2   4   4   4   4   4   4   4   4   2   4   16  1   0   1   1   0   1   1   0   1

数据描述: 标记数据和所有数字,因此通过sapply(df, is.numeric)进行检查,我们得到数据框中每个变量的TRUE

从神经网络上的一个R-Blogger页面获取的代码:

set.seed(300)
cv.error <- NULL
k <- 10
pbar <- create_progress_bar('text')
pbar$init(k)
for(i in 1:k){
    index <- sample(1:nrow( df),round(0.9*nrow( df)))
    train.cv <- scaled[index,]
    test.cv <- scaled[-index,]
    nn <- neuralnet(f,data=train.cv,hidden=c(5,2),linear.output=T)
    pr.nn <- neuralnet::compute(nn,test.cv[,2:30])
    pr.nn <- pr.nn$net.result*(max( df$X30)-min( df$X30))+min( df$X30)
    test.cv.r <- (test.cv$X30)*(max( df$X30)-min( df$X30))+min( df$X30)
    cv.error[i] <- sum((test.cv.r - pr.nn)^2)/nrow(test.cv)
    pbar$step()
}

我在这个数据框中使用变量X30作为标签,当我使用严重偏差的数据时,我能够相对快速地收集此代码,即5分钟。但是,使用此数据集时,代码不会因为此错误而收敛:

Error in nrow[w] * ncol[w] : non-numeric argument to binary operator

回溯返回以下内容:

2. relist(weights, nrow.weights, ncol.weights)
1. neuralnet::compute(nn, test.cv[, 2:30])

我还尝试取消列表并将数据框重新组合为数字,以防万一最初出现问题,但这并没有解决问题。

0 个答案:

没有答案