как предсказать новые случаи с помощью пакета нейронной сети - PullRequest
9 голосов
/ 04 февраля 2011

Использование RGUI.У меня есть набор данных под названием Data.Интересующая меня переменная ответа содержится в первом столбце Data.

У меня есть тренировочные наборы Data, называемые DataTrain и DataTest.

. С помощью DataTrain я обучил модель нейронной сети (называемую DataNN), используя пакет и функцию.neuralnet.

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

Кто-нибудь знает, как создать прогноз для этой модели, используя набор тестов (DataTest)?

Обычно (для других моделей) я бы использовал для этого predict(),Например,

> 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 и нашел метод под названием prediction на странице 12 документации .Я не думаю, что это то, что я хочу, хотя, или, по крайней мере, я не знаю, как применить это к моей Data.

Любая помощь будет признательна (если есть какое-либо решение для этогона все).

Ответы [ 4 ]

21 голосов
/ 04 февраля 2011

Метод compute делает то, что вам нужно, я скопировал этот пример из файла справки и добавил несколько комментариев:

 # 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.
2 голосов
/ 05 октября 2012

Функция для прогнозирования: prediction, а не predict.

Так что попробуйте DataPred = prediction(DataNN, DataTest) вместо DataPred = predict(DataNN, DataTest).

1 голос
/ 17 марта 2017

Вы должны использовать версию предсказания нейросети, т.е.

DataPred <- compute(DataNN, DataTest)

Если вы используете dplyr для каких-либо манипуляций, вам нужно специально объявить библиотеку, тогда имя функции выглядит так

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

Кстати, никогда не используйте знак равенства при присвоении значений переменным, к сожалению, это плохая практика.

1 голос
/ 08 июля 2015

Ответ вычислительный (nn, тест)

...