domingo, 1 de noviembre de 2015

Red Neuronal con dataset iris

Script con red neuronal para predecir la variable Species del data set iris. Para detalles sobre redes neuronales, ver referencias.



Conceptualmente el modelo queda así:








# DATOS Y LIBRERIAS A USAR
#----------------------------------------------
library(neuralnet)
n     <- sample(1:150,20)
Train <- iris[-n,]
Test  <- iris[n,]
clase <- c("setosa","versicolor","virginica")
 
 
# CLASES
#----------------------------------------------
Train$setosa     <- ifelse(Train$Species == "setosa"     , TRUE, FALSE)
Train$versicolor <- ifelse(Train$Species == "versicolor" , TRUE, FALSE)
Train$virginica  <- ifelse(Train$Species == "virginica"  , TRUE, FALSE)
 
 
# FORMULA
#----------------------------------------------
frml <- as.formula(paste("setosa+versicolor+virginica ~ ", #variables a Predecir
                         paste(names(within(
                           Train,rm(Species,
                                    setosa,
                                    versicolor,
                                    virginica))), #Variables no predictoras a eliminar
                           collapse="+") ))
 
 
# MODELO
#----------------------------------------------
modelo.net <- neuralnet(frml,
                        data      = Train, 
                        algorithm = "rprop+", # ver nota sobre rprop+
                        threshold = 0.1,      # ver nota sobre threshold
                        hidden    = 3         # ver nota sobre hidden
                        )
 
 
# PREDICCION
#----------------------------------------------
predict_prb        <- as.data.frame(compute(modelo.net, within(Test,rm(Species)))$net.result)
names(predict_prb) <- clase
predict_class      <- colnames(predict_prb)[apply(predict_prb,1,which.max)]
 
 
 
# MATRIZ CONFUCION
#----------------------------------------------
(MC <- table(Test$Species,predict_class))
 
 
# GRAFICO DE RED
# ----------------------------------------------
plot(modelo.net)

El parametro threshol = 0.1 indica que las iteraciones se detendran cuando el cambio del error sea menor a 10% entre una iteraciones de optimizacion y otra. Este cambio es calculado como la derivada parcial de la funcion de error respecto a los pesos.

El parametro algoithm = "rprop+" refiere al algoritmo "Resilient Backpropagation", que actualiza los pesos considerando únicamente el signo del cambio, es decir, si el cambio del error es en aumento (+) o disminución (-) entre una iteración y otra. Para detalles ver: https://en.wikipedia.org/wiki/Rprop

El parametro hidden = 3 especifica una capa oculta con 3 neuronas. Si se quisieran dos capas ocultas con tres neuronas cada una, seria hidden = c(3,3).


REFERENCIAS
articulos
1. http://www.analyticsvidhya.com/blog/2014/10/introduction-neural-network-simplified/
2. http://www.analyticsvidhya.com/blog/2014/10/ann-work-simplified/

No hay comentarios:

Publicar un comentario