所以我尝试使用Neuralnet包来了解它的用法和可能的实现。
我在这里可以使用SPECTF听力数据集: https://archive.ics.uci.edu/ml/machine-learning-databases/spect/SPECTF.test
我对预测感兴趣的变量位于第一列。 实际上我合并了SPECTF.test和SPECTF.train,然后在test_和train_中的R中随机分割它们(所有变量都被缩放)。这是他们的样子:
> str(train_)
'data.frame': 200 obs. of 45 variables:
$ V1 : num 1 1 0 1 1 1 1 1 1 1 ...
$ V2 : num 0.783 0.75 0.733 0.767 0.75 ...
$ V3 : num 0.75 0.633 0.6 0.783 0.7 ...
$ V4 : num 0.636 0.886 0.795 0.841 0.545 ...
...
$ V45: num 0.71 0.855 0.797 0.913 0.754 ...
> str(test_)
'data.frame': 67 obs. of 45 variables:
$ V1 : num 0 0 0 0 0 0 0 0 0 0 ...
$ V2 : num 0.583 0.6 0.6 0.633 0.683 ...
$ V3 : num 0.7 0.617 0.783 0.917 0.617 ...
$ V4 : num 0.955 0.705 0.705 0.75 0.727 ...
...
$ V45: num 0.899 0.812 0.899 0.797 0.797 ...
按照R-blogging教程,我按如下方式设置神经网络:
n <- names(train_)
f <- as.formula(paste("train_[,1] ~", paste(n[!n %in% "train_[,1]"], collapse = " + ")))
nn <- neuralnet(f,data=train_,hidden=2,linear.output=T)
到目前为止,它工作顺利,然后我尝试对测试数据进行预测:
pr.nn <- compute(nn,test_[,2:45])
但它让我回到了这个错误,我不明白如何解决:
> pr.nn <- compute(nn,test_[,2:45])
Error in neurons[[i]] %*% weights[[i]] : non-conformable arguments
非常感谢您的帮助和所有工作!这个社区是一个很好的资源!
答案 0 :(得分:0)
您的问题在于您创建公式f。让我们来看看你正在创建什么样的公式
const reference
乍一看这看起来不错。但是,如果你仔细观察,你会看到X1作为响应和预测器包含在你的公式中,这将是一个问题。
如果你想选择X1以外的每个变量,有一种更简单的方法:
f <- as.formula(paste("train_[,1] ~", paste(n[!n %in% "train_[,1]"], collapse = " + ")))
> f
train_[, 1] ~ 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 +
X31 + X32 + X33 + X34 + X35 + X36 + X37 + X38 + X39 + X40 +
X41 + X42 + X43 + X44 + X45
您已经创建了一个变量名称向量,因此使用n [1]将获取第一个变量名称,n [-1]将获取其他所有名称。
我使用一些虚拟数据对此进行了测试,并且在使用compute()时没有标记任何错误,因此这应该可以解决您的问题。