style div app r machine-learning neural-network idiomatic

r - div - tags$style shiny



Usando nnet para la predicción, ¿lo estoy haciendo bien? (1)

Todavía soy bastante nuevo en las técnicas R y AI / ML . Me gustaría usar una red neuronal para la predicción, y como soy nuevo, me gustaría ver si así es como debería hacerse.

Como caso de prueba, estoy prediciendo los valores de sin() , en base a 2 valores anteriores. Para el entrenamiento, creo un marco de datos con y = sin(x) , x1 = sin(x-1) , x2 = sin(x-2) , luego uso la fórmula y ~ x1 + x2 .

Parece funcionar, pero me pregunto si esta es la forma correcta de hacerlo o si existe una forma más idiomática.

Este es el código:

require(quantmod) #for Lag() requre(nnet) x <- seq(0, 20, 0.1) y <- sin(x) te <- data.frame(y, Lag(y), Lag(y,2)) names(te) <- c("y", "x1", "x2") p <- nnet(y ~ x1 + x2, data=te, linout=TRUE, size=10) ps <- predict(p, x1=y) plot(y, type="l") lines(ps, col=2)

Gracias

[editar]

¿Es esto mejor para la llamada de predicción?

t2 <- data.frame(sin(x), Lag(sin(x))) names(t2) <- c("x1", "x2") vv <- predict(p, t2) plot(vv)

Supongo que me gustaría ver que la red realmente está funcionando al observar sus predicciones (que deberían aproximarse a una onda de pecado).


Realmente me gusta el paquete caret , ya que proporciona una interfaz agradable y unificada para una variedad de modelos, como nnet . Además, sintoniza automáticamente los parámetros de hiperparámetros (como el size y la decay ) mediante la validación cruzada o el nuevo muestreo de bootstrap. El inconveniente es que todo este remuestreo toma algún tiempo.

#Load Packages require(quantmod) #for Lag() require(nnet) require(caret) #Make toy dataset y <- sin(seq(0, 20, 0.1)) te <- data.frame(y, x1=Lag(y), x2=Lag(y,2)) names(te) <- c("y", "x1", "x2") #Fit model model <- train(y ~ x1 + x2, te, method=''nnet'', linout=TRUE, trace = FALSE, #Grid of tuning parameters to try: tuneGrid=expand.grid(.size=c(1,5,10),.decay=c(0,0.001,0.1))) ps <- predict(model, te) #Examine results model plot(y) lines(ps, col=2)

También predice en la escala adecuada, por lo que puede comparar directamente los resultados. Si está interesado en redes neuronales, también debería echar un vistazo a los paquetes neuralnet y RSNNS . Actualmente, caret puede sintonizar los modelos nnet y neuralnet , pero aún no tiene una interfaz para RSNNS .

/ edit: caret ahora tiene una interfaz para RSNNS . Resulta que si envía un correo electrónico al encargado del paquete y solicita que se agregue un modelo a caret , ¡generalmente lo hará!

/ edit: caret también es compatible ahora con la regularización bayesiana para redes neuronales de brnn paquete brnn . Además, ahora también es mucho más fácil especificar sus propios modelos personalizados , para interactuar con cualquier paquete de red neuronal que desee.