# Redes neuronales artificiales
# Si se usa nnet para regresión en lugar de clasificación se debe usar
# el parámetro linout=T
 
 
data(iris)
 
 
# Selección de una submuestra de 105 (el 70% de los datos)
set.seed(101)
iris.indices <- sample(1:nrow(iris),size=105)
iris.entrenamiento <- iris[iris.indices,]
iris.test <- iris[-iris.indices,]
 
# Previamente se usará train para ver el valor de los parámetros size y decay
# size: número de unidades ocultas intermedias
# decay: se usa para evitar el sobre ajuste
 
library(caret)
parametros <- train(Species~., data=iris.entrenamiento, method="nnet", trace=F)
size <- parametros$bestTune$size
decay <- parametros$bestTune$decay
parametros$bestTune
 
library(nnet)
# Entrenamiento de la red neuronal con los valores de train
modelo <- nnet(Species ~ ., size=size, decay=decay, trace=F,
               data=iris.entrenamiento)
modelo
 
# Predicción. Se crea un data frame con las probabilidades y los nombres de las
# especies
predicciones <- data.frame(predict(modelo, iris.test),
                           Specie=predict(modelo,iris.test, type="class"))
predicciones
 
# Matriz de confusión
mc <- table(predicciones$Specie,iris.test$Species, dnn = c("Asignado","Real"))
mc
# Aciertos en %
aciertos <- sum(diag(mc)) / nrow(iris.test) * 100
aciertos
 

> # Redes neuronales artificiales
> # Si se usa nnet para regresión en lugar de clasificación se debe usar
> # el parámetro linout=T
>
>
> data(iris .... [TRUNCATED]
 
> # Selección de una submuestra de 105 (el 70% de los datos)
> set.seed(101)
 
> iris.indices <- sample(1:nrow(iris),size=105)
 
> iris.entrenamiento <- iris[iris.indices,]
 
> iris.test <- iris[-iris.indices,]
 
> # Previamente se usará train para ver el valor de los parámetros size y decay
> # size: número de unidades ocultas intermedias
> # decay: se usa par .... [TRUNCATED]
 
> parametros <- train(Species~., data=iris.entrenamiento, method="nnet", trace=F)
 
> size <- parametros$bestTune$size
 
> decay <- parametros$bestTune$decay
 
> parametros$bestTune
  size decay
9    5   0.1
 
> library(nnet)
 
> # Entrenamiento de la red neuronal con los valores de train
> modelo <- nnet(Species ~ ., size=size, decay=decay, trace=F,
+                data=ir .... [TRUNCATED]
 
> modelo
a 4-5-3 network with 43 weights
inputs: Sepal.Length Sepal.Width Petal.Length Petal.Width
output(s): Species
options were - softmax modelling  decay=0.1
 
> # Predicción. Se crea un data frame con las probabilidades y los nombres de las
> # especies
> predicciones <- data.frame(predict(modelo, iris.test) .... [TRUNCATED]
 
> predicciones
          setosa  versicolor    virginica     Specie
5   0.9909742013 0.008521082 0.0005047170     setosa
10  0.9848721271 0.014415181 0.0007126920     setosa
12  0.9853572867 0.013944979 0.0006977346     setosa
15  0.9941347289 0.005487407 0.0003778644     setosa
16  0.9936001242 0.005999199 0.0004006766     setosa
18  0.9900543930 0.009406882 0.0005387250     setosa
22  0.9897739921 0.009677028 0.0005489795     setosa
23  0.9931954792 0.006386722 0.0004177987     setosa
29  0.9900720278 0.009390117 0.0005378549     setosa
31  0.9794949404 0.019631630 0.0008734294     setosa
32  0.9878915860 0.011493983 0.0006144313     setosa
33  0.9929748056 0.006598691 0.0004265031     setosa
35  0.9836678188 0.015581704 0.0007504775     setosa
38  0.9912121727 0.008292135 0.0004956927     setosa
46  0.9829952836 0.016232737 0.0007719792     setosa
57  0.0104715226 0.943708987 0.0458194903 versicolor
58  0.0162595448 0.974893581 0.0088468742 versicolor
59  0.0076994175 0.979087874 0.0132127081 versicolor
60  0.0137994248 0.929111773 0.0570888024 versicolor
68  0.0086500753 0.983817933 0.0075319914 versicolor
70  0.0098531759 0.978108284 0.0120385402 versicolor
76  0.0082411757 0.981770771 0.0099880538 versicolor
78  0.0118784645 0.764576409 0.2235451269 versicolor
81  0.0103424780 0.976345140 0.0133123821 versicolor
82  0.0105533109 0.981226112 0.0082205769 versicolor
96  0.0095824339 0.978631989 0.0117855774 versicolor
98  0.0087383067 0.979293810 0.0119678830 versicolor
105 0.0010211535 0.016478198 0.9825006488  virginica
107 0.0028857654 0.061478511 0.9356357239  virginica
108 0.0018442119 0.038824440 0.9593313481  virginica
112 0.0025534663 0.057928225 0.9395183084  virginica
114 0.0013288944 0.022749264 0.9759218418  virginica
119 0.0006305822 0.008711947 0.9906574706  virginica
120 0.0042149905 0.118436569 0.8773484407  virginica
122 0.0020315171 0.039549293 0.9584191900  virginica
125 0.0023583541 0.052211130 0.9454305155  virginica
126 0.0047404490 0.148167651 0.8470918996  virginica
131 0.0019790352 0.042647538 0.9553734270  virginica
132 0.0070847654 0.279219706 0.7136955289  virginica
133 0.0010097466 0.016134241 0.9828560122  virginica
137 0.0011563147 0.019008014 0.9798356714  virginica
139 0.0098432094 0.388815759 0.6013410313  virginica
146 0.0023326698 0.049403965 0.9482633655  virginica
147 0.0030608377 0.073141403 0.9237977596  virginica
150 0.0046602598 0.130360606 0.8649791340  virginica
 
> # Matriz de confusión
> mc <- table(predicciones$Specie,iris.test$Species, dnn = c("Asignado","Real"))
 
> mc
            Real
Asignado     setosa versicolor virginica
  setosa         15          0         0
  versicolor      0         12         0
  virginica       0          0        18
 
> # Aciertos en %
> aciertos <- sum(diag(mc)) / nrow(iris.test) * 100
 
> aciertos
[1] 100