我在R中使用neuralnet
来预测基于17个输入的3个类。我有3个班级:1,0和2.我有2个文件:培训和测试。培训有64个输入,17个输入,18个输出。
x1 x2 x3 etc... x17 y
-0.002307 0.034095 -0.002733 0 1
0.004461 -0.041385 0.137767 -0.294394 0
-0.25254 -0.094523 0 0.074733 0
-0.25254 -0.094523 0 0.074733 2
等等。共有64行用于培训。
测试集与训练数据(16行)完全相同,只是具有不同的值。 我使用的代码
library(neuralnet)
nn <- neuralnet(y ~ x1+x2+x3
+x4+x5+x6+x7+x8+x9+x10+x11+x12+x13+x14+x15+x16+x17,
data=train,lifesign="full", hidden=15, err.fct="ce",
linear.output=FALSE)
an1 <- compute(nn, Test[1:17])
我可以预测nn训练
prediction (nn)
这为我提供了训练案例集的预测类列y,但我不能用
做同样的事情prediction (an1): error message
Error in matrix(covariate[not.duplicated, ], nrow = nrow.notdupl) :
'data' must be of a vector type
我不完全确定我需要预测,或者计算应该足够了。但我得到的计算结果是:
$net.result
[,1]
[1,] 0.7503498233120
[2,] 0.9982475522024
....
[14,] 0.0007727434740
[15,] 0.9999287879015
我不知道如何解释它。我需要像
这样的东西 2 1 0
[1,] 0.964182671 0.022183652 0.013633677
[2,] 0.952685528 0.032202528 0.015111944
[3,] 0.966094194 0.021206723 0.012699083..
概率分布到每个班级。
我尝试使用ifelse
At2 <-(ifelse(Train$y==2,"2", ifelse(Train$y==1, "1","0")))
但仍为net.result
获得相同的1列。
任何人都可以帮忙指出我在这里错过了哪条线来获得我想要的东西?
另外我认为ifelse
没有做我想做的事 - 根据17个输入预测Y类。是这样吗?
答案 0 :(得分:2)
我能够通过使用nnet包获得我想要的东西,特别是预测那里的功能。
idC <-class.ind(Train$y)
NN1=nnet(Train, idC[Train], size=15, maxit = 200, softmax=TRUE)
predict(NN1, data=Test,type = "class")
非常感谢所有回复! :)
答案 1 :(得分:1)
在文档中说 compute()返回结果列表, prediction()采用神经网络拟合模型...所以我猜你正在使用这是错误的方式。