如何使用神经网络包预测新病例

时间:2011-02-03 21:23:31

标签: r neural-network

使用RGUI。我有一个名为Data的数据集。我感兴趣的响应变量包含在Data的第一列中。

我有Data的培训集DataTrainDataTest

使用DataTrain我使用包和函数DataNN训练了一个神经网络模型(称为neuralnet)。

> DataNN = neuralnet(DataTrain[,1] ~ DataTrain[,2] + DataTrain[,3], hidden = 1,
    data = DataTrain) 

是否有人知道如何使用测试集(DataTest)在此模型上创建预测?

通常(对于其他型号)我会使用predict()。 E.g。

> DataPred = predict(DataNN, DataTest)

但是当我为neuralnet执行此操作时,我得到了:

> DataPred = predict(DataNN, DataTest)

Error in UseMethod("predict") : 
no applicable method for 'predict' applied to an object of class "nn"  

显然我无法在此模型上运行predict()。有没有人知道任何替代方案?

我已查看neuralnet的帮助,我在documentation的第12页找到了一个名为prediction的方法。我认为这根本不是我想要的,或者至少我不知道如何将它应用到我的Data

任何帮助将不胜感激(如果有任何解决方案)。

4 个答案:

答案 0 :(得分:21)

计算方法完成了您的工作,我从帮助文件中复制了此示例并添加了一些注释:

 # Make Some Training Data
 Var1 <- runif(50, 0, 100) 
 # create a vector of 50 random values, min 0, max 100, uniformly distributed
 sqrt.data <- data.frame(Var1, Sqrt=sqrt(Var1)) 
 # create a dataframe with two columns, with Var1 as the first column
 # and square root of Var1 as the second column

 # Train the neural net
 print(net.sqrt <- neuralnet(Sqrt~Var1,  sqrt.data, hidden=10, threshold=0.01))
 # train a neural net, try and predict the Sqrt values based on Var1 values
 # 10 hidden nodes

 # Compute or predict for test data, (1:10)^2
 compute(net.sqrt, (1:10)^2)$net.result
 # What the above is doing is using the neural net trained (net.sqrt), 
 # if we have a vector of 1^2, 2^2, 3^2 ... 10 ^2 (i.e. 1, 4, 9, 16, 25 ... 100), 
 # what would net.sqrt produce?

 Output:
 $net.result
             [,1]
 [1,] 1.110635110
 [2,] 1.979895765
 [3,] 3.013604598
 [4,] 3.987401275
 [5,] 5.004621316
 [6,] 5.999245742
 [7,] 6.989198741
 [8,] 8.007833571
 [9,] 9.016971015
[10,] 9.944642147
# The first row corresponds to the square root of 1, second row is square root
# of 2 and so on. . . So from that you can see that net.sqrt is actually 
# pretty close
# Note: Your results may vary since the values of Var1 is generated randomly.

答案 1 :(得分:2)

预测功能为prediction,而不是predict

请尝试使用DataPred = prediction(DataNN, DataTest)代替DataPred = predict(DataNN, DataTest)

答案 2 :(得分:1)

答案是compute(nn,test)

答案 3 :(得分:1)

你应该使用神经网络的预测版本,即

DataPred <- compute(DataNN, DataTest)

如果您正在使用dplyr进行任何操作,那么您需要专门声明库然后是函数名称,如此

DataPred <- neuralnet::compute(DataNN, DataTest)

BTW在为变量赋值时从不使用等号,不幸的是这是不好的做法。