第一次使用带有SPECT心脏数据集的神经网络R包

时间:2016-06-01 14:40:44

标签: r neural-network prediction

所以我尝试使用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

非常感谢您的帮助和所有工作!这个社区是一个很好的资源!

1 个答案:

答案 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()时没有标记任何错误,因此这应该可以解决您的问题。