[R-es] Red Neuronal complicada categorías

Carlos Ortega cof en qualityexcellence.es
Sab Jul 9 23:44:33 CEST 2016


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

	[[alternative HTML version deleted]]



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