34 votos

Cómo entrenar y validar un modelo de red neuronal en R?

Soy nuevo en el modelado con redes neuronales, pero me las arreglé para establecer una red neuronal con todos los puntos de datos que se ajusta a los datos observados. La red neuronal fue hecho en R con la nnet paquete:

require(nnet)      
##33.8 is the highest value
mynnet.fit <- nnet(DOC/33.80 ~ ., data = MyData, size = 6, decay = 0.1, maxit = 1000)      
mynnet.predict <- predict(mynnet.fit)*33.80  
mean((mynnet.predict - MyData$DOC)^2) ## mean squared error was 16.5      

Los datos que estoy analizando es como el siguiente, donde el DOC es la variable que ha de ser modelada (hay cerca de 17.000 observaciones):

      Q  GW_level Temp   t_sum   DOC
1 0.045    0.070 12.50     0.2 11.17
2 0.046    0.070 12.61     0.4 11.09
3 0.046    0.068 12.66     2.8 11.16
4 0.047    0.050 12.66     0.4 11.28
5 0.049    0.050 12.55     0.6 11.45
6 0.050    0.048 12.45     0.4 11.48

Ahora, he leído que el modelo debe ser entrenado con el 70% de los puntos de datos, y validar con los restantes 30% de los puntos de datos. ¿Cómo puedo hacer esto? Que funciones tengo que usar?

He utilizado el tren de la función del símbolo de intercalación paquete para el cálculo de los parámetros para el tamaño y la decadencia.

require(caret)
my.grid <- expand.grid(.decay = c(0.5, 0.1), .size = c(5, 6, 7))
mynnetfit <- train(DOC/33.80 ~ ., data = MyData, method = "nnet", maxit = 100, tuneGrid = my.grid, trace = f)

Cualquier ayuda directa o enlaces a otros sitios web/blogs es muy apreciado.

36voto

radpin Puntos 121

Max Kuhn símbolo de intercalación Manual de Construcción de modelos es un gran punto de partida.

Yo creo que de la etapa de validación, como ocurre en el símbolo de intercalación de tren (), ya que es la elección de su hyperparameters de caries y tamaño a través de bootstrapping o algún otro enfoque que puede especificar a través de la trControl parámetro. Yo llame el conjunto de datos puedo utilizar para caracterizar el error de la final del modelo elegido mi set de prueba. Desde el símbolo de intercalación asas de selección de hyperparameters para usted, usted sólo necesita un conjunto de entrenamiento y un conjunto de pruebas.

Usted puede utilizar el createDataPartition() en función de cursor para dividir el conjunto de datos en conjuntos de pruebas y entrenamiento. He probado usando el Prestigio conjunto de datos en el coche, que tiene información acerca de los ingresos relacionados con el nivel de educación y el prestigio ocupacional:

library(car)
library(caret)
trainIndex <- createDataPartition(Prestige$income, p=.7, list=F)
prestige.train <- Prestige[trainIndex, ]
prestige.test <- Prestige[-trainIndex, ]

El createDataPartition() función parece un poco mal llamada porque no crear la partición para usted, sino que proporciona un vector de índices que luego se puede utilizar para la construcción de conjuntos de pruebas y entrenamiento. Es bastante fácil de hacer usted mismo en R el uso de muestras() pero una cosa createDataPartition() al parecer hace es muestra de dentro de los niveles del factor. Por otra parte, si su resultado es categórica, la distribución se mantiene a través de las particiones de datos. No es relevante en este caso, sin embargo, ya que su resultado es continua.

Ahora usted puede entrenar a su modelo en el conjunto de entrenamiento:

my.grid <- expand.grid(.decay = c(0.5, 0.1), .size = c(5, 6, 7))
prestige.fit <- train(income ~ prestige + education, data = prestige.train,
    method = "nnet", maxit = 1000, tuneGrid = my.grid, trace = F, linout = 1)    

A un lado, he tenido que añadir el linout parámetro para obtener nnet a trabajar con una regresión (vs clasificación) problema. De lo contrario, tengo todas 1s como los valores de la predicción del modelo.

A continuación, puede llamar a predecir en el ajuste de objetos utilizando el conjunto de datos de prueba y calcular RMSE de los resultados:

prestige.predict <- predict(prestige.fit, newdata = prestige.test)
prestige.rmse <- sqrt(mean((prestige.predict - prestige.test$income)^2)) 

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X