使用神经网络预测新数据的分类

10

我正在尝试使用R中的neuralnet包训练神经网络,并使用该网络预测测试数据集的类别(0或1)。

我拥有的数据如下:

对于训练集:

x1          x2          x3          x4          y
0.557       0.6217009   0.4839      0.5606936   0
0.6549      0.6826347   0.4424      0.4117647   1
0.529       0.5744681   0.5017      0.4148148   1
0.6016771   0.5737052   0.3526971   0.3369565   1
0.6353945   0.6445013   0.5404255   0.464       1
0.5735294   0.6440678   0.4385965   0.5698925   1
0.5252      0.5900621   0.4412      0.448       0
0.7258687   0.7022059   0.5347222   0.4498645   1

还有更多。

测试集与训练数据完全相同,只是值不同(如果需要,我可以发布一些样本)。

我使用的代码如下:

> library(neuralnet)
> nn <- neuralnet(y ~ x1+x2+x3+x4, data=train, hidden=2, err.fct="ce", linear.output=FALSE)
> plot(nn)
> compute(nn, test)
网络已经训练好了,我也可以成功地绘制出网络,但是 compute 却无法运行。当我运行 compute 时,它会给出以下错误信息:
Error in neurons[[i]] %*% weights[[i]] : non-conformable arguments

基本上,我正在尝试训练一个神经网络以成功地对新的测试数据进行分类。

欢迎任何帮助。

编辑:

测试对象的样本如下:

x1          x2  x3          x4          y
0.5822  0.6591  0.6445013   0.464       1
0.4082  0.5388  0.5384616   0.4615385   0
0.4481  0.5438  0.6072289   0.5400844   1
0.4416  0.5034  0.5576923   0.3757576   1
0.5038  0.6878  0.7380952   0.5784314   1
0.4678  0.5219  0.5609756   0.3636364   1
0.5089  0.5775  0.6183844   0.5462555   1
0.4844  0.7117  0.6875      0.4823529   1
0.4098  0.711   0.6801471   0.4722222   1

我也尝试过将y列清空不包含任何值。


5
请尝试将该数据删除y列后再进行测试,即使它们为空也不会影响可兼容数组的测试。 - IRTFM
3个回答

19

在没有对“test”对象进行良好描述的情况下很难说,但您能否查看是否会产生更好的结果:

compute(nn, test[, 1:4])

2
这样做就可以了,从测试集中删除y列也是如此。非常感谢! - user1074057
借鉴这个方法:如果您使用的公式没有涉及到数据框中的所有列,您需要执行以下操作:mf <- model.frame(fmla, data=DF); compute(nn, mf[,2:ncol(mf)])(取决于哪一列是您的目标)。 - rhombidodecahedron
@42 我能否使用巨大的训练数据集的随机子集,多次对神经网络对象(例如此处的nn)进行训练?该对象是否会存储所有连续的训练结果? - Newbie

7

我曾遇到同样的问题。我加入了debugonce(neuralnet),结果发现neuralnet在将来自不同大小的矩阵相乘。

我通过以下函数删除测试中的y列,解决了这个问题。

columns <- c("x1","x2","x3","x4")
covariate <- subset(test, select = columns)

以前从未听说过 debugonce()。太棒了! - Ant

0

我知道这是一篇旧帖子,但我找到了一件独特的东西,可能会在未来帮助某些人。认为这篇文章最适用,因为它引发了相同的错误。

数据集的缩放必须转换回数据框以便在计算中使用。

#scaled data
scaledData=scale(data)
nn=neuralnet(y~x,data=scaledData[train,])

#this repeatedly failed for me
compute(nn,scaledData[test,])

#this worked 
compute(nn,as.data.frame(scaledData)[test,])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接