Teoría

el paquete CARET (Classification And Regression Training) es un paquete integral con una amplia variedad de algoritmos para el aprendizaje automático.

Instalar paquetes y llamar librerías

# install.packages("caret") # algoritmos de aprendizaje automático
library(caret)
# install.packages("ggplot2") #  gráficas
library(ggplot2)
# install.packages("lattice") # crear gráficos
library(lattice)
# install.packages("datasets") # usar bases de datos precargadas
library(datasets)
# install.packages("DataExplorer") # análisis descriptivo
library(DataExplorer)
# install.packages("kernlab") # análisis descriptivo
library(kernlab)
# install.packages("randomForest") # análisis descriptivo
library(randomForest)

Crear la base de datos

df <- data.frame(iris)
df
##     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
## 1            5.1         3.5          1.4         0.2     setosa
## 2            4.9         3.0          1.4         0.2     setosa
## 3            4.7         3.2          1.3         0.2     setosa
## 4            4.6         3.1          1.5         0.2     setosa
## 5            5.0         3.6          1.4         0.2     setosa
## 6            5.4         3.9          1.7         0.4     setosa
## 7            4.6         3.4          1.4         0.3     setosa
## 8            5.0         3.4          1.5         0.2     setosa
## 9            4.4         2.9          1.4         0.2     setosa
## 10           4.9         3.1          1.5         0.1     setosa
## 11           5.4         3.7          1.5         0.2     setosa
## 12           4.8         3.4          1.6         0.2     setosa
## 13           4.8         3.0          1.4         0.1     setosa
## 14           4.3         3.0          1.1         0.1     setosa
## 15           5.8         4.0          1.2         0.2     setosa
## 16           5.7         4.4          1.5         0.4     setosa
## 17           5.4         3.9          1.3         0.4     setosa
## 18           5.1         3.5          1.4         0.3     setosa
## 19           5.7         3.8          1.7         0.3     setosa
## 20           5.1         3.8          1.5         0.3     setosa
## 21           5.4         3.4          1.7         0.2     setosa
## 22           5.1         3.7          1.5         0.4     setosa
## 23           4.6         3.6          1.0         0.2     setosa
## 24           5.1         3.3          1.7         0.5     setosa
## 25           4.8         3.4          1.9         0.2     setosa
## 26           5.0         3.0          1.6         0.2     setosa
## 27           5.0         3.4          1.6         0.4     setosa
## 28           5.2         3.5          1.5         0.2     setosa
## 29           5.2         3.4          1.4         0.2     setosa
## 30           4.7         3.2          1.6         0.2     setosa
## 31           4.8         3.1          1.6         0.2     setosa
## 32           5.4         3.4          1.5         0.4     setosa
## 33           5.2         4.1          1.5         0.1     setosa
## 34           5.5         4.2          1.4         0.2     setosa
## 35           4.9         3.1          1.5         0.2     setosa
## 36           5.0         3.2          1.2         0.2     setosa
## 37           5.5         3.5          1.3         0.2     setosa
## 38           4.9         3.6          1.4         0.1     setosa
## 39           4.4         3.0          1.3         0.2     setosa
## 40           5.1         3.4          1.5         0.2     setosa
## 41           5.0         3.5          1.3         0.3     setosa
## 42           4.5         2.3          1.3         0.3     setosa
## 43           4.4         3.2          1.3         0.2     setosa
## 44           5.0         3.5          1.6         0.6     setosa
## 45           5.1         3.8          1.9         0.4     setosa
## 46           4.8         3.0          1.4         0.3     setosa
## 47           5.1         3.8          1.6         0.2     setosa
## 48           4.6         3.2          1.4         0.2     setosa
## 49           5.3         3.7          1.5         0.2     setosa
## 50           5.0         3.3          1.4         0.2     setosa
## 51           7.0         3.2          4.7         1.4 versicolor
## 52           6.4         3.2          4.5         1.5 versicolor
## 53           6.9         3.1          4.9         1.5 versicolor
## 54           5.5         2.3          4.0         1.3 versicolor
## 55           6.5         2.8          4.6         1.5 versicolor
## 56           5.7         2.8          4.5         1.3 versicolor
## 57           6.3         3.3          4.7         1.6 versicolor
## 58           4.9         2.4          3.3         1.0 versicolor
## 59           6.6         2.9          4.6         1.3 versicolor
## 60           5.2         2.7          3.9         1.4 versicolor
## 61           5.0         2.0          3.5         1.0 versicolor
## 62           5.9         3.0          4.2         1.5 versicolor
## 63           6.0         2.2          4.0         1.0 versicolor
## 64           6.1         2.9          4.7         1.4 versicolor
## 65           5.6         2.9          3.6         1.3 versicolor
## 66           6.7         3.1          4.4         1.4 versicolor
## 67           5.6         3.0          4.5         1.5 versicolor
## 68           5.8         2.7          4.1         1.0 versicolor
## 69           6.2         2.2          4.5         1.5 versicolor
## 70           5.6         2.5          3.9         1.1 versicolor
## 71           5.9         3.2          4.8         1.8 versicolor
## 72           6.1         2.8          4.0         1.3 versicolor
## 73           6.3         2.5          4.9         1.5 versicolor
## 74           6.1         2.8          4.7         1.2 versicolor
## 75           6.4         2.9          4.3         1.3 versicolor
## 76           6.6         3.0          4.4         1.4 versicolor
## 77           6.8         2.8          4.8         1.4 versicolor
## 78           6.7         3.0          5.0         1.7 versicolor
## 79           6.0         2.9          4.5         1.5 versicolor
## 80           5.7         2.6          3.5         1.0 versicolor
## 81           5.5         2.4          3.8         1.1 versicolor
## 82           5.5         2.4          3.7         1.0 versicolor
## 83           5.8         2.7          3.9         1.2 versicolor
## 84           6.0         2.7          5.1         1.6 versicolor
## 85           5.4         3.0          4.5         1.5 versicolor
## 86           6.0         3.4          4.5         1.6 versicolor
## 87           6.7         3.1          4.7         1.5 versicolor
## 88           6.3         2.3          4.4         1.3 versicolor
## 89           5.6         3.0          4.1         1.3 versicolor
## 90           5.5         2.5          4.0         1.3 versicolor
## 91           5.5         2.6          4.4         1.2 versicolor
## 92           6.1         3.0          4.6         1.4 versicolor
## 93           5.8         2.6          4.0         1.2 versicolor
## 94           5.0         2.3          3.3         1.0 versicolor
## 95           5.6         2.7          4.2         1.3 versicolor
## 96           5.7         3.0          4.2         1.2 versicolor
## 97           5.7         2.9          4.2         1.3 versicolor
## 98           6.2         2.9          4.3         1.3 versicolor
## 99           5.1         2.5          3.0         1.1 versicolor
## 100          5.7         2.8          4.1         1.3 versicolor
## 101          6.3         3.3          6.0         2.5  virginica
## 102          5.8         2.7          5.1         1.9  virginica
## 103          7.1         3.0          5.9         2.1  virginica
## 104          6.3         2.9          5.6         1.8  virginica
## 105          6.5         3.0          5.8         2.2  virginica
## 106          7.6         3.0          6.6         2.1  virginica
## 107          4.9         2.5          4.5         1.7  virginica
## 108          7.3         2.9          6.3         1.8  virginica
## 109          6.7         2.5          5.8         1.8  virginica
## 110          7.2         3.6          6.1         2.5  virginica
## 111          6.5         3.2          5.1         2.0  virginica
## 112          6.4         2.7          5.3         1.9  virginica
## 113          6.8         3.0          5.5         2.1  virginica
## 114          5.7         2.5          5.0         2.0  virginica
## 115          5.8         2.8          5.1         2.4  virginica
## 116          6.4         3.2          5.3         2.3  virginica
## 117          6.5         3.0          5.5         1.8  virginica
## 118          7.7         3.8          6.7         2.2  virginica
## 119          7.7         2.6          6.9         2.3  virginica
## 120          6.0         2.2          5.0         1.5  virginica
## 121          6.9         3.2          5.7         2.3  virginica
## 122          5.6         2.8          4.9         2.0  virginica
## 123          7.7         2.8          6.7         2.0  virginica
## 124          6.3         2.7          4.9         1.8  virginica
## 125          6.7         3.3          5.7         2.1  virginica
## 126          7.2         3.2          6.0         1.8  virginica
## 127          6.2         2.8          4.8         1.8  virginica
## 128          6.1         3.0          4.9         1.8  virginica
## 129          6.4         2.8          5.6         2.1  virginica
## 130          7.2         3.0          5.8         1.6  virginica
## 131          7.4         2.8          6.1         1.9  virginica
## 132          7.9         3.8          6.4         2.0  virginica
## 133          6.4         2.8          5.6         2.2  virginica
## 134          6.3         2.8          5.1         1.5  virginica
## 135          6.1         2.6          5.6         1.4  virginica
## 136          7.7         3.0          6.1         2.3  virginica
## 137          6.3         3.4          5.6         2.4  virginica
## 138          6.4         3.1          5.5         1.8  virginica
## 139          6.0         3.0          4.8         1.8  virginica
## 140          6.9         3.1          5.4         2.1  virginica
## 141          6.7         3.1          5.6         2.4  virginica
## 142          6.9         3.1          5.1         2.3  virginica
## 143          5.8         2.7          5.1         1.9  virginica
## 144          6.8         3.2          5.9         2.3  virginica
## 145          6.7         3.3          5.7         2.5  virginica
## 146          6.7         3.0          5.2         2.3  virginica
## 147          6.3         2.5          5.0         1.9  virginica
## 148          6.5         3.0          5.2         2.0  virginica
## 149          6.2         3.4          5.4         2.3  virginica
## 150          5.9         3.0          5.1         1.8  virginica

Entender Datos

summary(df)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 
str(df)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
#create_report(df)
plot_missing(df)

plot_histogram(df)

plot_correlation(df)

NOTA: En modelos de clasificación, la variable que queremos predecir debe tener el formato de FACTOR.

Partir la base de datos

# Normalmente 80-20 o 70-30
set.seed(123)
renglones_entrenamiento <- createDataPartition(df$Species, p=0.8 , list= FALSE)
entrenamiento <- df[renglones_entrenamiento,]
prueba <- df[-renglones_entrenamiento,]

Distintos tipos de Métodos para Modelar

Los métodos más utilizados para modelar aprendizaje automático son:

  • SVM: Support Vector Machine o Máquina de Vectores de Soporte. Hay varios subtipos: Lineal(svmLinear),Radial(svmRadial),Polinómico(svmPoly),etc.
  • Árbol de Decisión: rpart
  • Redes Neuronales: nnet
  • Random Forest o Bosques Aleatorios: rf

Modelo 1. SVM Lineal

modelo1 <- train(Species~.,data = entrenamiento,
                 method = "svmLinear",# Cambiar
                 preProcess = c("scale","center"),
                 trControl = trainControl(method="cv",number = 10),
                 tuneGride = data.frame(c=1) # Cambiar
                 )

resultado_entrenamiento1 <- predict(modelo1,entrenamiento)
resultado_prueba1 <- predict(modelo1,prueba)

# Matriz de Confusión
# Es una tabla de evaluación que desglosa el rendimiento del modelo de clasificación

# Matriz de Confusión de Resultado de Entrenamiento
mcre1 <- confusionMatrix(resultado_entrenamiento1,entrenamiento$Species)
mcre1
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         40          0         0
##   versicolor      0         39         0
##   virginica       0          1        40
## 
## Overall Statistics
##                                           
##                Accuracy : 0.9917          
##                  95% CI : (0.9544, 0.9998)
##     No Information Rate : 0.3333          
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.9875          
##                                           
##  Mcnemar's Test P-Value : NA              
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            0.9750           1.0000
## Specificity                 1.0000            1.0000           0.9875
## Pos Pred Value              1.0000            1.0000           0.9756
## Neg Pred Value              1.0000            0.9877           1.0000
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3250           0.3333
## Detection Prevalence        0.3333            0.3250           0.3417
## Balanced Accuracy           1.0000            0.9875           0.9938
# Matriz de Confusión del Resultado de la Prueba
mcrp1 <- confusionMatrix(resultado_prueba1,prueba$Species)
mcrp1
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         10          0         0
##   versicolor      0         10         1
##   virginica       0          0         9
## 
## Overall Statistics
##                                           
##                Accuracy : 0.9667          
##                  95% CI : (0.8278, 0.9992)
##     No Information Rate : 0.3333          
##     P-Value [Acc > NIR] : 2.963e-13       
##                                           
##                   Kappa : 0.95            
##                                           
##  Mcnemar's Test P-Value : NA              
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            1.0000           0.9000
## Specificity                 1.0000            0.9500           1.0000
## Pos Pred Value              1.0000            0.9091           1.0000
## Neg Pred Value              1.0000            1.0000           0.9524
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3333           0.3000
## Detection Prevalence        0.3333            0.3667           0.3000
## Balanced Accuracy           1.0000            0.9750           0.9500

Modelo 2. SVM Radial

modelo2 <- train(Species~.,data = entrenamiento,
                 method = "svmRadial",# Cambiar
                 preProcess = c("scale","center"),
                 trControl = trainControl(method="cv",number = 10),
                 tuneGride = data.frame(sigma=1,c=1) # Cambiar
                 )

resultado_entrenamiento2 <- predict(modelo2,entrenamiento)
resultado_prueba2 <- predict(modelo2,prueba)

# Matriz de Confusión
# Es una tabla de evaluación que desglosa el rendimiento del modelo de clasificación

# Matriz de Confusión de Resultado de Entrenamiento
mcre2 <- confusionMatrix(resultado_entrenamiento2,entrenamiento$Species)
mcre2
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         40          0         0
##   versicolor      0         39         0
##   virginica       0          1        40
## 
## Overall Statistics
##                                           
##                Accuracy : 0.9917          
##                  95% CI : (0.9544, 0.9998)
##     No Information Rate : 0.3333          
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.9875          
##                                           
##  Mcnemar's Test P-Value : NA              
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            0.9750           1.0000
## Specificity                 1.0000            1.0000           0.9875
## Pos Pred Value              1.0000            1.0000           0.9756
## Neg Pred Value              1.0000            0.9877           1.0000
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3250           0.3333
## Detection Prevalence        0.3333            0.3250           0.3417
## Balanced Accuracy           1.0000            0.9875           0.9938
# Matriz de Confusión del Resultado de la Prueba
mcrp2 <- confusionMatrix(resultado_prueba2,prueba$Species)
mcrp2
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         10          0         0
##   versicolor      0         10         2
##   virginica       0          0         8
## 
## Overall Statistics
##                                           
##                Accuracy : 0.9333          
##                  95% CI : (0.7793, 0.9918)
##     No Information Rate : 0.3333          
##     P-Value [Acc > NIR] : 8.747e-12       
##                                           
##                   Kappa : 0.9             
##                                           
##  Mcnemar's Test P-Value : NA              
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            1.0000           0.8000
## Specificity                 1.0000            0.9000           1.0000
## Pos Pred Value              1.0000            0.8333           1.0000
## Neg Pred Value              1.0000            1.0000           0.9091
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3333           0.2667
## Detection Prevalence        0.3333            0.4000           0.2667
## Balanced Accuracy           1.0000            0.9500           0.9000

Modelo 3. SVM Polinómico

modelo3 <- train(Species~.,data = entrenamiento,
                 method = "svmPoly",# Cambiar
                 preProcess = c("scale","center"),
                 trControl = trainControl(method="cv",number = 10),
                 tuneGride = data.frame(degree=1,sigma=1,c=1) # Cambiar
                 )

resultado_entrenamiento3 <- predict(modelo3,entrenamiento)
resultado_prueba3 <- predict(modelo3,prueba)

# Matriz de Confusión
# Es una tabla de evaluación que desglosa el rendimiento del modelo de clasificación

# Matriz de Confusión de Resultado de Entrenamiento
mcre3 <- confusionMatrix(resultado_entrenamiento3,entrenamiento$Species)
mcre3
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         40          0         0
##   versicolor      0         40         4
##   virginica       0          0        36
## 
## Overall Statistics
##                                           
##                Accuracy : 0.9667          
##                  95% CI : (0.9169, 0.9908)
##     No Information Rate : 0.3333          
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.95            
##                                           
##  Mcnemar's Test P-Value : NA              
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            1.0000           0.9000
## Specificity                 1.0000            0.9500           1.0000
## Pos Pred Value              1.0000            0.9091           1.0000
## Neg Pred Value              1.0000            1.0000           0.9524
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3333           0.3000
## Detection Prevalence        0.3333            0.3667           0.3000
## Balanced Accuracy           1.0000            0.9750           0.9500
# Matriz de Confusión del Resultado de la Prueba
mcrp3 <- confusionMatrix(resultado_prueba3,prueba$Species)
mcrp3
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         10          0         0
##   versicolor      0         10         2
##   virginica       0          0         8
## 
## Overall Statistics
##                                           
##                Accuracy : 0.9333          
##                  95% CI : (0.7793, 0.9918)
##     No Information Rate : 0.3333          
##     P-Value [Acc > NIR] : 8.747e-12       
##                                           
##                   Kappa : 0.9             
##                                           
##  Mcnemar's Test P-Value : NA              
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            1.0000           0.8000
## Specificity                 1.0000            0.9000           1.0000
## Pos Pred Value              1.0000            0.8333           1.0000
## Neg Pred Value              1.0000            1.0000           0.9091
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3333           0.2667
## Detection Prevalence        0.3333            0.4000           0.2667
## Balanced Accuracy           1.0000            0.9500           0.9000

Modelo 4. Árbol de Decisión

modelo4 <- train(Species~.,data = entrenamiento,
                 method = "rpart",# Cambiar
                 preProcess = c("scale","center"),
                 trControl = trainControl(method="cv",number = 10),
                 tuneLength = 10 # Cambiar
                 )

resultado_entrenamiento4 <- predict(modelo4,entrenamiento)
resultado_prueba4 <- predict(modelo4,prueba)

# Matriz de Confusión
# Es una tabla de evaluación que desglosa el rendimiento del modelo de clasificación

# Matriz de Confusión de Resultado de Entrenamiento
mcre4 <- confusionMatrix(resultado_entrenamiento4,entrenamiento$Species)
mcre4
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         40          0         0
##   versicolor      0         39         3
##   virginica       0          1        37
## 
## Overall Statistics
##                                           
##                Accuracy : 0.9667          
##                  95% CI : (0.9169, 0.9908)
##     No Information Rate : 0.3333          
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.95            
##                                           
##  Mcnemar's Test P-Value : NA              
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            0.9750           0.9250
## Specificity                 1.0000            0.9625           0.9875
## Pos Pred Value              1.0000            0.9286           0.9737
## Neg Pred Value              1.0000            0.9872           0.9634
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3250           0.3083
## Detection Prevalence        0.3333            0.3500           0.3167
## Balanced Accuracy           1.0000            0.9688           0.9563
# Matriz de Confusión del Resultado de la Prueba
mcrp4 <- confusionMatrix(resultado_prueba4,prueba$Species)
mcrp4
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         10          0         0
##   versicolor      0         10         2
##   virginica       0          0         8
## 
## Overall Statistics
##                                           
##                Accuracy : 0.9333          
##                  95% CI : (0.7793, 0.9918)
##     No Information Rate : 0.3333          
##     P-Value [Acc > NIR] : 8.747e-12       
##                                           
##                   Kappa : 0.9             
##                                           
##  Mcnemar's Test P-Value : NA              
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            1.0000           0.8000
## Specificity                 1.0000            0.9000           1.0000
## Pos Pred Value              1.0000            0.8333           1.0000
## Neg Pred Value              1.0000            1.0000           0.9091
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3333           0.2667
## Detection Prevalence        0.3333            0.4000           0.2667
## Balanced Accuracy           1.0000            0.9500           0.9000

Modelo 5. Bosques Aleatorios

modelo5 <- train(Species~.,data = entrenamiento,
                 method = "rf",# Cambiar
                 preProcess = c("scale","center"),
                 trControl = trainControl(method="cv",number = 10),
                 tuneGrid = expand.grid(mtry = c(2,4,6)) # Cambiar
                 )

resultado_entrenamiento5 <- predict(modelo5,entrenamiento)
resultado_prueba5 <- predict(modelo5,prueba)

# Matriz de Confusión
# Es una tabla de evaluación que desglosa el rendimiento del modelo de clasificación

# Matriz de Confusión de Resultado de Entrenamiento
mcre5 <- confusionMatrix(resultado_entrenamiento5,entrenamiento$Species)
mcre5
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         40          0         0
##   versicolor      0         40         0
##   virginica       0          0        40
## 
## Overall Statistics
##                                      
##                Accuracy : 1          
##                  95% CI : (0.9697, 1)
##     No Information Rate : 0.3333     
##     P-Value [Acc > NIR] : < 2.2e-16  
##                                      
##                   Kappa : 1          
##                                      
##  Mcnemar's Test P-Value : NA         
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            1.0000           1.0000
## Specificity                 1.0000            1.0000           1.0000
## Pos Pred Value              1.0000            1.0000           1.0000
## Neg Pred Value              1.0000            1.0000           1.0000
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3333           0.3333
## Detection Prevalence        0.3333            0.3333           0.3333
## Balanced Accuracy           1.0000            1.0000           1.0000
# Matriz de Confusión del Resultado de la Prueba
mcrp5 <- confusionMatrix(resultado_prueba5,prueba$Species)
mcrp5
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         10          0         0
##   versicolor      0         10         2
##   virginica       0          0         8
## 
## Overall Statistics
##                                           
##                Accuracy : 0.9333          
##                  95% CI : (0.7793, 0.9918)
##     No Information Rate : 0.3333          
##     P-Value [Acc > NIR] : 8.747e-12       
##                                           
##                   Kappa : 0.9             
##                                           
##  Mcnemar's Test P-Value : NA              
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            1.0000           0.8000
## Specificity                 1.0000            0.9000           1.0000
## Pos Pred Value              1.0000            0.8333           1.0000
## Neg Pred Value              1.0000            1.0000           0.9091
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3333           0.2667
## Detection Prevalence        0.3333            0.4000           0.2667
## Balanced Accuracy           1.0000            0.9500           0.9000

Modelo 6. Redes Neuronales

modelo6 <- train(Species~.,data = entrenamiento,
                 method = "nnet",# Cambiar
                 preProcess = c("scale","center"),
                 trControl = trainControl(method = "cv",number = 10) # Cambiar
                 )
## # weights:  11
## initial  value 126.154662 
## iter  10 value 50.048602
## iter  20 value 47.429060
## iter  30 value 45.787177
## iter  40 value 45.434304
## iter  50 value 45.374838
## iter  60 value 45.089135
## iter  70 value 11.196504
## iter  80 value 3.619535
## iter  90 value 2.932576
## iter 100 value 2.714616
## final  value 2.714616 
## stopped after 100 iterations
## # weights:  27
## initial  value 161.788034 
## iter  10 value 14.561975
## iter  20 value 0.605038
## iter  30 value 0.001845
## final  value 0.000074 
## converged
## # weights:  43
## initial  value 140.296214 
## iter  10 value 6.271680
## iter  20 value 0.163333
## iter  30 value 0.000897
## final  value 0.000082 
## converged
## # weights:  11
## initial  value 132.480864 
## iter  10 value 57.583482
## iter  20 value 44.052178
## final  value 44.046903 
## converged
## # weights:  27
## initial  value 139.420119 
## iter  10 value 28.818974
## iter  20 value 19.992893
## iter  30 value 19.711155
## iter  40 value 19.709264
## iter  50 value 19.709184
## iter  50 value 19.709184
## iter  50 value 19.709184
## final  value 19.709184 
## converged
## # weights:  43
## initial  value 154.274936 
## iter  10 value 26.264066
## iter  20 value 20.644698
## iter  30 value 19.420108
## iter  40 value 18.491002
## iter  50 value 18.440854
## iter  60 value 18.436006
## iter  70 value 18.435571
## final  value 18.435529 
## converged
## # weights:  11
## initial  value 129.828524 
## iter  10 value 29.200122
## iter  20 value 5.281451
## iter  30 value 3.610622
## iter  40 value 3.114191
## iter  50 value 3.066582
## iter  60 value 3.021939
## iter  70 value 2.977396
## iter  80 value 2.976503
## iter  90 value 2.974709
## final  value 2.973602 
## converged
## # weights:  27
## initial  value 126.664388 
## iter  10 value 4.712569
## iter  20 value 0.305208
## iter  30 value 0.287394
## iter  40 value 0.267558
## iter  50 value 0.258061
## iter  60 value 0.248416
## iter  70 value 0.244327
## iter  80 value 0.237650
## iter  90 value 0.228249
## iter 100 value 0.218144
## final  value 0.218144 
## stopped after 100 iterations
## # weights:  43
## initial  value 142.225765 
## iter  10 value 4.313550
## iter  20 value 0.371929
## iter  30 value 0.333248
## iter  40 value 0.307199
## iter  50 value 0.290590
## iter  60 value 0.221249
## iter  70 value 0.205156
## iter  80 value 0.198463
## iter  90 value 0.190623
## iter 100 value 0.185782
## final  value 0.185782 
## stopped after 100 iterations
## # weights:  11
## initial  value 123.905912 
## iter  10 value 57.195277
## iter  20 value 49.180745
## iter  30 value 43.003305
## iter  40 value 13.638435
## iter  50 value 4.105965
## iter  60 value 3.536221
## iter  70 value 3.123126
## iter  80 value 2.516877
## iter  90 value 2.086155
## iter 100 value 1.772734
## final  value 1.772734 
## stopped after 100 iterations
## # weights:  27
## initial  value 150.323194 
## iter  10 value 7.271418
## iter  20 value 0.304396
## iter  30 value 0.000945
## final  value 0.000046 
## converged
## # weights:  43
## initial  value 120.108936 
## iter  10 value 5.953416
## iter  20 value 0.226479
## iter  30 value 0.002288
## iter  40 value 0.000387
## final  value 0.000078 
## converged
## # weights:  11
## initial  value 118.275156 
## iter  10 value 44.392549
## iter  20 value 43.154917
## final  value 43.154900 
## converged
## # weights:  27
## initial  value 140.206285 
## iter  10 value 49.467434
## iter  20 value 23.024323
## iter  30 value 21.599403
## iter  40 value 21.543537
## iter  50 value 21.539326
## iter  60 value 21.539031
## iter  70 value 21.535645
## final  value 21.535598 
## converged
## # weights:  43
## initial  value 136.472646 
## iter  10 value 30.034392
## iter  20 value 19.323470
## iter  30 value 17.929789
## iter  40 value 17.843860
## iter  50 value 17.699336
## iter  60 value 17.512057
## iter  70 value 17.511182
## final  value 17.511179 
## converged
## # weights:  11
## initial  value 132.325224 
## iter  10 value 56.136015
## iter  20 value 55.341494
## iter  30 value 55.314962
## iter  40 value 55.303966
## iter  50 value 55.251370
## iter  60 value 50.019435
## iter  70 value 50.011180
## iter  80 value 49.967392
## iter  90 value 49.963287
## iter 100 value 47.062585
## final  value 47.062585 
## stopped after 100 iterations
## # weights:  27
## initial  value 139.094262 
## iter  10 value 3.996656
## iter  20 value 0.648863
## iter  30 value 0.610539
## iter  40 value 0.490452
## iter  50 value 0.459433
## iter  60 value 0.439475
## iter  70 value 0.416765
## iter  80 value 0.387627
## iter  90 value 0.364682
## iter 100 value 0.361405
## final  value 0.361405 
## stopped after 100 iterations
## # weights:  43
## initial  value 145.929717 
## iter  10 value 5.464400
## iter  20 value 1.549774
## iter  30 value 0.421560
## iter  40 value 0.387580
## iter  50 value 0.365186
## iter  60 value 0.344216
## iter  70 value 0.337189
## iter  80 value 0.322317
## iter  90 value 0.310611
## iter 100 value 0.302901
## final  value 0.302901 
## stopped after 100 iterations
## # weights:  11
## initial  value 134.738535 
## iter  10 value 90.034069
## iter  20 value 66.547422
## iter  30 value 66.218383
## iter  40 value 66.148020
## iter  50 value 66.139088
## iter  60 value 66.129895
## iter  70 value 63.538765
## iter  80 value 61.651951
## iter  90 value 60.704177
## iter 100 value 54.278551
## final  value 54.278551 
## stopped after 100 iterations
## # weights:  27
## initial  value 158.948958 
## iter  10 value 4.936680
## iter  20 value 1.643973
## iter  30 value 0.006658
## iter  40 value 0.000426
## final  value 0.000059 
## converged
## # weights:  43
## initial  value 110.987561 
## iter  10 value 4.730618
## iter  20 value 0.162545
## iter  30 value 0.000110
## iter  30 value 0.000054
## iter  30 value 0.000053
## final  value 0.000053 
## converged
## # weights:  11
## initial  value 124.448372 
## iter  10 value 54.166199
## iter  20 value 43.785923
## final  value 43.784882 
## converged
## # weights:  27
## initial  value 139.487724 
## iter  10 value 31.954047
## iter  20 value 22.569116
## iter  30 value 20.821212
## iter  40 value 20.141530
## iter  50 value 19.738076
## iter  60 value 19.729416
## iter  70 value 19.727639
## final  value 19.727639 
## converged
## # weights:  43
## initial  value 123.940776 
## iter  10 value 21.489424
## iter  20 value 18.419176
## iter  30 value 18.196367
## iter  40 value 18.183251
## iter  50 value 18.183122
## final  value 18.183117 
## converged
## # weights:  11
## initial  value 130.121220 
## iter  10 value 49.885634
## iter  20 value 47.914431
## iter  30 value 45.779510
## iter  40 value 44.168796
## iter  50 value 32.081508
## iter  60 value 6.082009
## iter  70 value 4.640165
## iter  80 value 4.500135
## iter  90 value 4.067687
## iter 100 value 3.887572
## final  value 3.887572 
## stopped after 100 iterations
## # weights:  27
## initial  value 126.574097 
## iter  10 value 23.553950
## iter  20 value 2.447080
## iter  30 value 0.781255
## iter  40 value 0.705511
## iter  50 value 0.600211
## iter  60 value 0.555613
## iter  70 value 0.531150
## iter  80 value 0.516206
## iter  90 value 0.497191
## iter 100 value 0.477903
## final  value 0.477903 
## stopped after 100 iterations
## # weights:  43
## initial  value 128.611920 
## iter  10 value 6.194470
## iter  20 value 0.964174
## iter  30 value 0.515971
## iter  40 value 0.441516
## iter  50 value 0.425631
## iter  60 value 0.406008
## iter  70 value 0.382849
## iter  80 value 0.365949
## iter  90 value 0.350943
## iter 100 value 0.303240
## final  value 0.303240 
## stopped after 100 iterations
## # weights:  11
## initial  value 118.941032 
## iter  10 value 44.631372
## iter  20 value 23.886178
## iter  30 value 7.274923
## iter  40 value 4.171524
## iter  50 value 3.897185
## iter  60 value 3.074095
## iter  70 value 2.756239
## iter  80 value 2.609340
## iter  90 value 2.588601
## iter 100 value 2.503120
## final  value 2.503120 
## stopped after 100 iterations
## # weights:  27
## initial  value 113.120286 
## iter  10 value 7.194922
## iter  20 value 1.119093
## iter  30 value 0.000120
## iter  30 value 0.000059
## iter  30 value 0.000059
## final  value 0.000059 
## converged
## # weights:  43
## initial  value 128.292656 
## iter  10 value 8.864264
## iter  20 value 1.986516
## iter  30 value 0.047470
## iter  40 value 0.000933
## final  value 0.000038 
## converged
## # weights:  11
## initial  value 125.434017 
## iter  10 value 64.438822
## iter  20 value 48.090492
## iter  30 value 44.148195
## final  value 44.116522 
## converged
## # weights:  27
## initial  value 127.780501 
## iter  10 value 33.460603
## iter  20 value 20.369424
## iter  30 value 20.258591
## final  value 20.258492 
## converged
## # weights:  43
## initial  value 126.415100 
## iter  10 value 27.025298
## iter  20 value 19.184565
## iter  30 value 18.826007
## iter  40 value 18.757904
## iter  50 value 18.743439
## iter  60 value 18.692529
## iter  70 value 18.454816
## iter  80 value 18.395720
## final  value 18.395647 
## converged
## # weights:  11
## initial  value 118.270173 
## iter  10 value 51.497955
## iter  20 value 49.977897
## iter  30 value 49.968698
## iter  40 value 49.964308
## final  value 49.955625 
## converged
## # weights:  27
## initial  value 130.757272 
## iter  10 value 7.876558
## iter  20 value 1.359423
## iter  30 value 0.654823
## iter  40 value 0.597562
## iter  50 value 0.570525
## iter  60 value 0.549937
## iter  70 value 0.542867
## iter  80 value 0.526913
## iter  90 value 0.498340
## iter 100 value 0.486623
## final  value 0.486623 
## stopped after 100 iterations
## # weights:  43
## initial  value 146.618582 
## iter  10 value 8.655055
## iter  20 value 1.533527
## iter  30 value 0.772295
## iter  40 value 0.727174
## iter  50 value 0.649014
## iter  60 value 0.584837
## iter  70 value 0.513545
## iter  80 value 0.487415
## iter  90 value 0.465265
## iter 100 value 0.384079
## final  value 0.384079 
## stopped after 100 iterations
## # weights:  11
## initial  value 126.000833 
## iter  10 value 50.295427
## iter  20 value 49.472885
## iter  30 value 49.220103
## iter  40 value 49.206497
## final  value 49.206442 
## converged
## # weights:  27
## initial  value 125.697913 
## iter  10 value 6.086448
## iter  20 value 2.421862
## iter  30 value 0.008416
## final  value 0.000090 
## converged
## # weights:  43
## initial  value 126.394561 
## iter  10 value 4.648390
## iter  20 value 0.313838
## iter  30 value 0.003192
## final  value 0.000073 
## converged
## # weights:  11
## initial  value 131.420740 
## iter  10 value 44.129471
## iter  20 value 43.481447
## final  value 43.481307 
## converged
## # weights:  27
## initial  value 126.547169 
## iter  10 value 28.167429
## iter  20 value 20.573538
## iter  30 value 19.435929
## iter  40 value 19.365110
## final  value 19.364846 
## converged
## # weights:  43
## initial  value 137.690931 
## iter  10 value 39.280413
## iter  20 value 21.352841
## iter  30 value 20.310524
## iter  40 value 20.163327
## iter  50 value 20.151201
## iter  60 value 20.150286
## final  value 20.150283 
## converged
## # weights:  11
## initial  value 121.829056 
## iter  10 value 43.368262
## iter  20 value 5.991703
## iter  30 value 4.395965
## iter  40 value 3.935466
## iter  50 value 3.898499
## iter  60 value 3.844202
## iter  70 value 3.750228
## iter  80 value 3.749990
## iter  90 value 3.749470
## iter 100 value 3.748870
## final  value 3.748870 
## stopped after 100 iterations
## # weights:  27
## initial  value 146.631491 
## iter  10 value 8.481129
## iter  20 value 0.922968
## iter  30 value 0.814604
## iter  40 value 0.716122
## iter  50 value 0.600861
## iter  60 value 0.556521
## iter  70 value 0.518042
## iter  80 value 0.500138
## iter  90 value 0.458980
## iter 100 value 0.410634
## final  value 0.410634 
## stopped after 100 iterations
## # weights:  43
## initial  value 117.948329 
## iter  10 value 4.544703
## iter  20 value 0.687427
## iter  30 value 0.525553
## iter  40 value 0.497072
## iter  50 value 0.431370
## iter  60 value 0.405263
## iter  70 value 0.379502
## iter  80 value 0.366528
## iter  90 value 0.351545
## iter 100 value 0.331066
## final  value 0.331066 
## stopped after 100 iterations
## # weights:  11
## initial  value 124.489046 
## iter  10 value 49.953166
## iter  20 value 49.911305
## iter  30 value 49.907488
## iter  40 value 49.907148
## iter  50 value 49.906511
## final  value 49.906501 
## converged
## # weights:  27
## initial  value 136.247850 
## iter  10 value 16.703621
## iter  20 value 2.147246
## iter  30 value 0.442876
## iter  40 value 0.001483
## final  value 0.000071 
## converged
## # weights:  43
## initial  value 162.112090 
## iter  10 value 6.552981
## iter  20 value 1.071715
## iter  30 value 0.001222
## final  value 0.000099 
## converged
## # weights:  11
## initial  value 122.684893 
## iter  10 value 58.768163
## iter  20 value 43.905630
## iter  30 value 43.565087
## final  value 43.565017 
## converged
## # weights:  27
## initial  value 123.931365 
## iter  10 value 29.720682
## iter  20 value 20.148054
## iter  30 value 19.909664
## iter  40 value 19.901063
## final  value 19.901047 
## converged
## # weights:  43
## initial  value 114.322251 
## iter  10 value 32.043615
## iter  20 value 19.081034
## iter  30 value 18.498438
## iter  40 value 18.459951
## iter  50 value 18.458481
## final  value 18.458472 
## converged
## # weights:  11
## initial  value 117.757741 
## iter  10 value 36.176118
## iter  20 value 5.862014
## iter  30 value 4.018818
## iter  40 value 3.863578
## iter  50 value 3.821585
## iter  60 value 3.819143
## iter  70 value 3.815525
## final  value 3.808618 
## converged
## # weights:  27
## initial  value 127.614738 
## iter  10 value 9.383481
## iter  20 value 1.527943
## iter  30 value 0.778231
## iter  40 value 0.614370
## iter  50 value 0.595383
## iter  60 value 0.569180
## iter  70 value 0.541238
## iter  80 value 0.519341
## iter  90 value 0.445589
## iter 100 value 0.433290
## final  value 0.433290 
## stopped after 100 iterations
## # weights:  43
## initial  value 125.083575 
## iter  10 value 5.691190
## iter  20 value 0.675459
## iter  30 value 0.607766
## iter  40 value 0.567793
## iter  50 value 0.507763
## iter  60 value 0.449674
## iter  70 value 0.406804
## iter  80 value 0.389696
## iter  90 value 0.370407
## iter 100 value 0.340462
## final  value 0.340462 
## stopped after 100 iterations
## # weights:  11
## initial  value 121.343721 
## iter  10 value 45.881467
## iter  20 value 31.216217
## iter  30 value 7.459858
## iter  40 value 3.973244
## iter  50 value 3.275873
## iter  60 value 2.367635
## iter  70 value 2.205916
## iter  80 value 2.106360
## iter  90 value 2.060791
## iter 100 value 1.689080
## final  value 1.689080 
## stopped after 100 iterations
## # weights:  27
## initial  value 130.012821 
## iter  10 value 7.638797
## iter  20 value 1.798215
## iter  30 value 0.006314
## final  value 0.000088 
## converged
## # weights:  43
## initial  value 131.979010 
## iter  10 value 3.997876
## iter  20 value 0.235680
## iter  30 value 0.001116
## final  value 0.000089 
## converged
## # weights:  11
## initial  value 135.570262 
## iter  10 value 58.796287
## iter  20 value 53.475266
## iter  30 value 43.899730
## final  value 43.844028 
## converged
## # weights:  27
## initial  value 121.444584 
## iter  10 value 23.149842
## iter  20 value 21.044073
## iter  30 value 20.495497
## iter  40 value 20.493302
## iter  40 value 20.493302
## iter  40 value 20.493302
## final  value 20.493302 
## converged
## # weights:  43
## initial  value 127.515226 
## iter  10 value 30.114591
## iter  20 value 19.227054
## iter  30 value 18.189262
## iter  40 value 18.069084
## iter  50 value 17.725591
## iter  60 value 17.658514
## iter  70 value 17.657227
## final  value 17.657184 
## converged
## # weights:  11
## initial  value 123.121256 
## iter  10 value 41.795248
## iter  20 value 8.644830
## iter  30 value 3.620519
## iter  40 value 3.404036
## iter  50 value 3.285022
## iter  60 value 3.282462
## iter  70 value 3.261091
## iter  80 value 3.231905
## iter  90 value 3.231773
## iter 100 value 3.231580
## final  value 3.231580 
## stopped after 100 iterations
## # weights:  27
## initial  value 134.005596 
## iter  10 value 4.500463
## iter  20 value 1.008713
## iter  30 value 0.523768
## iter  40 value 0.444410
## iter  50 value 0.420125
## iter  60 value 0.393461
## iter  70 value 0.361197
## iter  80 value 0.347167
## iter  90 value 0.334439
## iter 100 value 0.321024
## final  value 0.321024 
## stopped after 100 iterations
## # weights:  43
## initial  value 138.119868 
## iter  10 value 3.156261
## iter  20 value 0.382902
## iter  30 value 0.311994
## iter  40 value 0.296576
## iter  50 value 0.275577
## iter  60 value 0.248813
## iter  70 value 0.240516
## iter  80 value 0.232149
## iter  90 value 0.227705
## iter 100 value 0.225915
## final  value 0.225915 
## stopped after 100 iterations
## # weights:  11
## initial  value 125.752991 
## iter  10 value 44.310729
## iter  20 value 11.907721
## iter  30 value 0.345314
## iter  40 value 0.091998
## iter  50 value 0.030742
## iter  60 value 0.030424
## iter  70 value 0.028660
## iter  80 value 0.024845
## iter  90 value 0.024619
## iter 100 value 0.016268
## final  value 0.016268 
## stopped after 100 iterations
## # weights:  27
## initial  value 140.230219 
## iter  10 value 11.859198
## iter  20 value 0.082063
## iter  30 value 0.000159
## iter  30 value 0.000083
## iter  30 value 0.000082
## final  value 0.000082 
## converged
## # weights:  43
## initial  value 125.374598 
## iter  10 value 1.801863
## iter  20 value 0.018008
## iter  30 value 0.000203
## final  value 0.000051 
## converged
## # weights:  11
## initial  value 144.350959 
## iter  10 value 64.056371
## iter  20 value 49.698824
## iter  30 value 42.353995
## final  value 42.353914 
## converged
## # weights:  27
## initial  value 154.963831 
## iter  10 value 31.847306
## iter  20 value 20.753011
## iter  30 value 18.405187
## iter  40 value 17.873200
## iter  50 value 17.736710
## iter  60 value 17.731316
## iter  70 value 17.730858
## iter  70 value 17.730858
## iter  70 value 17.730858
## final  value 17.730858 
## converged
## # weights:  43
## initial  value 145.093930 
## iter  10 value 22.404663
## iter  20 value 16.592279
## iter  30 value 16.330235
## iter  40 value 16.312788
## iter  50 value 16.312472
## final  value 16.312471 
## converged
## # weights:  11
## initial  value 128.204871 
## iter  10 value 50.018497
## iter  20 value 49.832257
## iter  30 value 45.817220
## iter  40 value 7.517597
## iter  50 value 1.623420
## iter  60 value 1.420743
## iter  70 value 1.258022
## iter  80 value 1.193906
## iter  90 value 1.193714
## iter 100 value 1.193452
## final  value 1.193452 
## stopped after 100 iterations
## # weights:  27
## initial  value 126.393846 
## iter  10 value 3.399522
## iter  20 value 0.129826
## iter  30 value 0.123486
## iter  40 value 0.120116
## iter  50 value 0.117716
## iter  60 value 0.109358
## iter  70 value 0.107153
## iter  80 value 0.105551
## iter  90 value 0.104657
## iter 100 value 0.103381
## final  value 0.103381 
## stopped after 100 iterations
## # weights:  43
## initial  value 154.646725 
## iter  10 value 2.788428
## iter  20 value 0.136867
## iter  30 value 0.124938
## iter  40 value 0.121526
## iter  50 value 0.117165
## iter  60 value 0.112943
## iter  70 value 0.108027
## iter  80 value 0.104600
## iter  90 value 0.102855
## iter 100 value 0.100366
## final  value 0.100366 
## stopped after 100 iterations
## # weights:  11
## initial  value 144.478612 
## iter  10 value 49.121353
## iter  20 value 47.961532
## iter  30 value 13.954535
## iter  40 value 3.590413
## iter  50 value 2.092886
## iter  60 value 2.003780
## iter  70 value 1.923140
## iter  80 value 1.900792
## iter  90 value 1.599149
## iter 100 value 1.520319
## final  value 1.520319 
## stopped after 100 iterations
## # weights:  27
## initial  value 118.590071 
## iter  10 value 21.170965
## iter  20 value 1.540174
## iter  30 value 0.001946
## iter  40 value 0.000957
## iter  50 value 0.000384
## final  value 0.000082 
## converged
## # weights:  43
## initial  value 128.693322 
## iter  10 value 4.909435
## iter  20 value 1.062750
## iter  30 value 0.001171
## final  value 0.000092 
## converged
## # weights:  11
## initial  value 120.648259 
## iter  10 value 58.744694
## iter  20 value 44.395834
## iter  30 value 43.694198
## final  value 43.694197 
## converged
## # weights:  27
## initial  value 124.090568 
## iter  10 value 23.503317
## iter  20 value 20.156638
## iter  30 value 19.923280
## iter  40 value 19.864877
## final  value 19.864570 
## converged
## # weights:  43
## initial  value 133.369986 
## iter  10 value 26.143928
## iter  20 value 18.189114
## iter  30 value 17.977978
## iter  40 value 17.975164
## iter  50 value 17.974889
## final  value 17.974850 
## converged
## # weights:  11
## initial  value 120.568747 
## iter  10 value 94.975303
## iter  20 value 50.123570
## iter  30 value 50.072351
## iter  40 value 50.047579
## iter  50 value 49.977674
## iter  60 value 49.967694
## iter  70 value 48.178648
## iter  80 value 24.632719
## iter  90 value 7.678759
## iter 100 value 4.171563
## final  value 4.171563 
## stopped after 100 iterations
## # weights:  27
## initial  value 122.044199 
## iter  10 value 5.039401
## iter  20 value 0.675026
## iter  30 value 0.612475
## iter  40 value 0.539596
## iter  50 value 0.526191
## iter  60 value 0.516535
## iter  70 value 0.509899
## iter  80 value 0.499538
## iter  90 value 0.490370
## iter 100 value 0.482049
## final  value 0.482049 
## stopped after 100 iterations
## # weights:  43
## initial  value 123.513829 
## iter  10 value 5.248801
## iter  20 value 1.045101
## iter  30 value 0.624127
## iter  40 value 0.588182
## iter  50 value 0.546223
## iter  60 value 0.522713
## iter  70 value 0.492657
## iter  80 value 0.472084
## iter  90 value 0.425942
## iter 100 value 0.393600
## final  value 0.393600 
## stopped after 100 iterations
## # weights:  11
## initial  value 126.418018 
## iter  10 value 47.786232
## iter  20 value 16.691380
## iter  30 value 5.587407
## iter  40 value 2.987755
## iter  50 value 2.777220
## iter  60 value 2.685108
## iter  70 value 2.596780
## iter  80 value 2.439233
## iter  90 value 2.254746
## iter 100 value 2.154518
## final  value 2.154518 
## stopped after 100 iterations
## # weights:  27
## initial  value 126.735484 
## iter  10 value 14.663635
## iter  20 value 1.154829
## iter  30 value 0.000402
## final  value 0.000059 
## converged
## # weights:  43
## initial  value 141.320195 
## iter  10 value 11.553994
## iter  20 value 1.592326
## iter  30 value 0.003382
## final  value 0.000066 
## converged
## # weights:  11
## initial  value 127.334759 
## iter  10 value 72.551607
## iter  20 value 57.860739
## iter  30 value 44.997504
## iter  40 value 44.319715
## final  value 44.319714 
## converged
## # weights:  27
## initial  value 132.730846 
## iter  10 value 26.790558
## iter  20 value 20.644695
## iter  30 value 20.128648
## iter  40 value 20.017325
## final  value 20.009145 
## converged
## # weights:  43
## initial  value 147.495268 
## iter  10 value 21.888582
## iter  20 value 19.659905
## iter  30 value 19.130240
## iter  40 value 19.104657
## iter  50 value 19.104193
## final  value 19.104130 
## converged
## # weights:  11
## initial  value 126.550784 
## iter  10 value 41.558281
## iter  20 value 22.506261
## iter  30 value 7.752436
## iter  40 value 4.641145
## iter  50 value 4.393105
## iter  60 value 4.033007
## iter  70 value 3.930395
## iter  80 value 3.882664
## iter  90 value 3.875265
## iter 100 value 3.862103
## final  value 3.862103 
## stopped after 100 iterations
## # weights:  27
## initial  value 126.483324 
## iter  10 value 7.585980
## iter  20 value 1.517665
## iter  30 value 0.529186
## iter  40 value 0.504747
## iter  50 value 0.448959
## iter  60 value 0.413158
## iter  70 value 0.397922
## iter  80 value 0.381178
## iter  90 value 0.364197
## iter 100 value 0.351680
## final  value 0.351680 
## stopped after 100 iterations
## # weights:  43
## initial  value 108.105913 
## iter  10 value 6.098246
## iter  20 value 0.699769
## iter  30 value 0.570747
## iter  40 value 0.496389
## iter  50 value 0.469627
## iter  60 value 0.455264
## iter  70 value 0.436295
## iter  80 value 0.416914
## iter  90 value 0.410212
## iter 100 value 0.392951
## final  value 0.392951 
## stopped after 100 iterations
## # weights:  27
## initial  value 131.896724 
## iter  10 value 39.307720
## iter  20 value 22.081546
## iter  30 value 21.207147
## iter  40 value 20.975896
## iter  50 value 20.463192
## iter  60 value 20.383415
## iter  70 value 20.366063
## final  value 20.366062 
## converged
resultado_entrenamiento6 <- predict(modelo6,entrenamiento)
resultado_prueba6 <- predict(modelo6,prueba)

# Matriz de Confusión
# Es una tabla de evaluación que desglosa el rendimiento del modelo de clasificación

# Matriz de Confusión de Resultado de Entrenamiento
mcre6 <- confusionMatrix(resultado_entrenamiento6,entrenamiento$Species)
mcre6
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         40          0         0
##   versicolor      0         38         0
##   virginica       0          2        40
## 
## Overall Statistics
##                                          
##                Accuracy : 0.9833         
##                  95% CI : (0.9411, 0.998)
##     No Information Rate : 0.3333         
##     P-Value [Acc > NIR] : < 2.2e-16      
##                                          
##                   Kappa : 0.975          
##                                          
##  Mcnemar's Test P-Value : NA             
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            0.9500           1.0000
## Specificity                 1.0000            1.0000           0.9750
## Pos Pred Value              1.0000            1.0000           0.9524
## Neg Pred Value              1.0000            0.9756           1.0000
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3167           0.3333
## Detection Prevalence        0.3333            0.3167           0.3500
## Balanced Accuracy           1.0000            0.9750           0.9875
# Matriz de Confusión del Resultado de la Prueba
mcrp6 <- confusionMatrix(resultado_prueba6,prueba$Species)
mcrp6
## Confusion Matrix and Statistics
## 
##             Reference
## Prediction   setosa versicolor virginica
##   setosa         10          0         0
##   versicolor      0         10         1
##   virginica       0          0         9
## 
## Overall Statistics
##                                           
##                Accuracy : 0.9667          
##                  95% CI : (0.8278, 0.9992)
##     No Information Rate : 0.3333          
##     P-Value [Acc > NIR] : 2.963e-13       
##                                           
##                   Kappa : 0.95            
##                                           
##  Mcnemar's Test P-Value : NA              
## 
## Statistics by Class:
## 
##                      Class: setosa Class: versicolor Class: virginica
## Sensitivity                 1.0000            1.0000           0.9000
## Specificity                 1.0000            0.9500           1.0000
## Pos Pred Value              1.0000            0.9091           1.0000
## Neg Pred Value              1.0000            1.0000           0.9524
## Prevalence                  0.3333            0.3333           0.3333
## Detection Rate              0.3333            0.3333           0.3000
## Detection Prevalence        0.3333            0.3667           0.3000
## Balanced Accuracy           1.0000            0.9750           0.9500

Tabla de Resultados

resultados <- data.frame(
  "svmLinear" = c(mcre1$overall ["Accuracy"],mcrp1$overall["Accuracy"]),
  "svmRadial" = c(mcre2$overall ["Accuracy"],mcrp2$overall["Accuracy"]),
  "svmPoly" = c(mcre3$overall ["Accuracy"],mcrp3$overall["Accuracy"]),
  "rpart" = c(mcre4$overall ["Accuracy"],mcrp4$overall["Accuracy"]),
  "rf" = c(mcre5$overall ["Accuracy"],mcrp5$overall["Accuracy"]),
  "nnet" = c(mcre6$overall ["Accuracy"],mcrp6$overall["Accuracy"])
)

rownames(resultados) <- c("Exactitud del Entrenamiento","Exactitud de la Prueba")
resultados
##                             svmLinear svmRadial   svmPoly     rpart        rf
## Exactitud del Entrenamiento 0.9916667 0.9916667 0.9666667 0.9666667 1.0000000
## Exactitud de la Prueba      0.9666667 0.9333333 0.9333333 0.9333333 0.9333333
##                                  nnet
## Exactitud del Entrenamiento 0.9833333
## Exactitud de la Prueba      0.9666667

Conclusión

En conclusión, el modelo de Redes Neuronales es el recomendado para la clasificación de los lirios.

LS0tDQp0aXRsZTogIkNBUkVUIC0gSXJpcyINCmF1dGhvcjogIkx1aXMgR2FsbGFyZG8gQTAwODM4OTM0Ig0KZGF0ZTogIjIwMjYtMDgtMjYiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUNCiAgICB0aGVtZTogc2FuZHN0b25lDQotLS0NCg0KPGNlbnRlcj4NCiFbXShodHRwczovL2VuY3J5cHRlZC10Ym4wLmdzdGF0aWMuY29tL2ltYWdlcz9xPXRibjpBTmQ5R2NTWHJrRi1ZMWNsWjZKR1hkUzFaMWswWnVhcE9ralFaY3ZXRnVyRzFxZGcxQSZzPTEwKQ0KPC9jZW50ZXI+DQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPiBUZW9yw61hIDwvc3Bhbj4NCmVsIHBhcXVldGUgKipDQVJFVCAoQ2xhc3NpZmljYXRpb24gQW5kIFJlZ3Jlc3Npb24gVHJhaW5pbmcpKiogZXMgdW4gcGFxdWV0ZSBpbnRlZ3JhbCBjb24gdW5hIGFtcGxpYSB2YXJpZWRhZCBkZSBhbGdvcml0bW9zIHBhcmEgZWwgYXByZW5kaXphamUgYXV0b23DoXRpY28uIA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj4gSW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hcyA8L3NwYW4+DQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJjYXJldCIpICMgYWxnb3JpdG1vcyBkZSBhcHJlbmRpemFqZSBhdXRvbcOhdGljbw0KbGlicmFyeShjYXJldCkNCiMgaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpICMgIGdyw6FmaWNhcw0KbGlicmFyeShnZ3Bsb3QyKQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJsYXR0aWNlIikgIyBjcmVhciBncsOhZmljb3MNCmxpYnJhcnkobGF0dGljZSkNCiMgaW5zdGFsbC5wYWNrYWdlcygiZGF0YXNldHMiKSAjIHVzYXIgYmFzZXMgZGUgZGF0b3MgcHJlY2FyZ2FkYXMNCmxpYnJhcnkoZGF0YXNldHMpDQojIGluc3RhbGwucGFja2FnZXMoIkRhdGFFeHBsb3JlciIpICMgYW7DoWxpc2lzIGRlc2NyaXB0aXZvDQpsaWJyYXJ5KERhdGFFeHBsb3JlcikNCiMgaW5zdGFsbC5wYWNrYWdlcygia2VybmxhYiIpICMgYW7DoWxpc2lzIGRlc2NyaXB0aXZvDQpsaWJyYXJ5KGtlcm5sYWIpDQojIGluc3RhbGwucGFja2FnZXMoInJhbmRvbUZvcmVzdCIpICMgYW7DoWxpc2lzIGRlc2NyaXB0aXZvDQpsaWJyYXJ5KHJhbmRvbUZvcmVzdCkNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj4gQ3JlYXIgbGEgYmFzZSBkZSBkYXRvcyA8L3NwYW4+DQpgYGB7cn0NCmRmIDwtIGRhdGEuZnJhbWUoaXJpcykNCmRmDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+IEVudGVuZGVyIERhdG9zIDwvc3Bhbj4NCmBgYHtyfQ0Kc3VtbWFyeShkZikNCnN0cihkZikNCiNjcmVhdGVfcmVwb3J0KGRmKQ0KcGxvdF9taXNzaW5nKGRmKQ0KcGxvdF9oaXN0b2dyYW0oZGYpDQpwbG90X2NvcnJlbGF0aW9uKGRmKQ0KYGBgDQoNCioqTk9UQTogRW4gbW9kZWxvcyBkZSBjbGFzaWZpY2FjacOzbiwgbGEgdmFyaWFibGUgcXVlIHF1ZXJlbW9zIHByZWRlY2lyIGRlYmUgdGVuZXIgZWwgZm9ybWF0byBkZSBGQUNUT1IuKioNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+IFBhcnRpciBsYSBiYXNlIGRlIGRhdG9zIDwvc3Bhbj4NCg0KYGBge3J9DQojIE5vcm1hbG1lbnRlIDgwLTIwIG8gNzAtMzANCnNldC5zZWVkKDEyMykNCnJlbmdsb25lc19lbnRyZW5hbWllbnRvIDwtIGNyZWF0ZURhdGFQYXJ0aXRpb24oZGYkU3BlY2llcywgcD0wLjggLCBsaXN0PSBGQUxTRSkNCmVudHJlbmFtaWVudG8gPC0gZGZbcmVuZ2xvbmVzX2VudHJlbmFtaWVudG8sXQ0KcHJ1ZWJhIDwtIGRmWy1yZW5nbG9uZXNfZW50cmVuYW1pZW50byxdDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+IERpc3RpbnRvcyB0aXBvcyBkZSBNw6l0b2RvcyBwYXJhIE1vZGVsYXIgPC9zcGFuPg0KTG9zIG3DqXRvZG9zIG3DoXMgdXRpbGl6YWRvcyBwYXJhIG1vZGVsYXIgYXByZW5kaXphamUgYXV0b23DoXRpY28gc29uOg0KDQoqICoqU1ZNKio6ICpTdXBwb3J0IFZlY3RvciBNYWNoaW5lKiBvIE3DoXF1aW5hIGRlIFZlY3RvcmVzIGRlIFNvcG9ydGUuIEhheSB2YXJpb3Mgc3VidGlwb3M6IExpbmVhbChzdm1MaW5lYXIpLFJhZGlhbChzdm1SYWRpYWwpLFBvbGluw7NtaWNvKHN2bVBvbHkpLGV0Yy4NCiogKirDgXJib2wgZGUgRGVjaXNpw7NuKio6IHJwYXJ0DQoqICoqUmVkZXMgTmV1cm9uYWxlcyoqOiBubmV0DQoqICoqUmFuZG9tIEZvcmVzdCoqIG8gQm9zcXVlcyBBbGVhdG9yaW9zOiByZiAgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPiBNb2RlbG8gMS4gU1ZNIExpbmVhbCA8L3NwYW4+DQpgYGB7cn0NCm1vZGVsbzEgPC0gdHJhaW4oU3BlY2llc34uLGRhdGEgPSBlbnRyZW5hbWllbnRvLA0KICAgICAgICAgICAgICAgICBtZXRob2QgPSAic3ZtTGluZWFyIiwjIENhbWJpYXINCiAgICAgICAgICAgICAgICAgcHJlUHJvY2VzcyA9IGMoInNjYWxlIiwiY2VudGVyIiksDQogICAgICAgICAgICAgICAgIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2Q9ImN2IixudW1iZXIgPSAxMCksDQogICAgICAgICAgICAgICAgIHR1bmVHcmlkZSA9IGRhdGEuZnJhbWUoYz0xKSAjIENhbWJpYXINCiAgICAgICAgICAgICAgICAgKQ0KDQpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzEgPC0gcHJlZGljdChtb2RlbG8xLGVudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhMSA8LSBwcmVkaWN0KG1vZGVsbzEscHJ1ZWJhKQ0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuDQojIEVzIHVuYSB0YWJsYSBkZSBldmFsdWFjacOzbiBxdWUgZGVzZ2xvc2EgZWwgcmVuZGltaWVudG8gZGVsIG1vZGVsbyBkZSBjbGFzaWZpY2FjacOzbg0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuIGRlIFJlc3VsdGFkbyBkZSBFbnRyZW5hbWllbnRvDQptY3JlMSA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG8xLGVudHJlbmFtaWVudG8kU3BlY2llcykNCm1jcmUxDQoNCiMgTWF0cml6IGRlIENvbmZ1c2nDs24gZGVsIFJlc3VsdGFkbyBkZSBsYSBQcnVlYmENCm1jcnAxIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhMSxwcnVlYmEkU3BlY2llcykNCm1jcnAxDQpgYGANCg0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj4gTW9kZWxvIDIuIFNWTSBSYWRpYWwgPC9zcGFuPg0KYGBge3J9DQptb2RlbG8yIDwtIHRyYWluKFNwZWNpZXN+LixkYXRhID0gZW50cmVuYW1pZW50bywNCiAgICAgICAgICAgICAgICAgbWV0aG9kID0gInN2bVJhZGlhbCIsIyBDYW1iaWFyDQogICAgICAgICAgICAgICAgIHByZVByb2Nlc3MgPSBjKCJzY2FsZSIsImNlbnRlciIpLA0KICAgICAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kPSJjdiIsbnVtYmVyID0gMTApLA0KICAgICAgICAgICAgICAgICB0dW5lR3JpZGUgPSBkYXRhLmZyYW1lKHNpZ21hPTEsYz0xKSAjIENhbWJpYXINCiAgICAgICAgICAgICAgICAgKQ0KDQpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzIgPC0gcHJlZGljdChtb2RlbG8yLGVudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhMiA8LSBwcmVkaWN0KG1vZGVsbzIscHJ1ZWJhKQ0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuDQojIEVzIHVuYSB0YWJsYSBkZSBldmFsdWFjacOzbiBxdWUgZGVzZ2xvc2EgZWwgcmVuZGltaWVudG8gZGVsIG1vZGVsbyBkZSBjbGFzaWZpY2FjacOzbg0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuIGRlIFJlc3VsdGFkbyBkZSBFbnRyZW5hbWllbnRvDQptY3JlMiA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG8yLGVudHJlbmFtaWVudG8kU3BlY2llcykNCm1jcmUyDQoNCiMgTWF0cml6IGRlIENvbmZ1c2nDs24gZGVsIFJlc3VsdGFkbyBkZSBsYSBQcnVlYmENCm1jcnAyIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhMixwcnVlYmEkU3BlY2llcykNCm1jcnAyDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+IE1vZGVsbyAzLiBTVk0gUG9saW7Ds21pY28gPC9zcGFuPg0KYGBge3J9DQptb2RlbG8zIDwtIHRyYWluKFNwZWNpZXN+LixkYXRhID0gZW50cmVuYW1pZW50bywNCiAgICAgICAgICAgICAgICAgbWV0aG9kID0gInN2bVBvbHkiLCMgQ2FtYmlhcg0KICAgICAgICAgICAgICAgICBwcmVQcm9jZXNzID0gYygic2NhbGUiLCJjZW50ZXIiKSwNCiAgICAgICAgICAgICAgICAgdHJDb250cm9sID0gdHJhaW5Db250cm9sKG1ldGhvZD0iY3YiLG51bWJlciA9IDEwKSwNCiAgICAgICAgICAgICAgICAgdHVuZUdyaWRlID0gZGF0YS5mcmFtZShkZWdyZWU9MSxzaWdtYT0xLGM9MSkgIyBDYW1iaWFyDQogICAgICAgICAgICAgICAgICkNCg0KcmVzdWx0YWRvX2VudHJlbmFtaWVudG8zIDwtIHByZWRpY3QobW9kZWxvMyxlbnRyZW5hbWllbnRvKQ0KcmVzdWx0YWRvX3BydWViYTMgPC0gcHJlZGljdChtb2RlbG8zLHBydWViYSkNCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbg0KIyBFcyB1bmEgdGFibGEgZGUgZXZhbHVhY2nDs24gcXVlIGRlc2dsb3NhIGVsIHJlbmRpbWllbnRvIGRlbCBtb2RlbG8gZGUgY2xhc2lmaWNhY2nDs24NCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbiBkZSBSZXN1bHRhZG8gZGUgRW50cmVuYW1pZW50bw0KbWNyZTMgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvMyxlbnRyZW5hbWllbnRvJFNwZWNpZXMpDQptY3JlMw0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuIGRlbCBSZXN1bHRhZG8gZGUgbGEgUHJ1ZWJhDQptY3JwMyA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTMscHJ1ZWJhJFNwZWNpZXMpDQptY3JwMw0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPiBNb2RlbG8gNC4gw4FyYm9sIGRlIERlY2lzacOzbiA8L3NwYW4+DQpgYGB7cn0NCm1vZGVsbzQgPC0gdHJhaW4oU3BlY2llc34uLGRhdGEgPSBlbnRyZW5hbWllbnRvLA0KICAgICAgICAgICAgICAgICBtZXRob2QgPSAicnBhcnQiLCMgQ2FtYmlhcg0KICAgICAgICAgICAgICAgICBwcmVQcm9jZXNzID0gYygic2NhbGUiLCJjZW50ZXIiKSwNCiAgICAgICAgICAgICAgICAgdHJDb250cm9sID0gdHJhaW5Db250cm9sKG1ldGhvZD0iY3YiLG51bWJlciA9IDEwKSwNCiAgICAgICAgICAgICAgICAgdHVuZUxlbmd0aCA9IDEwICMgQ2FtYmlhcg0KICAgICAgICAgICAgICAgICApDQoNCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvNCA8LSBwcmVkaWN0KG1vZGVsbzQsZW50cmVuYW1pZW50bykNCnJlc3VsdGFkb19wcnVlYmE0IDwtIHByZWRpY3QobW9kZWxvNCxwcnVlYmEpDQoNCiMgTWF0cml6IGRlIENvbmZ1c2nDs24NCiMgRXMgdW5hIHRhYmxhIGRlIGV2YWx1YWNpw7NuIHF1ZSBkZXNnbG9zYSBlbCByZW5kaW1pZW50byBkZWwgbW9kZWxvIGRlIGNsYXNpZmljYWNpw7NuDQoNCiMgTWF0cml6IGRlIENvbmZ1c2nDs24gZGUgUmVzdWx0YWRvIGRlIEVudHJlbmFtaWVudG8NCm1jcmU0IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzQsZW50cmVuYW1pZW50byRTcGVjaWVzKQ0KbWNyZTQNCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbiBkZWwgUmVzdWx0YWRvIGRlIGxhIFBydWViYQ0KbWNycDQgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmE0LHBydWViYSRTcGVjaWVzKQ0KbWNycDQNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj4gTW9kZWxvIDUuIEJvc3F1ZXMgQWxlYXRvcmlvcyA8L3NwYW4+DQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbW9kZWxvNSA8LSB0cmFpbihTcGVjaWVzfi4sZGF0YSA9IGVudHJlbmFtaWVudG8sDQogICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJyZiIsIyBDYW1iaWFyDQogICAgICAgICAgICAgICAgIHByZVByb2Nlc3MgPSBjKCJzY2FsZSIsImNlbnRlciIpLA0KICAgICAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kPSJjdiIsbnVtYmVyID0gMTApLA0KICAgICAgICAgICAgICAgICB0dW5lR3JpZCA9IGV4cGFuZC5ncmlkKG10cnkgPSBjKDIsNCw2KSkgIyBDYW1iaWFyDQogICAgICAgICAgICAgICAgICkNCg0KcmVzdWx0YWRvX2VudHJlbmFtaWVudG81IDwtIHByZWRpY3QobW9kZWxvNSxlbnRyZW5hbWllbnRvKQ0KcmVzdWx0YWRvX3BydWViYTUgPC0gcHJlZGljdChtb2RlbG81LHBydWViYSkNCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbg0KIyBFcyB1bmEgdGFibGEgZGUgZXZhbHVhY2nDs24gcXVlIGRlc2dsb3NhIGVsIHJlbmRpbWllbnRvIGRlbCBtb2RlbG8gZGUgY2xhc2lmaWNhY2nDs24NCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbiBkZSBSZXN1bHRhZG8gZGUgRW50cmVuYW1pZW50bw0KbWNyZTUgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvNSxlbnRyZW5hbWllbnRvJFNwZWNpZXMpDQptY3JlNQ0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuIGRlbCBSZXN1bHRhZG8gZGUgbGEgUHJ1ZWJhDQptY3JwNSA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTUscHJ1ZWJhJFNwZWNpZXMpDQptY3JwNQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPiBNb2RlbG8gNi4gUmVkZXMgTmV1cm9uYWxlcyA8L3NwYW4+DQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbW9kZWxvNiA8LSB0cmFpbihTcGVjaWVzfi4sZGF0YSA9IGVudHJlbmFtaWVudG8sDQogICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJubmV0IiwjIENhbWJpYXINCiAgICAgICAgICAgICAgICAgcHJlUHJvY2VzcyA9IGMoInNjYWxlIiwiY2VudGVyIiksDQogICAgICAgICAgICAgICAgIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2QgPSAiY3YiLG51bWJlciA9IDEwKSAjIENhbWJpYXINCiAgICAgICAgICAgICAgICAgKQ0KDQpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzYgPC0gcHJlZGljdChtb2RlbG82LGVudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhNiA8LSBwcmVkaWN0KG1vZGVsbzYscHJ1ZWJhKQ0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuDQojIEVzIHVuYSB0YWJsYSBkZSBldmFsdWFjacOzbiBxdWUgZGVzZ2xvc2EgZWwgcmVuZGltaWVudG8gZGVsIG1vZGVsbyBkZSBjbGFzaWZpY2FjacOzbg0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuIGRlIFJlc3VsdGFkbyBkZSBFbnRyZW5hbWllbnRvDQptY3JlNiA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG82LGVudHJlbmFtaWVudG8kU3BlY2llcykNCm1jcmU2DQoNCiMgTWF0cml6IGRlIENvbmZ1c2nDs24gZGVsIFJlc3VsdGFkbyBkZSBsYSBQcnVlYmENCm1jcnA2IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhNixwcnVlYmEkU3BlY2llcykNCm1jcnA2DQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+IFRhYmxhIGRlIFJlc3VsdGFkb3MgPC9zcGFuPg0KDQpgYGB7cn0NCnJlc3VsdGFkb3MgPC0gZGF0YS5mcmFtZSgNCiAgInN2bUxpbmVhciIgPSBjKG1jcmUxJG92ZXJhbGwgWyJBY2N1cmFjeSJdLG1jcnAxJG92ZXJhbGxbIkFjY3VyYWN5Il0pLA0KICAic3ZtUmFkaWFsIiA9IGMobWNyZTIkb3ZlcmFsbCBbIkFjY3VyYWN5Il0sbWNycDIkb3ZlcmFsbFsiQWNjdXJhY3kiXSksDQogICJzdm1Qb2x5IiA9IGMobWNyZTMkb3ZlcmFsbCBbIkFjY3VyYWN5Il0sbWNycDMkb3ZlcmFsbFsiQWNjdXJhY3kiXSksDQogICJycGFydCIgPSBjKG1jcmU0JG92ZXJhbGwgWyJBY2N1cmFjeSJdLG1jcnA0JG92ZXJhbGxbIkFjY3VyYWN5Il0pLA0KICAicmYiID0gYyhtY3JlNSRvdmVyYWxsIFsiQWNjdXJhY3kiXSxtY3JwNSRvdmVyYWxsWyJBY2N1cmFjeSJdKSwNCiAgIm5uZXQiID0gYyhtY3JlNiRvdmVyYWxsIFsiQWNjdXJhY3kiXSxtY3JwNiRvdmVyYWxsWyJBY2N1cmFjeSJdKQ0KKQ0KDQpyb3duYW1lcyhyZXN1bHRhZG9zKSA8LSBjKCJFeGFjdGl0dWQgZGVsIEVudHJlbmFtaWVudG8iLCJFeGFjdGl0dWQgZGUgbGEgUHJ1ZWJhIikNCnJlc3VsdGFkb3MNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj4gQ29uY2x1c2nDs24gPC9zcGFuPg0KRW4gY29uY2x1c2nDs24sIGVsIG1vZGVsbyBkZSAqKlJlZGVzIE5ldXJvbmFsZXMqKiBlcyBlbCByZWNvbWVuZGFkbyBwYXJhIGxhIGNsYXNpZmljYWNpw7NuIGRlIGxvcyBsaXJpb3MuDQo=