[R-es] Red Neuronal complicada categorías

Carlos Ortega cof en qualityexcellence.es
Mar Jul 12 00:24:15 CEST 2016


Hola Javier,

Las redes como otros muchos algoritmos utilizan valores aleatorios para
inicializar variables, pesos, etc.

Incluir un valor fijo de la semilla que genera estos números aleatorios es
una forma de poder garantizar que los resultados se van a poder repetir. De
esta forma, el resultado que yo obtengo será el mismo que tú obtienes.

El valor que he utilizado es completamente inventado.

Además de que permita reproducir resultados, también puedes variar su valor
y sin realizar ninguna modificación ni en los datos de entrada, ni en otros
parámetros tu algoritmo obtendrá diferentes valores de precisión cuando
aplicas tu modelo a un mismo conjunto de pruebas. Las variaciones son
pequeñas, pero en algunos casos lo suficientemente importantes como mejorar
tu predicción en un 1-3%...

Saludos,
Carlos Ortega
www.qualityexcellence.es


El 11 de julio de 2016, 16:39, Javier Marcuzzi <
javier.ruben.marcuzzi en gmail.com> escribió:

> Estimado Carlos Ortega
>
>
>
> Muchas gracias por su ayuda.
>
>
>
> Tendré que estudiar RNNS, vi muy rápido el manual y parece interesante.
>
>
>
> Le consulto, usted genera un valor al azar a partir de 432, código
> set.seed(432)
>
>
>
> ¿432?, ¿lo calcula?, ¿es por experiencia?, si bien los datos son
> inventados y el resultado por más que matemáticamente de cualquier cosa me
> sirve para resolver mi pregunta, me gustaría conocer el motivo del uso de
> este comando, puesto que corrí el mismo código sin set.seed(432) y también
> funciona (la computadora no indica que falte un parámetro o problema
> alguno).
>
>
>
> Javier Rubén Marcuzzi
>
>
>
> *De: *Carlos Ortega <cof en qualityexcellence.es>
> *Enviado: *sábado, 9 de julio de 2016 18:44
> *Para: *Javier Marcuzzi <javier.ruben.marcuzzi en gmail.com>
> *CC: *r-help-es en r-project.org
> *Asunto: *Re: [R-es] Red Neuronal complicada categorías
>
>
>
> Hola,
>
>
>
> Esta es una forma de hacerlo...
>
>
>
> Mira que lo primero que he modificado es el fichero "x.csv" para sustituir
> los espacios en los nombres por "_". Y también he quitado los acentos y las
> eñes...
>
>
>
> He utilizado el paquete RNNS y la función "mlp()" para ajustar la red.
>
>
>
> #-------------------------------------------
>
> > x <- read.csv("x.csv", header=FALSE, sep=";")
>
> > x
>
>       V1      V2    V3      V4     V5           V6
>
> 1 puerta ventana techo comedor pileta  casa_grande
>
> 2 puerta ventana techo comedor          casa_comun
>
> 3 puerta ventana techo                casa_pequena
>
> 4        ventana techo         pileta  casa_grande
>
> 5                              pileta  casa_grande
>
> 6 puerta         techo comedor          casa_comun
>
> 7                techo                casa_pequena
>
> 8 porton ventana techo  cocina pileta  casa_grande
>
> >
>
> #-------------------------------------------
>
>
>
>
>
> V1Binario <- model.matrix(~ factor(x$V1) - 1)
>
> V2Binario <- model.matrix(~ factor(x$V2) - 1)
>
> V3Binario <- model.matrix(~ factor(x$V3) - 1)
>
> V4Binario <- model.matrix(~ factor(x$V4) - 1)
>
> V5Binario <- model.matrix(~ factor(x$V5) - 1)
>
> V6Binario <- model.matrix(~ factor(x$V6) - 1)
>
>
>
> x_new <- cbind(V1Binario,V2Binario)
>
> x_new <- cbind(x_new,V3Binario)
>
> x_new <- cbind(x_new,V4Binario)
>
> x_new <- cbind(x_new,V5Binario)
>
>
>
> nam_ori <- colnames(x_new)
>
> col_nam <- paste("V", 1:ncol(x_new), sep = "")
>
> colnames(x_new) <- col_nam
>
>
>
> library(RSNNS)
>
>
>
> xValues <- x_new
>
> xTargets <- x[, 6]
>
> xTargetsDecoded <- decodeClassLabels(xTargets)
>
> x_nn <- splitForTrainingAndTest(xValues, xTargetsDecoded, ratio=0.15)
>
>
>
> set.seed(432)
>
> model <- mlp(x_nn$inputsTrain, x_nn$targetsTrain,
>
>              size=3, learnFuncParams=c(0.1), maxit=10,
>
>              inputsTest=x_nn$inputsTest, targetsTest=x_nn$targetsTest)
>
>
>
> summary(model)
>
>
>
> #-------------------------------------------
>
>
>
>
>
> Saludos,
>
> Carlos Ortega
>
> www.qualityexcellence.es
>
>
>
>
>
> El 9 de julio de 2016, 21:58, Javier Marcuzzi <
> javier.ruben.marcuzzi en gmail.com> escribió:
>
> Estimados
>
>
>
> Adjunto un archivo de texto separado por comas, muy simple como ejemplo,
> luego el siguiente código explicaría el problema. Si ejecutan el código se
> entenderá, creo.
>
>
>
> x <- read.csv("~/R/neuronal/x.csv", header=FALSE, sep=";")
>
> V1Binario <- model.matrix(~ factor(x$V1) - 1)
>
> # -1 no coloca como interceto, deja x$V1 sin nada, son los que no tienen
> nada (nada, puerta, porton)
>
> V1Binario
>
> V2Binario <- model.matrix(~ factor(x$V2) - 1)
>
> V3Binario <- model.matrix(~ factor(x$V3) - 1)
>
> V4Binario <- model.matrix(~ factor(x$V4) - 1)
>
> V5Binario <- model.matrix(~ factor(x$V5) - 1)
>
> V6Binario <- model.matrix(~ factor(x$V6) - 1)
>
>
>
> x <- cbind(x,V1Binario)
>
> x <- cbind(x,V2Binario)
>
> x <- cbind(x,V3Binario)
>
> x <- cbind(x,V4Binario)
>
> x <- cbind(x,V5Binario)
>
> x <- cbind(x,V6Binario)
>
>
>
> nn <-
> neuralnet(V6Binario~V1Binario+V2Binario+V3Binario+V4Binario+V5Binario, x,
> hidden=2, rep=5)
>
> #claro no funciona
>
> #porque si miro los datos con x
>
> x
>
> # puedo ver que la cantidad de "columnas" se incrementa por cada factor
> pasado a binario
>
> # ¿Alguna idea?
>
>
>
>
>
> Javier Rubén Marcuzzi
>
>
>
> *De: *Javier Marcuzzi <javier.ruben.marcuzzi en gmail.com>
> *Enviado: *jueves, 7 de julio de 2016 10:51
> *Para: *r-help-es en r-project.org
> *Asunto: *Red Neuronal complicada categorías
>
>
>
> Estimados
>
> Les consulto por redes neuronales, hay diversos artículos como los
> siguientes (el último tienen un error actualmente). Pero mi pregunta va un
> poco por otro lado.
>
> http://www.r-bloggers.com/build-your-own-neural-network-classifier-in-r/
>
> http://www.r-bloggers.com/classification-using-neural-net-in-r/
>
> Básicamente se puede calcular un valor, por ejemplo doblar 2,4 grados a la
> derecha, luego 1 grado a la izquierda, y de esa forma conducir un auto,
> donde no importa el valor exacto porque siempre se puede corregir (muchas
> actualizaciones producen el resultado).
>
> Otros casos donde se realiza la predicción, como las redes neuronales solo
> tienen números, la configuración (normalización) para categorías puede ser
> (0,0,0), (0,1,0), (1,0,0), (1,1,1), donde el significado no normalizado es:
> nada, techo, pieza, pileta, …, objetos de una casa.
>
> La red neuronal no produce 0,0,1 como resultado, este podría ser 0,
> 0,00009, 0,999998.
>
> Yo puedo decir a R que como 0,00009 y 0,999998 están próximos a 0 y 1
> estos vales 0 y 1, trasladando el resultado a 0,0,1 que significa una
> categoría (palabra de objeto de la casa).
>
> Hasta ahí todo correcto, puedo predecir la categoría.
>
> Pero ¿Qué pasa si estas categorías son la presencia de objetos de la casa
> para clasificar la casa?
>
> Quiero decir, techo, pieza es casa común.
>
> Otro es techo, pieza, pileta es casa grande.
>
> Pero otro usuario solo ingresa pieza y pileta (supone que hay techo) y
> también es casa grande.
>
> En el primer caso tengo dos tripletes (0,0,0 techo y 0,0,1 pieza)
>
> En el segundo caso tres tripletes porque hay tres objetos.
>
> En el tercero solo tiene dos tripletes, suponiendo la existencia de techo
> en una casa.
>
> En un ejemplo como este donde hay tres objetos de casa, podría entrenarla
> sin problemas porque hay unas 9 posibilidades de combinaciones de objetos.
>
> Pero si la cantidad de objetos es tan alta que no puedo ingresar todas las
> combinaciones posibles ¿Cómo puedo escribir el modelo en R? ¿Es posible, o
> con redes neuronales puedo llegar a determinar que letra es –
> reconocimiento de caracteres (patrón x e y con presencia o ausencia de
> color, encontrando grupos de píxeles vecinos pintados), pero no tantas
> presencias o ausencias?
>
>
>
> ¿Alguien tiene un ejemplo donde muchas categorías (objetos) determinan a
> que categoría pertenece? Algo como el ejemplo que está en todos lados donde
> iris, setosa, …, pero en lugar de tener números hay datos categóricos, pero
> presencia o ausencia de tal o cuál dato.
>
>
>
> En otras palabras algo como
>
> “0,0,1””0,0,0””1,0,1” -> grande
>
> “0,0,1””0,0,0””1,1,1” -> grande
>
> "0,0,0””1,0,1” -> grande
>
> “1,1,1””0,0,1” -> chico
>
> Pero sin poder escribir todas las combinaciones de tripletes posibles.
>
>
>
>
>
>
>
> Javier Rubén Marcuzzi
>
>
>
>
>
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>
>
>
>
> --
>
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
>
>



-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es