2011-02-03 26 views
7

Usando RGUI. Tengo un conjunto de datos llamado Datos. La variable de respuesta que me interesa está en la primera columna de Data.cómo predecir nuevos casos utilizando el paquete neuralnet

Tengo juegos de entrenamiento de Data llamados DataTrain y DataTest.

Con DataTrain Entrené un modelo de red neuronal (llamado DataNN) utilizando el paquete y la función neuralnet.

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

¿Alguien sabe cómo crear una predicción de este modelo usando el equipo de prueba (DataTest)?

Normalmente (para otros modelos) Yo usaría predict() para esto. P.ej.

> DataPred = predict(DataNN, DataTest) 

Pero al hacer esto para neuralnet me sale:

> DataPred = predict(DataNN, DataTest) 

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

Es obvio que no se puede ejecutar predict() en este modelo. ¿Alguien sabe de alguna alternativa?

He comprobado la ayuda para neuralnet y encontré un método llamado prediction en la página 12 de documentation. No creo que sea lo que quiero en absoluto, o al menos no sé cómo aplicarlo a mi Data.

Cualquier ayuda sería apreciada (si hay alguna solución para esto en absoluto).

Respuesta

21

El cálculo método hace lo que está después, he copiado este ejemplo del archivo de ayuda y añadió algunos comentarios:

# 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. 
+6

Me encontré con este error cuando utilicé compute: ningún método aplicable para 'compute' aplicado a un objeto de clase "nn". Es un conflicto con el método de cálculo en dplyr. Lo arreglé llamando así: neuralnet :: compute(). –

2

La función para la predicción es prediction, no predict.

Así que intente DataPred = prediction(DataNN, DataTest) en lugar de DataPred = predict(DataNN, DataTest).

1

La respuesta es calcular (nn, prueba)

1

usted debe utilizar la versión de la NeuralNet de predicción es decir

DataPred <- compute(DataNN, DataTest) 

Si está utilizando dplyr que hacer ningún tipo de manipulación a continuación, tendrá que declarar específicamente la biblioteca entonces el nombre de la función como tal

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

Por cierto nunca usan el signo de igualdad en la asignación de valores a las variables, por desgracia eso es una mala práctica.

Cuestiones relacionadas