Teoría

Es el paquete CARET (Classifocation 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") # graficas
library(ggplot2)

#install.packages("lattice") #crear gráficos
library(lattice)

#install.packages("datasets") # usas datasets cargados
library(datasets)

#install.packages("DataExplorer") #análisis descriptivo
library(DataExplorer) 

#install.packages("kernlab")
library(kernlab)

#install.packages("randomForest")
library(randomForest)

Crear base de datos

df <- data.frame(iris)

Entender base de 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) # estos se hacen conb dataexplorer

plot_histogram(df)

plot_correlation(df) 

NOTA: en modelos de clasificacion, la variable que queremos predecir debe tener 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, ] #cuando despues de la coma no hay nada, considera todos los valores 
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 (svnLinear), Radial (svmRadial), Polinómico (svmPoly), etc.
  • Árbol de decisión: 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 tabala de evaluación que desglosa el rendimeinto del modelo de clasificación

#Matriz de confusion del resultado de entrenaimento 
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 confusion 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 tabala de evaluación que desglosa el rendimeinto del modelo de clasificación

#Matriz de confusion del resultado de entrenaimento 
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 confusion 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,scale=1, c=1) #Cambiar
                 ) 

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

#Matriz de confusión 
# Es una tabala de evaluación que desglosa el rendimeinto del modelo de clasificación

#Matriz de confusion del resultado de entrenaimento 
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 confusion 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 tabala de evaluación que desglosa el rendimeinto del modelo de clasificación

#Matriz de confusion del resultado de entrenaimento 
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 confusion 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 tabala de evaluación que desglosa el rendimeinto del modelo de clasificación

#Matriz de confusion del resultado de entrenaimento 
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 confusion 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 neuronalea

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.196508
## iter  80 value 3.622329
## iter  90 value 2.982115
## iter 100 value 2.772743
## final  value 2.772743 
## 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.638433
## iter  50 value 4.106029
## iter  60 value 3.536273
## iter  70 value 3.123113
## iter  80 value 2.513878
## iter  90 value 2.076172
## iter 100 value 1.763112
## final  value 1.763112 
## 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.062780
## final  value 47.062780 
## 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.538615
## iter  80 value 61.624629
## iter  90 value 60.712599
## iter 100 value 60.325686
## final  value 60.325686 
## 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.081497
## iter  60 value 6.082046
## iter  70 value 4.640169
## iter  80 value 4.500379
## iter  90 value 4.068709
## iter 100 value 3.887655
## final  value 3.887655 
## 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.588603
## iter 100 value 2.503131
## final  value 2.503131 
## 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.898498
## iter  60 value 3.844201
## iter  70 value 3.750227
## 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.060787
## iter 100 value 1.689039
## final  value 1.689039 
## 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.517579
## iter  50 value 1.623430
## iter  60 value 1.420767
## iter  70 value 1.258050
## 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.092888
## iter  60 value 2.003781
## iter  70 value 1.923656
## iter  80 value 1.906651
## iter  90 value 1.614777
## iter 100 value 1.488645
## final  value 1.488645 
## 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.178651
## iter  80 value 24.456649
## iter  90 value 7.328446
## iter 100 value 3.904714
## final  value 3.904714 
## 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.439252
## iter  90 value 2.254822
## iter 100 value 2.154600
## final  value 2.154600 
## 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 tabala de evaluación que desglosa el rendimeinto del modelo de clasificación

#Matriz de confusion del resultado de entrenaimento 
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 confusion 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"])
)
resultados 
##   svmLinear svmRadial   svmPoly     rpart        rf      nnet
## 1 0.9916667 0.9916667 0.9666667 0.9666667 1.0000000 0.9833333
## 2 0.9666667 0.9333333 0.9333333 0.9333333 0.9333333 0.9666667

Conclusión

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

LS0tCnRpdGxlOiAiQ0FSRVQgLSBJcmlzIgphdXRob3I6ICJEYW5hcmEgRXNwYXJ6YSBBMDA4NDA2MDIiCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKICAgIHRoZW1lOiBjb3NtbwotLS0KCiFbXShodHRwczovL2VuY3J5cHRlZC10Ym4wLmdzdGF0aWMuY29tL2ltYWdlcz9xPXRibjpBTmQ5R2NUaFkxYTB1Tm9ESmo4TzJ0bHMwY21LSV81UGR2OHRnTlFfQ0pKVVBGdUh2VmZpSTF1a1gybXVpcE0mcz0xMCkgCgojIDxzcGFuIHN0eWxlPSAiY29sb3I6IGJsdWUiPiBUZW9yw61hIDwvc3Bhbj4gCkVzIGVsIHBhcXVldGUgKipDQVJFVCAoQ2xhc3NpZm9jYXRpb24gYW5kIFJlZ3Jlc3Npb24gVHJhaW5pbmcpICoqIGVzIHVuIHBhcXVldGUgaW50ZWdyYWwgY29uIHVuYSBhbXBsaWEgdmFyaWVkYWQgZGUgYWxnb3JpdG1vcyBwYXJhIGVsIGFwcmVuZGl6YWplIGF1dG9tw6F0aWNvLiAKCiMgPHNwYW4gc3R5bGU9ICJjb2xvcjogYmx1ZSI+IEluc3RhbGFyIHBhcXVldGVzIHkgbGxhbWFyIGxpYnJlcsOtYXMgPC9zcGFuPgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojaW5zdGFsbC5wYWNrYWdlcygiY2FyZXQiKSAjIGFsZ29yaXRtb3MgZGUgYXByZW5kaXphamUgYXV0b23DoXRpY28KbGlicmFyeShjYXJldCkKCiNpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikgIyBncmFmaWNhcwpsaWJyYXJ5KGdncGxvdDIpCgojaW5zdGFsbC5wYWNrYWdlcygibGF0dGljZSIpICNjcmVhciBncsOhZmljb3MKbGlicmFyeShsYXR0aWNlKQoKI2luc3RhbGwucGFja2FnZXMoImRhdGFzZXRzIikgIyB1c2FzIGRhdGFzZXRzIGNhcmdhZG9zCmxpYnJhcnkoZGF0YXNldHMpCgojaW5zdGFsbC5wYWNrYWdlcygiRGF0YUV4cGxvcmVyIikgI2Fuw6FsaXNpcyBkZXNjcmlwdGl2bwpsaWJyYXJ5KERhdGFFeHBsb3JlcikgCgojaW5zdGFsbC5wYWNrYWdlcygia2VybmxhYiIpCmxpYnJhcnkoa2VybmxhYikKCiNpbnN0YWxsLnBhY2thZ2VzKCJyYW5kb21Gb3Jlc3QiKQpsaWJyYXJ5KHJhbmRvbUZvcmVzdCkKYGBgCgoKIyA8c3BhbiBzdHlsZT0gImNvbG9yOiBibHVlIj4gQ3JlYXIgYmFzZSBkZSBkYXRvcyA8L3NwYW4+CmBgYHtyfQpkZiA8LSBkYXRhLmZyYW1lKGlyaXMpCmBgYAoKIyA8c3BhbiBzdHlsZT0gImNvbG9yOiBibHVlIj4gRW50ZW5kZXIgYmFzZSBkZSBkYXRvcyA8L3NwYW4+CmBgYHtyfQpzdW1tYXJ5KGRmKQpzdHIoZGYpCiNjcmVhdGVfcmVwb3J0KGRmKSAKcGxvdF9taXNzaW5nKGRmKSAjIGVzdG9zIHNlIGhhY2VuIGNvbmIgZGF0YWV4cGxvcmVyCnBsb3RfaGlzdG9ncmFtKGRmKQpwbG90X2NvcnJlbGF0aW9uKGRmKSAKYGBgCgoqKk5PVEE6IGVuIG1vZGVsb3MgZGUgY2xhc2lmaWNhY2lvbiwgbGEgdmFyaWFibGUgcXVlIHF1ZXJlbW9zIHByZWRlY2lyIGRlYmUgdGVuZXIgZm9ybWF0byBkZSBGQUNUT1IqKgoKCiMgPHNwYW4gc3R5bGU9ICJjb2xvcjogYmx1ZSI+IFBhcnRpciBsYSBiYXNlIGRlIGRhdG9zIDwvc3Bhbj4KYGBge3J9CiMgTm9ybWFsbWVudGUgODAtMjAgbyA3MC0zMApzZXQuc2VlZCgxMjMpCnJlbmdsb25lc19lbnRyZW5hbWllbnRvIDwtIGNyZWF0ZURhdGFQYXJ0aXRpb24oZGYkU3BlY2llcywgcD0wLjgsIGxpc3Q9IEZBTFNFKSAKZW50cmVuYW1pZW50byA8LSBkZltyZW5nbG9uZXNfZW50cmVuYW1pZW50bywgXSAjY3VhbmRvIGRlc3B1ZXMgZGUgbGEgY29tYSBubyBoYXkgbmFkYSwgY29uc2lkZXJhIHRvZG9zIGxvcyB2YWxvcmVzIApwcnVlYmEgPC0gZGZbLXJlbmdsb25lc19lbnRyZW5hbWllbnRvLCBdIAoKYGBgCgojIDxzcGFuIHN0eWxlPSAiY29sb3I6IGJsdWUiPiBEaXN0aW50b3MgdGlwb3MgZGUgbcOpdG9kb3MgcGFyYSBNb2RlbGFyIDwvc3Bhbj4KTG9zIG3DqXRvZG9zIG3DoXMgdXRpbGl6YWRvcyBwYXJhIG1vZGVsYXIgYXByZW5kaXphamUgYXV0b23DoXRpY28gc29uOiAKCiogKipTVk0qKjogKlN1cHBvcnQgVmVjdG9yIE1hY2hpbmUqIG8gTcOhcXVpbmEgZGUgVmVjdG9yZXMgZGUgU29wb3J0ZS4gSGF5IHZhcmlvcyBzdWJ0aXBvczogTGluZWFsIChzdm5MaW5lYXIpLCBSYWRpYWwgKHN2bVJhZGlhbCksIFBvbGluw7NtaWNvIChzdm1Qb2x5KSwgZXRjLiAKKiAqKsOBcmJvbCBkZSBkZWNpc2nDs24qKjogbm5ldAoqICoqUmFuZG9tIEZvcmVzdCoqIG8gYm9zcXVlcyBhbGVhdG9yaW9zOiByZgoKIyA8c3BhbiBzdHlsZT0gImNvbG9yOiBibHVlIj4gTW9kZWxvIDEuIFNWTSBMaW5lYWwgPC9zcGFuPgpgYGB7cn0KbW9kZWxvMSA8LSB0cmFpbihTcGVjaWVzfi4sZGF0YSA9IGVudHJlbmFtaWVudG8sCiAgICAgICAgICAgICAgICAgbWV0aG9kPSJzdm1MaW5lYXIiLCAjQ2FtYmlhciAKICAgICAgICAgICAgICAgICBwcmVQcm9jZXNzPSBjKCJzY2FsZSIsImNlbnRlciIpLAogICAgICAgICAgICAgICAgIHRyQ29udHJvbD0gdHJhaW5Db250cm9sKG1ldGhvZCA9ICJjdiIsIG51bWJlciA9IDEwKSwKICAgICAgICAgICAgICAgICB0dW5lR3JpZGU9IGRhdGEuZnJhbWUoYz0xKSAjQ2FtYmlhcgogICAgICAgICAgICAgICAgICkgCgpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzEgPC0gcHJlZGljdChtb2RlbG8xLCBlbnRyZW5hbWllbnRvKQpyZXN1bHRhZG9fcHJ1ZWJhMSA8LSBwcmVkaWN0KG1vZGVsbzEscHJ1ZWJhKSAKCiNNYXRyaXogZGUgY29uZnVzacOzbiAKIyBFcyB1bmEgdGFiYWxhIGRlIGV2YWx1YWNpw7NuIHF1ZSBkZXNnbG9zYSBlbCByZW5kaW1laW50byBkZWwgbW9kZWxvIGRlIGNsYXNpZmljYWNpw7NuCgojTWF0cml6IGRlIGNvbmZ1c2lvbiBkZWwgcmVzdWx0YWRvIGRlIGVudHJlbmFpbWVudG8gCm1jcmUxIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzEsIGVudHJlbmFtaWVudG8kU3BlY2llcykKbWNyZTEKCiNNYXRyaXogZGUgY29uZnVzaW9uIGRlbCByZXN1bHRhZG8gZGUgbGEgcHJ1ZWJhCm1jcnAxIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhMSwgcHJ1ZWJhJFNwZWNpZXMpCm1jcnAxCgpgYGAKCiMgPHNwYW4gc3R5bGU9ICJjb2xvcjogYmx1ZSI+IE1vZGVsbyAyLiBTVk0gUmFkaWFsIDwvc3Bhbj4KYGBge3J9Cm1vZGVsbzIgPC0gdHJhaW4oU3BlY2llc34uLGRhdGEgPSBlbnRyZW5hbWllbnRvLAogICAgICAgICAgICAgICAgIG1ldGhvZD0ic3ZtUmFkaWFsIiwgI0NhbWJpYXIgCiAgICAgICAgICAgICAgICAgcHJlUHJvY2Vzcz0gYygic2NhbGUiLCJjZW50ZXIiKSwKICAgICAgICAgICAgICAgICB0ckNvbnRyb2w9IHRyYWluQ29udHJvbChtZXRob2QgPSAiY3YiLCBudW1iZXIgPSAxMCksCiAgICAgICAgICAgICAgICAgdHVuZUdyaWRlPSBkYXRhLmZyYW1lKHNpZ21hPTEsIGM9MSkgI0NhbWJpYXIKICAgICAgICAgICAgICAgICApIAoKcmVzdWx0YWRvX2VudHJlbmFtaWVudG8yIDwtIHByZWRpY3QobW9kZWxvMiwgZW50cmVuYW1pZW50bykKcmVzdWx0YWRvX3BydWViYTIgPC0gcHJlZGljdChtb2RlbG8yLHBydWViYSkgCgojTWF0cml6IGRlIGNvbmZ1c2nDs24gCiMgRXMgdW5hIHRhYmFsYSBkZSBldmFsdWFjacOzbiBxdWUgZGVzZ2xvc2EgZWwgcmVuZGltZWludG8gZGVsIG1vZGVsbyBkZSBjbGFzaWZpY2FjacOzbgoKI01hdHJpeiBkZSBjb25mdXNpb24gZGVsIHJlc3VsdGFkbyBkZSBlbnRyZW5haW1lbnRvIAptY3JlMiA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG8yLCBlbnRyZW5hbWllbnRvJFNwZWNpZXMpCm1jcmUyCgojTWF0cml6IGRlIGNvbmZ1c2lvbiBkZWwgcmVzdWx0YWRvIGRlIGxhIHBydWViYQptY3JwMiA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTIsIHBydWViYSRTcGVjaWVzKQptY3JwMgoKYGBgCgojIDxzcGFuIHN0eWxlPSAiY29sb3I6IGJsdWUiPiBNb2RlbG8gMy4gU1ZNIFBvbGluw7NtaWNvIDwvc3Bhbj4KYGBge3J9Cm1vZGVsbzMgPC0gdHJhaW4oU3BlY2llc34uLGRhdGEgPSBlbnRyZW5hbWllbnRvLAogICAgICAgICAgICAgICAgIG1ldGhvZD0ic3ZtUG9seSIsICNDYW1iaWFyIAogICAgICAgICAgICAgICAgIHByZVByb2Nlc3M9IGMoInNjYWxlIiwiY2VudGVyIiksCiAgICAgICAgICAgICAgICAgdHJDb250cm9sPSB0cmFpbkNvbnRyb2wobWV0aG9kID0gImN2IiwgbnVtYmVyID0gMTApLAogICAgICAgICAgICAgICAgIHR1bmVHcmlkZT0gZGF0YS5mcmFtZShkZWdyZWU9MSxzY2FsZT0xLCBjPTEpICNDYW1iaWFyCiAgICAgICAgICAgICAgICAgKSAKCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvMyA8LSBwcmVkaWN0KG1vZGVsbzMsIGVudHJlbmFtaWVudG8pCnJlc3VsdGFkb19wcnVlYmEzIDwtIHByZWRpY3QobW9kZWxvMyxwcnVlYmEpIAoKI01hdHJpeiBkZSBjb25mdXNpw7NuIAojIEVzIHVuYSB0YWJhbGEgZGUgZXZhbHVhY2nDs24gcXVlIGRlc2dsb3NhIGVsIHJlbmRpbWVpbnRvIGRlbCBtb2RlbG8gZGUgY2xhc2lmaWNhY2nDs24KCiNNYXRyaXogZGUgY29uZnVzaW9uIGRlbCByZXN1bHRhZG8gZGUgZW50cmVuYWltZW50byAKbWNyZTMgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvMywgZW50cmVuYW1pZW50byRTcGVjaWVzKQptY3JlMwoKI01hdHJpeiBkZSBjb25mdXNpb24gZGVsIHJlc3VsdGFkbyBkZSBsYSBwcnVlYmEKbWNycDMgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmEzLCBwcnVlYmEkU3BlY2llcykKbWNycDMKCmBgYAoKIyA8c3BhbiBzdHlsZT0gImNvbG9yOiBibHVlIj4gTW9kZWxvIDQuIMOBcmJvbCBkZSBkZWNpc2nDs24gPC9zcGFuPgpgYGB7cn0KbW9kZWxvNCA8LSB0cmFpbihTcGVjaWVzfi4sZGF0YSA9IGVudHJlbmFtaWVudG8sCiAgICAgICAgICAgICAgICAgbWV0aG9kPSJycGFydCIsICNDYW1iaWFyIAogICAgICAgICAgICAgICAgIHByZVByb2Nlc3M9IGMoInNjYWxlIiwiY2VudGVyIiksCiAgICAgICAgICAgICAgICAgdHJDb250cm9sPSB0cmFpbkNvbnRyb2wobWV0aG9kID0gImN2IiwgbnVtYmVyID0gMTApLAogICAgICAgICAgICAgICAgIHR1bmVMZW5ndGggPTEwICNDYW1iaWFyCiAgICAgICAgICAgICAgICAgKSAKCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvNCA8LSBwcmVkaWN0KG1vZGVsbzQsIGVudHJlbmFtaWVudG8pCnJlc3VsdGFkb19wcnVlYmE0IDwtIHByZWRpY3QobW9kZWxvNCxwcnVlYmEpIAoKI01hdHJpeiBkZSBjb25mdXNpw7NuIAojIEVzIHVuYSB0YWJhbGEgZGUgZXZhbHVhY2nDs24gcXVlIGRlc2dsb3NhIGVsIHJlbmRpbWVpbnRvIGRlbCBtb2RlbG8gZGUgY2xhc2lmaWNhY2nDs24KCiNNYXRyaXogZGUgY29uZnVzaW9uIGRlbCByZXN1bHRhZG8gZGUgZW50cmVuYWltZW50byAKbWNyZTQgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvNCwgZW50cmVuYW1pZW50byRTcGVjaWVzKQptY3JlNAoKI01hdHJpeiBkZSBjb25mdXNpb24gZGVsIHJlc3VsdGFkbyBkZSBsYSBwcnVlYmEKbWNycDQgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmE0LCBwcnVlYmEkU3BlY2llcykKbWNycDQKCmBgYAoKIyA8c3BhbiBzdHlsZT0gImNvbG9yOiBibHVlIj4gTW9kZWxvIDUuIEJvc3F1ZXMgQWxlYXRvcmlvcyA8L3NwYW4+CmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9Cm1vZGVsbzUgPC0gdHJhaW4oU3BlY2llc34uLGRhdGEgPSBlbnRyZW5hbWllbnRvLAogICAgICAgICAgICAgICAgIG1ldGhvZD0icmYiLCAjQ2FtYmlhciAKICAgICAgICAgICAgICAgICBwcmVQcm9jZXNzPSBjKCJzY2FsZSIsImNlbnRlciIpLAogICAgICAgICAgICAgICAgIHRyQ29udHJvbD0gdHJhaW5Db250cm9sKG1ldGhvZCA9ICJjdiIsIG51bWJlciA9IDEwKSwKICAgICAgICAgICAgICAgICB0dW5lR3JpZD0gZXhwYW5kLmdyaWQobXRyeT1jKDIsNCw2KSkjQ2FtYmlhcgogICAgICAgICAgICAgICAgICkgCgpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzUgPC0gcHJlZGljdChtb2RlbG81LCBlbnRyZW5hbWllbnRvKQpyZXN1bHRhZG9fcHJ1ZWJhNSA8LSBwcmVkaWN0KG1vZGVsbzUscHJ1ZWJhKSAKCiNNYXRyaXogZGUgY29uZnVzacOzbiAKIyBFcyB1bmEgdGFiYWxhIGRlIGV2YWx1YWNpw7NuIHF1ZSBkZXNnbG9zYSBlbCByZW5kaW1laW50byBkZWwgbW9kZWxvIGRlIGNsYXNpZmljYWNpw7NuCgojTWF0cml6IGRlIGNvbmZ1c2lvbiBkZWwgcmVzdWx0YWRvIGRlIGVudHJlbmFpbWVudG8gCm1jcmU1IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzUsIGVudHJlbmFtaWVudG8kU3BlY2llcykKbWNyZTUKCiNNYXRyaXogZGUgY29uZnVzaW9uIGRlbCByZXN1bHRhZG8gZGUgbGEgcHJ1ZWJhCm1jcnA1IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhNSwgcHJ1ZWJhJFNwZWNpZXMpCm1jcnA1CgpgYGAKCiMgPHNwYW4gc3R5bGU9ICJjb2xvcjogYmx1ZSI+IE1vZGVsbyA2LiBSZWRlcyBuZXVyb25hbGVhIDwvc3Bhbj4KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KbW9kZWxvNiA8LSB0cmFpbihTcGVjaWVzfi4sZGF0YSA9IGVudHJlbmFtaWVudG8sCiAgICAgICAgICAgICAgICAgbWV0aG9kPSJubmV0IiwgI0NhbWJpYXIgCiAgICAgICAgICAgICAgICAgcHJlUHJvY2Vzcz0gYygic2NhbGUiLCJjZW50ZXIiKSwKICAgICAgICAgICAgICAgICB0ckNvbnRyb2w9IHRyYWluQ29udHJvbChtZXRob2QgPSAiY3YiLCBudW1iZXIgPSAxMCkKICAgICAgICAgICAgICAgICAjQ2FtYmlhcgogICAgICAgICAgICAgICAgICkgCgpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzYgPC0gcHJlZGljdChtb2RlbG82LCBlbnRyZW5hbWllbnRvKQpyZXN1bHRhZG9fcHJ1ZWJhNiA8LSBwcmVkaWN0KG1vZGVsbzYscHJ1ZWJhKSAKCiNNYXRyaXogZGUgY29uZnVzacOzbiAKIyBFcyB1bmEgdGFiYWxhIGRlIGV2YWx1YWNpw7NuIHF1ZSBkZXNnbG9zYSBlbCByZW5kaW1laW50byBkZWwgbW9kZWxvIGRlIGNsYXNpZmljYWNpw7NuCgojTWF0cml6IGRlIGNvbmZ1c2lvbiBkZWwgcmVzdWx0YWRvIGRlIGVudHJlbmFpbWVudG8gCm1jcmU2IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzYsIGVudHJlbmFtaWVudG8kU3BlY2llcykKbWNyZTYKCiNNYXRyaXogZGUgY29uZnVzaW9uIGRlbCByZXN1bHRhZG8gZGUgbGEgcHJ1ZWJhCm1jcnA2IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhNiwgcHJ1ZWJhJFNwZWNpZXMpCm1jcnA2CgpgYGAKCiMgPHNwYW4gc3R5bGU9ICJjb2xvcjogYmx1ZSI+IFRhYmxhIGRlIHJlc3VsdGFkb3MgPC9zcGFuPgpgYGB7cn0KcmVzdWx0YWRvcyA8LSBkYXRhLmZyYW1lKAogICJzdm1MaW5lYXIiID0gYyhtY3JlMSRvdmVyYWxsWyJBY2N1cmFjeSJdLCBtY3JwMSRvdmVyYWxsWyJBY2N1cmFjeSJdKSwKICAic3ZtUmFkaWFsIiA9IGMobWNyZTIkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDIkb3ZlcmFsbFsiQWNjdXJhY3kiXSksCiAgInN2bVBvbHkiID0gYyhtY3JlMyRvdmVyYWxsWyJBY2N1cmFjeSJdLCBtY3JwMyRvdmVyYWxsWyJBY2N1cmFjeSJdKSwKICAicnBhcnQiID0gYyhtY3JlNCRvdmVyYWxsWyJBY2N1cmFjeSJdLCBtY3JwNCRvdmVyYWxsWyJBY2N1cmFjeSJdKSwKICAicmYiID0gYyhtY3JlNSRvdmVyYWxsWyJBY2N1cmFjeSJdLCBtY3JwNSRvdmVyYWxsWyJBY2N1cmFjeSJdKSwKICAibm5ldCIgPSBjKG1jcmU2JG92ZXJhbGxbIkFjY3VyYWN5Il0sIG1jcnA2JG92ZXJhbGxbIkFjY3VyYWN5Il0pCikKcmVzdWx0YWRvcyAKYGBgCgojIDxzcGFuIHN0eWxlPSAiY29sb3I6IGJsdWUiPiBDb25jbHVzacOzbiA8L3NwYW4+CkVuIGNvbmNsdXNpw7NuLCBlbCBtb2RlbG8gZGUgKipSZWRlcyBuZXVyb25hbGVzKiogZXMgZWwgcmVjb21lbmRhZG8gcGFyYSBsYSBjbGFzaWZpY2FjacOzbiBkZSBsb3MgTGlyaW9zLiAKCgoKCg==