Teoria

El paquete CARET (Classification and Regression Training) es un paquete integral con una amplia variedad de algoritmos para el aprendizaje automático. Esta vez se usara para predecir información de enfermedades cardiacas

Instalar paquetes y llamar librerias

library(ggplot2)
#install.packages("lattice")
library(lattice)
library(caret)
library(datasets)
library(DataExplorer)
#install.packages("kernlab")
library(kernlab)
#install.packages("randomForest")
library(randomForest)

Crear base de datos

df <- read.csv("/Users/agustingomezperez/Desktop/Inteligencia Artificial/heart.csv")

Análisis Exploratorio

summary(df)
##       age             sex               cp            trestbps    
##  Min.   :29.00   Min.   :0.0000   Min.   :0.0000   Min.   : 94.0  
##  1st Qu.:48.00   1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:120.0  
##  Median :56.00   Median :1.0000   Median :1.0000   Median :130.0  
##  Mean   :54.43   Mean   :0.6956   Mean   :0.9424   Mean   :131.6  
##  3rd Qu.:61.00   3rd Qu.:1.0000   3rd Qu.:2.0000   3rd Qu.:140.0  
##  Max.   :77.00   Max.   :1.0000   Max.   :3.0000   Max.   :200.0  
##       chol          fbs            restecg          thalach     
##  Min.   :126   Min.   :0.0000   Min.   :0.0000   Min.   : 71.0  
##  1st Qu.:211   1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:132.0  
##  Median :240   Median :0.0000   Median :1.0000   Median :152.0  
##  Mean   :246   Mean   :0.1493   Mean   :0.5298   Mean   :149.1  
##  3rd Qu.:275   3rd Qu.:0.0000   3rd Qu.:1.0000   3rd Qu.:166.0  
##  Max.   :564   Max.   :1.0000   Max.   :2.0000   Max.   :202.0  
##      exang           oldpeak          slope             ca        
##  Min.   :0.0000   Min.   :0.000   Min.   :0.000   Min.   :0.0000  
##  1st Qu.:0.0000   1st Qu.:0.000   1st Qu.:1.000   1st Qu.:0.0000  
##  Median :0.0000   Median :0.800   Median :1.000   Median :0.0000  
##  Mean   :0.3366   Mean   :1.072   Mean   :1.385   Mean   :0.7541  
##  3rd Qu.:1.0000   3rd Qu.:1.800   3rd Qu.:2.000   3rd Qu.:1.0000  
##  Max.   :1.0000   Max.   :6.200   Max.   :2.000   Max.   :4.0000  
##       thal           target      
##  Min.   :0.000   Min.   :0.0000  
##  1st Qu.:2.000   1st Qu.:0.0000  
##  Median :2.000   Median :1.0000  
##  Mean   :2.324   Mean   :0.5132  
##  3rd Qu.:3.000   3rd Qu.:1.0000  
##  Max.   :3.000   Max.   :1.0000
str(df)
## 'data.frame':    1025 obs. of  14 variables:
##  $ age     : int  52 53 70 61 62 58 58 55 46 54 ...
##  $ sex     : int  1 1 1 1 0 0 1 1 1 1 ...
##  $ cp      : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ trestbps: int  125 140 145 148 138 100 114 160 120 122 ...
##  $ chol    : int  212 203 174 203 294 248 318 289 249 286 ...
##  $ fbs     : int  0 1 0 0 1 0 0 0 0 0 ...
##  $ restecg : int  1 0 1 1 1 0 2 0 0 0 ...
##  $ thalach : int  168 155 125 161 106 122 140 145 144 116 ...
##  $ exang   : int  0 1 1 0 0 0 0 1 0 1 ...
##  $ oldpeak : num  1 3.1 2.6 0 1.9 1 4.4 0.8 0.8 3.2 ...
##  $ slope   : int  2 0 0 2 1 1 0 1 2 1 ...
##  $ ca      : int  2 0 0 1 3 0 3 1 0 2 ...
##  $ thal    : int  3 3 3 3 2 2 1 3 3 2 ...
##  $ target  : int  0 0 0 0 0 1 0 0 0 0 ...
plot_missing(df)

Partir los datos 80-20

set.seed(123)
df$target<-as.factor(df$target)
renglones_entrenamiento<- createDataPartition(df$target, p=0.8, list=FALSE)
entrenamiento<- df[renglones_entrenamiento,]
prueba<- df[-renglones_entrenamiento,]

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: rf

1. Modelo con el Método svmLinear

modelo1 <- train(target ~., data=entrenamiento,
                 method = "svmLinear",
                 preProcess=c("scale","center"),
                 trControl= trainControl(method = "cv", number = 10),
                 tuneGrid=data.frame(C=1)
                 )
resultado_entrenamiento1 <- predict(modelo1, entrenamiento)
resultado_prueba1 <- predict(modelo1, prueba)
#Matriz de confusión: resultado del entrenamiento
mcre1 <- confusionMatrix(resultado_entrenamiento1, entrenamiento$target)
#Matriz de confusión: resultado de la prueba
mcrp1 <- confusionMatrix(resultado_prueba1, prueba$target)

2. Modelo con el Método svmRadial

modelo2 <- train(target ~., data=entrenamiento,
                 method = "svmRadial",
                 preProcess=c("scale","center"),
                 trControl= trainControl(method = "cv", number = 10),
                 tuneGrid=data.frame(sigma=1, C=1)
                 )
resultado_entrenamiento2 <- predict(modelo2, entrenamiento)
resultado_prueba2 <- predict(modelo2, prueba)
#Matriz de confusión: resultado del entrenamiento
mcre2 <- confusionMatrix(resultado_entrenamiento2, entrenamiento$target)
#Matriz de confusión: resultado de la prueba
mcrp2 <- confusionMatrix(resultado_prueba2, prueba$target)

3. Modelo con el Método svmPoly

modelo3 <- train(target ~., data=entrenamiento,
                 method = "svmPoly",
                 preProcess=c("scale","center"),
                 trControl= trainControl(method = "cv", number = 10),
                 tuneGrid=data.frame(degree=1, scale= 1, C=1)
                 )
resultado_entrenamiento3 <- predict(modelo3, entrenamiento)
resultado_prueba3 <- predict(modelo3, prueba)
#Matriz de confusión: resultado del entrenamiento
mcre3 <- confusionMatrix(resultado_entrenamiento3, entrenamiento$target)
#Matriz de confusión: resultado de la prueba
mcrp3 <- confusionMatrix(resultado_prueba3, prueba$target)

4. Modelo con el Método rpart

modelo4 <- train(target ~., data=entrenamiento,
                 method = "rpart",
                 preProcess=c("scale","center"),
                 trControl= trainControl(method = "cv", number = 10),
                 tuneLength = 10
                 )
resultado_entrenamiento4 <- predict(modelo4, entrenamiento)
resultado_prueba4 <- predict(modelo4, prueba)
#Matriz de confusión: resultado del entrenamiento
mcre4 <- confusionMatrix(resultado_entrenamiento4, entrenamiento$target)
#Matriz de confusión: resultado de la prueba
mcrp4 <- confusionMatrix(resultado_prueba4, prueba$target)

5. Modelo con el Método nnet

modelo5 <- train(target ~., data=entrenamiento,
                 method = "nnet",
                 preProcess=c("scale","center"),
                 trControl= trainControl(method = "cv", number = 10)
                 )
## # weights:  16
## initial  value 535.297017 
## iter  10 value 278.617685
## iter  20 value 270.443942
## iter  30 value 259.784344
## iter  40 value 253.963056
## iter  50 value 253.879023
## iter  60 value 253.860873
## final  value 253.858136 
## converged
## # weights:  46
## initial  value 511.068394 
## iter  10 value 244.697464
## iter  20 value 208.077202
## iter  30 value 184.486692
## iter  40 value 165.983978
## iter  50 value 155.294249
## iter  60 value 154.980028
## iter  60 value 154.980028
## iter  60 value 154.980028
## final  value 154.980028 
## converged
## # weights:  76
## initial  value 570.645313 
## iter  10 value 251.525869
## iter  20 value 179.802171
## iter  30 value 141.909339
## iter  40 value 123.166209
## iter  50 value 117.555438
## iter  60 value 111.065068
## iter  70 value 109.168064
## iter  80 value 108.280970
## iter  90 value 107.936941
## iter 100 value 107.634368
## final  value 107.634368 
## stopped after 100 iterations
## # weights:  16
## initial  value 545.919886 
## iter  10 value 302.148191
## iter  20 value 285.222964
## iter  30 value 282.138229
## iter  40 value 276.703763
## iter  50 value 272.590594
## iter  60 value 271.702143
## final  value 271.700379 
## converged
## # weights:  46
## initial  value 523.838008 
## iter  10 value 257.945042
## iter  20 value 243.363804
## iter  30 value 234.852174
## iter  40 value 210.716157
## iter  50 value 202.759614
## iter  60 value 200.469443
## iter  70 value 200.013381
## iter  80 value 199.558444
## iter  90 value 199.054811
## iter 100 value 198.725773
## final  value 198.725773 
## stopped after 100 iterations
## # weights:  76
## initial  value 499.330190 
## iter  10 value 243.185520
## iter  20 value 191.343213
## iter  30 value 160.121932
## iter  40 value 145.251552
## iter  50 value 138.106593
## iter  60 value 136.473415
## iter  70 value 135.610416
## iter  80 value 135.377331
## iter  90 value 135.210048
## iter 100 value 134.851446
## final  value 134.851446 
## stopped after 100 iterations
## # weights:  16
## initial  value 535.882478 
## iter  10 value 331.125041
## iter  20 value 289.566889
## iter  30 value 280.897794
## iter  40 value 274.544100
## iter  50 value 274.249920
## iter  60 value 274.226464
## final  value 274.223707 
## converged
## # weights:  46
## initial  value 578.721040 
## iter  10 value 277.697309
## iter  20 value 233.196122
## iter  30 value 200.578983
## iter  40 value 177.761306
## iter  50 value 162.612449
## iter  60 value 158.753881
## iter  70 value 155.177732
## iter  80 value 153.728874
## iter  90 value 153.510469
## iter 100 value 153.431901
## final  value 153.431901 
## stopped after 100 iterations
## # weights:  76
## initial  value 543.585645 
## iter  10 value 217.473391
## iter  20 value 134.403582
## iter  30 value 102.198891
## iter  40 value 77.242495
## iter  50 value 68.123567
## iter  60 value 66.354254
## iter  70 value 65.415009
## iter  80 value 64.418156
## iter  90 value 63.708151
## iter 100 value 63.309837
## final  value 63.309837 
## stopped after 100 iterations
## # weights:  16
## initial  value 516.801720 
## iter  10 value 347.044214
## iter  20 value 270.680164
## iter  30 value 258.359799
## iter  40 value 258.067335
## iter  50 value 254.788053
## iter  60 value 240.252700
## final  value 240.164529 
## converged
## # weights:  46
## initial  value 600.518144 
## iter  10 value 231.689366
## iter  20 value 182.813987
## iter  30 value 143.496960
## iter  40 value 131.333391
## iter  50 value 121.278988
## iter  60 value 117.392105
## iter  70 value 112.191690
## iter  80 value 105.845856
## iter  90 value 105.039159
## iter 100 value 104.968303
## final  value 104.968303 
## stopped after 100 iterations
## # weights:  76
## initial  value 558.894928 
## iter  10 value 239.386001
## iter  20 value 167.796671
## iter  30 value 113.479146
## iter  40 value 100.585111
## iter  50 value 95.862835
## iter  60 value 93.899369
## iter  70 value 91.945590
## iter  80 value 91.326173
## iter  90 value 88.668751
## iter 100 value 88.007157
## final  value 88.007157 
## stopped after 100 iterations
## # weights:  16
## initial  value 534.765717 
## iter  10 value 267.695723
## iter  20 value 263.349862
## final  value 263.213664 
## converged
## # weights:  46
## initial  value 589.771492 
## iter  10 value 255.440528
## iter  20 value 225.268918
## iter  30 value 209.850679
## iter  40 value 206.943100
## iter  50 value 199.595804
## iter  60 value 194.832498
## iter  70 value 194.171536
## iter  80 value 192.316646
## iter  90 value 190.878844
## iter 100 value 190.689874
## final  value 190.689874 
## stopped after 100 iterations
## # weights:  76
## initial  value 730.737672 
## iter  10 value 240.725393
## iter  20 value 207.401760
## iter  30 value 180.527154
## iter  40 value 155.702917
## iter  50 value 139.109378
## iter  60 value 131.574992
## iter  70 value 127.209405
## iter  80 value 125.089779
## iter  90 value 123.812350
## iter 100 value 121.053397
## final  value 121.053397 
## stopped after 100 iterations
## # weights:  16
## initial  value 548.171765 
## iter  10 value 334.202017
## iter  20 value 260.705406
## iter  30 value 259.256607
## iter  40 value 259.000821
## iter  50 value 258.900847
## iter  60 value 258.536916
## iter  70 value 258.483766
## iter  80 value 258.481672
## iter  90 value 258.478518
## iter 100 value 258.463570
## final  value 258.463570 
## stopped after 100 iterations
## # weights:  46
## initial  value 545.766622 
## iter  10 value 273.496401
## iter  20 value 207.089572
## iter  30 value 169.631909
## iter  40 value 150.587441
## iter  50 value 145.000121
## iter  60 value 119.983977
## iter  70 value 107.662621
## iter  80 value 105.340966
## iter  90 value 101.917607
## iter 100 value 99.915938
## final  value 99.915938 
## stopped after 100 iterations
## # weights:  76
## initial  value 479.343335 
## iter  10 value 199.650836
## iter  20 value 118.861592
## iter  30 value 95.296153
## iter  40 value 81.785373
## iter  50 value 69.897162
## iter  60 value 63.135100
## iter  70 value 60.006237
## iter  80 value 59.157854
## iter  90 value 58.907978
## iter 100 value 58.741889
## final  value 58.741889 
## stopped after 100 iterations
## # weights:  16
## initial  value 517.856276 
## iter  10 value 279.575277
## iter  20 value 256.117972
## iter  30 value 255.346855
## iter  40 value 255.063786
## iter  50 value 255.037894
## iter  60 value 254.853043
## iter  70 value 254.819481
## iter  80 value 254.815984
## iter  90 value 254.812725
## iter 100 value 254.806818
## final  value 254.806818 
## stopped after 100 iterations
## # weights:  46
## initial  value 525.587585 
## iter  10 value 308.666077
## iter  20 value 252.804801
## iter  30 value 244.241159
## iter  40 value 228.439069
## iter  50 value 215.940953
## iter  60 value 201.615232
## iter  70 value 196.440518
## iter  80 value 195.162147
## iter  90 value 194.744842
## iter 100 value 194.232895
## final  value 194.232895 
## stopped after 100 iterations
## # weights:  76
## initial  value 499.230825 
## iter  10 value 224.605606
## iter  20 value 166.529235
## iter  30 value 145.825673
## iter  40 value 127.681850
## iter  50 value 119.046907
## iter  60 value 116.599417
## iter  70 value 116.229167
## final  value 116.229016 
## converged
## # weights:  16
## initial  value 519.913629 
## iter  10 value 308.812051
## iter  20 value 264.549379
## iter  30 value 261.985273
## iter  40 value 261.970416
## final  value 261.970259 
## converged
## # weights:  46
## initial  value 511.511309 
## iter  10 value 310.224185
## iter  20 value 254.481780
## iter  30 value 225.896731
## iter  40 value 210.696997
## iter  50 value 206.483809
## iter  60 value 203.701096
## iter  70 value 198.046573
## iter  80 value 193.990646
## iter  90 value 192.395986
## iter 100 value 192.211057
## final  value 192.211057 
## stopped after 100 iterations
## # weights:  76
## initial  value 497.763134 
## iter  10 value 235.078482
## iter  20 value 175.898469
## iter  30 value 158.522791
## iter  40 value 151.459742
## iter  50 value 144.730688
## iter  60 value 142.182035
## iter  70 value 140.742696
## iter  80 value 140.133425
## iter  90 value 140.088638
## iter 100 value 140.085715
## final  value 140.085715 
## stopped after 100 iterations
## # weights:  16
## initial  value 546.648130 
## iter  10 value 260.856400
## iter  20 value 250.342334
## iter  30 value 235.386600
## iter  40 value 231.851808
## iter  50 value 230.781024
## iter  60 value 230.768416
## iter  70 value 230.735712
## iter  80 value 230.716693
## iter  90 value 230.711865
## iter 100 value 230.702128
## final  value 230.702128 
## stopped after 100 iterations
## # weights:  46
## initial  value 513.236222 
## iter  10 value 243.982202
## iter  20 value 167.014710
## iter  30 value 142.473911
## iter  40 value 122.506161
## iter  50 value 106.794635
## iter  60 value 104.899048
## iter  70 value 104.028478
## iter  80 value 103.650360
## iter  90 value 103.315760
## iter 100 value 102.932818
## final  value 102.932818 
## stopped after 100 iterations
## # weights:  76
## initial  value 521.599786 
## iter  10 value 201.719164
## iter  20 value 132.488585
## iter  30 value 86.421311
## iter  40 value 70.125387
## iter  50 value 58.356212
## iter  60 value 56.811551
## iter  70 value 56.517651
## iter  80 value 55.938533
## iter  90 value 55.617775
## iter 100 value 55.539757
## final  value 55.539757 
## stopped after 100 iterations
## # weights:  16
## initial  value 495.963714 
## iter  10 value 304.061990
## iter  20 value 277.949323
## iter  30 value 274.106604
## iter  40 value 265.580134
## iter  50 value 265.401805
## iter  60 value 265.347358
## iter  70 value 265.175004
## iter  80 value 265.041097
## iter  90 value 265.001447
## iter 100 value 264.984565
## final  value 264.984565 
## stopped after 100 iterations
## # weights:  46
## initial  value 586.489771 
## iter  10 value 258.110706
## iter  20 value 205.536274
## iter  30 value 180.472791
## iter  40 value 160.262089
## iter  50 value 155.914638
## iter  60 value 152.993171
## iter  70 value 144.885641
## iter  80 value 143.528105
## iter  90 value 143.512042
## final  value 143.511552 
## converged
## # weights:  76
## initial  value 557.335690 
## iter  10 value 223.156518
## iter  20 value 170.116484
## iter  30 value 115.613264
## iter  40 value 78.694420
## iter  50 value 75.671353
## iter  60 value 74.026918
## iter  70 value 72.393732
## iter  80 value 71.165545
## iter  90 value 70.568936
## iter 100 value 69.966933
## final  value 69.966933 
## stopped after 100 iterations
## # weights:  16
## initial  value 545.623127 
## iter  10 value 278.191336
## iter  20 value 267.941506
## iter  30 value 266.939123
## final  value 266.938651 
## converged
## # weights:  46
## initial  value 506.383910 
## iter  10 value 242.582459
## iter  20 value 231.357994
## iter  30 value 223.341632
## iter  40 value 221.801655
## iter  50 value 219.904286
## iter  60 value 219.258433
## iter  70 value 219.151189
## final  value 219.150622 
## converged
## # weights:  76
## initial  value 574.224515 
## iter  10 value 236.047960
## iter  20 value 197.225925
## iter  30 value 176.335265
## iter  40 value 164.154461
## iter  50 value 153.859015
## iter  60 value 146.015430
## iter  70 value 138.227105
## iter  80 value 132.706067
## iter  90 value 131.358658
## iter 100 value 130.911490
## final  value 130.911490 
## stopped after 100 iterations
## # weights:  16
## initial  value 531.118010 
## iter  10 value 297.703542
## iter  20 value 265.674960
## iter  30 value 260.312818
## iter  40 value 249.157314
## iter  50 value 248.745013
## iter  60 value 247.216212
## iter  70 value 247.113551
## iter  80 value 247.110623
## iter  90 value 247.109836
## iter  90 value 247.109835
## iter  90 value 247.109835
## final  value 247.109835 
## converged
## # weights:  46
## initial  value 540.677376 
## iter  10 value 227.830439
## iter  20 value 175.018447
## iter  30 value 153.631042
## iter  40 value 133.678274
## iter  50 value 127.247538
## iter  60 value 126.840457
## iter  70 value 126.449508
## iter  80 value 126.368132
## iter  90 value 126.290775
## iter 100 value 126.220568
## final  value 126.220568 
## stopped after 100 iterations
## # weights:  76
## initial  value 498.577976 
## iter  10 value 205.153502
## iter  20 value 118.929025
## iter  30 value 97.465208
## iter  40 value 83.968658
## iter  50 value 82.536636
## iter  60 value 82.119919
## iter  70 value 81.212460
## iter  80 value 80.295698
## iter  90 value 78.926511
## iter 100 value 78.554378
## final  value 78.554378 
## stopped after 100 iterations
## # weights:  16
## initial  value 521.334444 
## iter  10 value 314.329205
## iter  20 value 259.841805
## iter  30 value 248.866964
## iter  40 value 238.942240
## iter  50 value 238.790747
## iter  60 value 238.715792
## iter  70 value 238.702237
## iter  80 value 238.695726
## iter  90 value 238.688258
## iter 100 value 238.680972
## final  value 238.680972 
## stopped after 100 iterations
## # weights:  46
## initial  value 532.892595 
## iter  10 value 252.192898
## iter  20 value 216.601603
## iter  30 value 184.905406
## iter  40 value 166.641942
## iter  50 value 158.802370
## iter  60 value 156.136547
## iter  70 value 152.330957
## iter  80 value 146.081750
## iter  90 value 138.691211
## iter 100 value 132.347206
## final  value 132.347206 
## stopped after 100 iterations
## # weights:  76
## initial  value 574.726235 
## iter  10 value 254.939449
## iter  20 value 149.240633
## iter  30 value 107.037048
## iter  40 value 95.777524
## iter  50 value 90.450781
## iter  60 value 84.479288
## iter  70 value 82.263255
## iter  80 value 82.213182
## final  value 82.212972 
## converged
## # weights:  16
## initial  value 522.286914 
## iter  10 value 323.054969
## iter  20 value 267.089293
## iter  30 value 263.365929
## iter  40 value 262.896373
## iter  50 value 262.886036
## final  value 262.885221 
## converged
## # weights:  46
## initial  value 483.621802 
## iter  10 value 244.895477
## iter  20 value 216.086622
## iter  30 value 190.130496
## iter  40 value 177.150308
## iter  50 value 168.309464
## iter  60 value 167.290648
## iter  70 value 167.100702
## iter  80 value 167.098257
## final  value 167.098253 
## converged
## # weights:  76
## initial  value 608.642851 
## iter  10 value 226.029071
## iter  20 value 185.266013
## iter  30 value 167.181936
## iter  40 value 156.654901
## iter  50 value 138.510733
## iter  60 value 133.964309
## iter  70 value 128.510305
## iter  80 value 127.240682
## iter  90 value 127.136294
## iter 100 value 127.116672
## final  value 127.116672 
## stopped after 100 iterations
## # weights:  16
## initial  value 553.567559 
## iter  10 value 378.655700
## iter  20 value 264.646922
## iter  30 value 255.274706
## iter  40 value 254.499152
## iter  50 value 253.624597
## iter  60 value 253.189454
## iter  70 value 253.164916
## iter  80 value 253.163414
## final  value 253.163401 
## converged
## # weights:  46
## initial  value 514.043006 
## iter  10 value 238.452421
## iter  20 value 183.104531
## iter  30 value 154.268507
## iter  40 value 135.425679
## iter  50 value 127.746792
## iter  60 value 127.465304
## iter  70 value 127.316005
## iter  80 value 127.226988
## iter  90 value 127.144892
## iter 100 value 126.446408
## final  value 126.446408 
## stopped after 100 iterations
## # weights:  76
## initial  value 573.759769 
## iter  10 value 224.403385
## iter  20 value 145.081933
## iter  30 value 83.740149
## iter  40 value 75.584617
## iter  50 value 72.694024
## iter  60 value 71.125925
## iter  70 value 60.087838
## iter  80 value 54.300146
## iter  90 value 53.200026
## iter 100 value 52.302967
## final  value 52.302967 
## stopped after 100 iterations
## # weights:  16
## initial  value 525.699823 
## iter  10 value 301.416418
## iter  20 value 259.175447
## iter  30 value 255.324998
## iter  40 value 241.678316
## iter  50 value 240.887242
## iter  60 value 239.876717
## iter  70 value 238.395933
## iter  80 value 238.312939
## iter  90 value 238.250619
## iter 100 value 238.238112
## final  value 238.238112 
## stopped after 100 iterations
## # weights:  46
## initial  value 524.448369 
## iter  10 value 254.882932
## iter  20 value 193.293946
## iter  30 value 170.630171
## iter  40 value 156.943166
## iter  50 value 155.521405
## iter  60 value 155.475016
## iter  70 value 155.473330
## iter  70 value 155.473329
## iter  70 value 155.473329
## final  value 155.473329 
## converged
## # weights:  76
## initial  value 494.503352 
## iter  10 value 216.722692
## iter  20 value 144.087309
## iter  30 value 118.693125
## iter  40 value 107.183668
## iter  50 value 102.865083
## iter  60 value 101.686729
## iter  70 value 100.374856
## iter  80 value 100.242725
## iter  90 value 100.209397
## iter 100 value 100.118022
## final  value 100.118022 
## stopped after 100 iterations
## # weights:  16
## initial  value 526.193498 
## iter  10 value 335.553457
## iter  20 value 265.678500
## iter  30 value 260.794319
## iter  40 value 260.186419
## iter  50 value 260.054637
## final  value 260.043781 
## converged
## # weights:  46
## initial  value 584.027537 
## iter  10 value 235.458140
## iter  20 value 209.791206
## iter  30 value 187.880755
## iter  40 value 176.484231
## iter  50 value 173.053269
## iter  60 value 171.422241
## iter  70 value 170.738931
## iter  80 value 170.699974
## final  value 170.699859 
## converged
## # weights:  76
## initial  value 543.432592 
## iter  10 value 255.391304
## iter  20 value 197.990740
## iter  30 value 171.878173
## iter  40 value 159.532216
## iter  50 value 147.787260
## iter  60 value 141.218571
## iter  70 value 137.934477
## iter  80 value 136.376631
## iter  90 value 130.838716
## iter 100 value 127.516659
## final  value 127.516659 
## stopped after 100 iterations
## # weights:  16
## initial  value 521.525181 
## iter  10 value 279.550614
## iter  20 value 251.866146
## iter  30 value 248.113668
## iter  40 value 240.846962
## iter  50 value 239.274500
## iter  60 value 238.969561
## iter  70 value 238.942787
## iter  80 value 238.902174
## iter  90 value 238.901549
## iter 100 value 238.898606
## final  value 238.898606 
## stopped after 100 iterations
## # weights:  46
## initial  value 536.412669 
## iter  10 value 249.655420
## iter  20 value 199.235766
## iter  30 value 183.951768
## iter  40 value 172.048784
## iter  50 value 162.421138
## iter  60 value 161.282001
## iter  70 value 160.864155
## iter  80 value 160.632464
## iter  90 value 160.398330
## iter 100 value 160.270370
## final  value 160.270370 
## stopped after 100 iterations
## # weights:  76
## initial  value 468.535154 
## iter  10 value 228.304196
## iter  20 value 160.673124
## iter  30 value 115.388050
## iter  40 value 90.954701
## iter  50 value 87.386781
## iter  60 value 85.844564
## iter  70 value 85.197787
## iter  80 value 84.218681
## iter  90 value 83.265766
## iter 100 value 83.034959
## final  value 83.034959 
## stopped after 100 iterations
## # weights:  16
## initial  value 525.404298 
## iter  10 value 294.293039
## iter  20 value 273.701136
## iter  30 value 265.589385
## iter  40 value 259.182212
## iter  50 value 256.363405
## iter  60 value 244.223032
## iter  70 value 242.251621
## iter  80 value 242.243206
## iter  90 value 242.239733
## iter 100 value 242.234374
## final  value 242.234374 
## stopped after 100 iterations
## # weights:  46
## initial  value 543.218373 
## iter  10 value 276.415173
## iter  20 value 222.011207
## iter  30 value 205.124108
## iter  40 value 189.555483
## iter  50 value 182.488347
## iter  60 value 182.315776
## final  value 182.315725 
## converged
## # weights:  76
## initial  value 526.175887 
## iter  10 value 248.413851
## iter  20 value 182.189285
## iter  30 value 152.398564
## iter  40 value 139.131033
## iter  50 value 133.600740
## iter  60 value 127.386273
## iter  70 value 124.717956
## iter  80 value 124.643534
## final  value 124.642590 
## converged
## # weights:  16
## initial  value 527.279184 
## iter  10 value 318.654645
## iter  20 value 285.258128
## iter  30 value 279.834470
## final  value 279.827767 
## converged
## # weights:  46
## initial  value 529.496940 
## iter  10 value 350.607846
## iter  20 value 307.904121
## iter  30 value 273.613370
## iter  40 value 259.185046
## iter  50 value 232.510920
## iter  60 value 212.968287
## iter  70 value 209.809590
## iter  80 value 209.054486
## iter  90 value 208.595465
## iter 100 value 208.560753
## final  value 208.560753 
## stopped after 100 iterations
## # weights:  76
## initial  value 517.505092 
## iter  10 value 298.851753
## iter  20 value 239.060397
## iter  30 value 212.267659
## iter  40 value 196.718024
## iter  50 value 186.143216
## iter  60 value 182.068367
## iter  70 value 180.705582
## iter  80 value 176.946877
## iter  90 value 169.089179
## iter 100 value 167.407992
## final  value 167.407992 
## stopped after 100 iterations
## # weights:  16
## initial  value 521.062434 
## iter  10 value 290.225469
## iter  20 value 270.600962
## iter  30 value 264.324692
## iter  40 value 258.686953
## iter  50 value 257.260520
## iter  60 value 257.119658
## iter  70 value 256.616409
## iter  80 value 256.612844
## iter  90 value 256.612322
## final  value 256.610255 
## converged
## # weights:  46
## initial  value 527.478949 
## iter  10 value 242.518250
## iter  20 value 200.228448
## iter  30 value 158.574341
## iter  40 value 147.478674
## iter  50 value 142.074998
## iter  60 value 141.663553
## iter  70 value 141.374987
## iter  80 value 140.502965
## iter  90 value 140.000417
## iter 100 value 139.801878
## final  value 139.801878 
## stopped after 100 iterations
## # weights:  76
## initial  value 525.114691 
## iter  10 value 213.247894
## iter  20 value 150.157487
## iter  30 value 100.599547
## iter  40 value 86.931552
## iter  50 value 83.789155
## iter  60 value 78.973067
## iter  70 value 77.775956
## iter  80 value 76.560889
## iter  90 value 76.211082
## iter 100 value 75.935518
## final  value 75.935518 
## stopped after 100 iterations
## # weights:  16
## initial  value 543.023592 
## iter  10 value 393.414415
## iter  20 value 275.881949
## iter  30 value 264.089709
## iter  40 value 262.953030
## iter  50 value 262.254092
## iter  60 value 260.931619
## iter  70 value 260.778498
## iter  80 value 260.737136
## iter  90 value 260.616218
## iter 100 value 260.553940
## final  value 260.553940 
## stopped after 100 iterations
## # weights:  46
## initial  value 544.124581 
## iter  10 value 266.049761
## iter  20 value 225.313589
## iter  30 value 202.585094
## iter  40 value 189.233747
## iter  50 value 184.482987
## iter  60 value 180.858128
## iter  70 value 172.690680
## iter  80 value 165.928132
## iter  90 value 165.761538
## final  value 165.761468 
## converged
## # weights:  76
## initial  value 526.631720 
## iter  10 value 232.869313
## iter  20 value 179.109467
## iter  30 value 141.719941
## iter  40 value 93.248402
## iter  50 value 86.911240
## iter  60 value 81.731276
## iter  70 value 77.849851
## iter  80 value 77.350858
## iter  90 value 77.337273
## iter 100 value 77.333079
## final  value 77.333079 
## stopped after 100 iterations
## # weights:  16
## initial  value 523.008632 
## iter  10 value 299.109568
## iter  20 value 274.988109
## iter  30 value 270.773879
## iter  40 value 270.510001
## iter  50 value 270.505034
## final  value 270.505029 
## converged
## # weights:  46
## initial  value 521.096309 
## iter  10 value 278.644802
## iter  20 value 241.263346
## iter  30 value 210.864415
## iter  40 value 185.448925
## iter  50 value 176.742498
## iter  60 value 173.464797
## iter  70 value 171.981534
## iter  80 value 171.256006
## iter  90 value 169.802724
## iter 100 value 168.519829
## final  value 168.519829 
## stopped after 100 iterations
## # weights:  76
## initial  value 509.406519 
## iter  10 value 234.323738
## iter  20 value 177.993005
## iter  30 value 160.586487
## iter  40 value 151.898104
## iter  50 value 140.019543
## iter  60 value 135.638131
## iter  70 value 131.643960
## iter  80 value 130.088248
## iter  90 value 127.963298
## iter 100 value 126.551979
## final  value 126.551979 
## stopped after 100 iterations
## # weights:  16
## initial  value 519.642450 
## iter  10 value 267.092452
## iter  20 value 265.328766
## iter  30 value 263.709142
## iter  40 value 262.966237
## iter  50 value 261.188760
## iter  60 value 260.865008
## iter  70 value 260.762708
## iter  80 value 260.738907
## iter  90 value 260.654776
## iter 100 value 260.648104
## final  value 260.648104 
## stopped after 100 iterations
## # weights:  46
## initial  value 535.230597 
## iter  10 value 241.717850
## iter  20 value 206.438320
## iter  30 value 175.222508
## iter  40 value 162.818427
## iter  50 value 155.603575
## iter  60 value 150.482175
## iter  70 value 146.941216
## iter  80 value 142.219196
## iter  90 value 141.803148
## iter 100 value 141.724765
## final  value 141.724765 
## stopped after 100 iterations
## # weights:  76
## initial  value 493.243511 
## iter  10 value 221.712675
## iter  20 value 149.732595
## iter  30 value 109.685031
## iter  40 value 100.481537
## iter  50 value 94.821615
## iter  60 value 90.418492
## iter  70 value 89.618876
## iter  80 value 89.441347
## iter  90 value 89.378157
## iter 100 value 89.194764
## final  value 89.194764 
## stopped after 100 iterations
## # weights:  16
## initial  value 520.570993 
## iter  10 value 279.065802
## iter  20 value 253.473218
## iter  30 value 251.206353
## iter  40 value 247.890757
## iter  50 value 244.395905
## iter  60 value 236.097705
## final  value 236.028541 
## converged
## # weights:  46
## initial  value 532.394420 
## iter  10 value 244.148291
## iter  20 value 194.311533
## iter  30 value 169.929846
## iter  40 value 158.668957
## iter  50 value 148.694121
## iter  60 value 145.363158
## iter  70 value 144.435942
## iter  80 value 144.242842
## iter  90 value 144.181448
## iter 100 value 144.176622
## final  value 144.176622 
## stopped after 100 iterations
## # weights:  76
## initial  value 524.639537 
## iter  10 value 204.420022
## iter  20 value 110.354804
## iter  30 value 80.122860
## iter  40 value 74.359622
## iter  50 value 70.622855
## iter  60 value 69.533009
## iter  70 value 69.054107
## iter  80 value 68.707536
## iter  90 value 68.415783
## iter 100 value 68.194832
## final  value 68.194832 
## stopped after 100 iterations
## # weights:  16
## initial  value 516.209080 
## iter  10 value 296.508932
## iter  20 value 274.112386
## iter  30 value 265.988039
## iter  40 value 265.416376
## iter  50 value 265.382095
## final  value 265.380352 
## converged
## # weights:  46
## initial  value 510.969369 
## iter  10 value 243.739509
## iter  20 value 228.087743
## iter  30 value 218.492492
## iter  40 value 206.354832
## iter  50 value 205.186754
## iter  60 value 204.924432
## iter  70 value 203.142648
## iter  80 value 202.712703
## final  value 202.712214 
## converged
## # weights:  76
## initial  value 519.499589 
## iter  10 value 241.003591
## iter  20 value 194.462000
## iter  30 value 172.234548
## iter  40 value 159.478592
## iter  50 value 148.945729
## iter  60 value 143.766807
## iter  70 value 139.925462
## iter  80 value 137.353414
## iter  90 value 137.004565
## iter 100 value 136.943883
## final  value 136.943883 
## stopped after 100 iterations
## # weights:  16
## initial  value 514.548568 
## iter  10 value 310.411711
## iter  20 value 253.153864
## iter  30 value 249.734296
## iter  40 value 246.114425
## iter  50 value 241.035180
## iter  60 value 238.564238
## iter  70 value 238.556576
## iter  80 value 238.555479
## final  value 238.555326 
## converged
## # weights:  46
## initial  value 542.691109 
## iter  10 value 243.998729
## iter  20 value 183.863007
## iter  30 value 152.737553
## iter  40 value 146.819997
## iter  50 value 142.032027
## iter  60 value 135.020035
## iter  70 value 132.772007
## iter  80 value 131.893625
## iter  90 value 131.385555
## iter 100 value 131.129878
## final  value 131.129878 
## stopped after 100 iterations
## # weights:  76
## initial  value 662.546280 
## iter  10 value 260.107697
## iter  20 value 176.176634
## iter  30 value 132.637829
## iter  40 value 98.750476
## iter  50 value 74.080858
## iter  60 value 55.259914
## iter  70 value 42.536457
## iter  80 value 36.399212
## iter  90 value 33.807920
## iter 100 value 32.122858
## final  value 32.122858 
## stopped after 100 iterations
## # weights:  16
## initial  value 522.178785 
## iter  10 value 299.584795
## iter  20 value 262.480323
## iter  30 value 259.552984
## iter  40 value 255.116706
## iter  50 value 249.694372
## iter  60 value 248.758246
## final  value 248.757032 
## converged
## # weights:  46
## initial  value 510.620408 
## iter  10 value 211.520346
## iter  20 value 171.470149
## iter  30 value 144.266206
## iter  40 value 133.945260
## iter  50 value 131.963844
## iter  60 value 131.284010
## iter  70 value 130.928560
## iter  80 value 130.834648
## iter  90 value 130.803297
## iter 100 value 130.791755
## final  value 130.791755 
## stopped after 100 iterations
## # weights:  76
## initial  value 531.976288 
## iter  10 value 256.798553
## iter  20 value 189.276808
## iter  30 value 134.200214
## iter  40 value 108.796291
## iter  50 value 97.484073
## iter  60 value 93.826189
## iter  70 value 91.943806
## iter  80 value 90.704353
## iter  90 value 88.018357
## iter 100 value 87.332741
## final  value 87.332741 
## stopped after 100 iterations
## # weights:  16
## initial  value 592.981804 
## iter  10 value 354.869542
## iter  20 value 300.926172
## iter  30 value 283.728252
## iter  40 value 273.916757
## iter  50 value 273.419313
## final  value 273.294363 
## converged
## # weights:  46
## initial  value 545.058894 
## iter  10 value 253.919591
## iter  20 value 221.792709
## iter  30 value 193.620277
## iter  40 value 178.044212
## iter  50 value 171.442564
## iter  60 value 169.258933
## iter  70 value 169.000828
## iter  80 value 168.999838
## iter  80 value 168.999837
## iter  80 value 168.999837
## final  value 168.999837 
## converged
## # weights:  76
## initial  value 532.138045 
## iter  10 value 254.027921
## iter  20 value 180.634789
## iter  30 value 158.414030
## iter  40 value 142.223935
## iter  50 value 133.008859
## iter  60 value 129.094821
## iter  70 value 126.401010
## iter  80 value 125.062317
## iter  90 value 123.202527
## iter 100 value 122.212702
## final  value 122.212702 
## stopped after 100 iterations
## # weights:  16
## initial  value 613.494891 
## iter  10 value 365.724772
## iter  20 value 316.606185
## iter  30 value 303.832994
## iter  40 value 302.149209
## iter  50 value 290.976116
## iter  60 value 290.553477
## iter  70 value 290.549891
## iter  80 value 290.548452
## final  value 290.547121 
## converged
## # weights:  46
## initial  value 571.894542 
## iter  10 value 271.362693
## iter  20 value 202.922133
## iter  30 value 160.781913
## iter  40 value 142.965072
## iter  50 value 139.267298
## iter  60 value 129.850518
## iter  70 value 127.789593
## iter  80 value 127.416808
## iter  90 value 126.990709
## iter 100 value 126.441267
## final  value 126.441267 
## stopped after 100 iterations
## # weights:  76
## initial  value 561.916147 
## iter  10 value 236.300918
## iter  20 value 159.978908
## iter  30 value 149.421899
## iter  40 value 141.563004
## iter  50 value 133.946790
## iter  60 value 133.338913
## iter  70 value 133.113387
## iter  80 value 132.700820
## iter  90 value 132.234360
## iter 100 value 131.728947
## final  value 131.728947 
## stopped after 100 iterations
## # weights:  76
## initial  value 629.084987 
## iter  10 value 268.204321
## iter  20 value 202.379095
## iter  30 value 167.836302
## iter  40 value 153.554837
## iter  50 value 144.670091
## iter  60 value 135.894463
## iter  70 value 133.161628
## iter  80 value 132.541213
## iter  90 value 132.313112
## iter 100 value 132.172448
## final  value 132.172448 
## stopped after 100 iterations
resultado_entrenamiento5 <- predict(modelo5, entrenamiento)
resultado_prueba5 <- predict(modelo5, prueba)
#Matriz de confusión: resultado del entrenamiento
mcre5 <- confusionMatrix(resultado_entrenamiento5, entrenamiento$target)
#Matriz de confusión: resultado de la prueba
mcrp5 <- confusionMatrix(resultado_prueba5, prueba$target)

6. Modelo con el Método rf

modelo6 <- train(target ~., data=entrenamiento,
                 method = "rf",
                 preProcess=c("scale","center"),
                 trControl= trainControl(method = "cv", number = 10),
                 tuneGrid = expand.grid(mtry = c(2,4,6))
                 )
resultado_entrenamiento6 <- predict(modelo6, entrenamiento)
resultado_prueba6 <- predict(modelo6, prueba)
#Matriz de confusión: resultado del entrenamiento
mcre6 <- confusionMatrix(resultado_entrenamiento6, entrenamiento$target)
#Matriz de confusión: resultado de la prueba
mcrp6 <- confusionMatrix(resultado_prueba6, prueba$target)

Resumen de Resultado

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"]),
  "nnet"=c(mcre5$overall["Accuracy"],mcrp5$overall["Accuracy"]),
  "rf"=c(mcre6$overall["Accuracy"],mcrp6$overall["Accuracy"])
)
rownames(resultados) <- c("Precisión de Entrenamiento", "Precisión de Prueba")
resultados
##                            svmLinear svmRadial   svmPoly     rpart      nnet rf
## Precisión de Entrenamiento 0.8343484         1 0.8343484 0.9159562 0.9671133  1
## Precisión de Prueba        0.8480392         1 0.8480392 0.8774510 0.9460784  1

Conclusiones

De acuerdo a las pruebas de precisión el modelo de redes neuronales fue el mejor modelo si se toman en cuenta todas las variables ya que la precisión que otorga este modelo es de 97% la cual fue la más alta comparada a los demás modelos, en el caso de svmRadial que dio una precisión del 100% no se toma en cuenta ya que tener una precisión del 100% solo fue con los datos del modelo de entrenamiento por lo que no será representativo para la población.

LS0tCnRpdGxlOiAiSGVhcnQgY2FyZXQiCmF1dGhvcjogIkFndXN0w61uIEfDs21leiBQZXJleiBBMDE3MzI4OTciCmRhdGU6ICIyMDI0LTA4LTIxIgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQotLS0KCiFbXShodHRwczovL211c2ljaW5tYWRlLndvcmRwcmVzcy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTMvMTAvY29yYXpvbi1naWYtYWxlZ29yaWFzLWNvbV8yLmdpZj93PTUwMCkKCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPlRlb3JpYTwvc3Bhbj4KCkVsIHBhcXVldGUgQ0FSRVQgKENsYXNzaWZpY2F0aW9uIGFuZCBSZWdyZXNzaW9uIFRyYWluaW5nKSBlcyB1biBwYXF1ZXRlIGludGVncmFsIGNvbiB1bmEgYW1wbGlhIHZhcmllZGFkIGRlIGFsZ29yaXRtb3MgcGFyYSBlbCBhcHJlbmRpemFqZSBhdXRvbcOhdGljby4gRXN0YSB2ZXogc2UgdXNhcmEgcGFyYSBwcmVkZWNpciBpbmZvcm1hY2nDs24gZGUgZW5mZXJtZWRhZGVzIGNhcmRpYWNhcwoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IGdyYXk7Ij5JbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXJpYXM8L3NwYW4+CgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KGdncGxvdDIpCiNpbnN0YWxsLnBhY2thZ2VzKCJsYXR0aWNlIikKbGlicmFyeShsYXR0aWNlKQpsaWJyYXJ5KGNhcmV0KQpsaWJyYXJ5KGRhdGFzZXRzKQpsaWJyYXJ5KERhdGFFeHBsb3JlcikKI2luc3RhbGwucGFja2FnZXMoImtlcm5sYWIiKQpsaWJyYXJ5KGtlcm5sYWIpCiNpbnN0YWxsLnBhY2thZ2VzKCJyYW5kb21Gb3Jlc3QiKQpsaWJyYXJ5KHJhbmRvbUZvcmVzdCkKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPkNyZWFyIGJhc2UgZGUgZGF0b3M8L3NwYW4+CgpgYGB7cn0KZGYgPC0gcmVhZC5jc3YoIi9Vc2Vycy9hZ3VzdGluZ29tZXpwZXJlei9EZXNrdG9wL0ludGVsaWdlbmNpYSBBcnRpZmljaWFsL2hlYXJ0LmNzdiIpCmBgYAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5BbsOhbGlzaXMgRXhwbG9yYXRvcmlvPC9zcGFuPgpgYGB7cn0Kc3VtbWFyeShkZikKc3RyKGRmKQpwbG90X21pc3NpbmcoZGYpCmBgYAoKCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPlBhcnRpciBsb3MgZGF0b3MgODAtMjA8L3NwYW4+CmBgYHtyfQpzZXQuc2VlZCgxMjMpCmRmJHRhcmdldDwtYXMuZmFjdG9yKGRmJHRhcmdldCkKcmVuZ2xvbmVzX2VudHJlbmFtaWVudG88LSBjcmVhdGVEYXRhUGFydGl0aW9uKGRmJHRhcmdldCwgcD0wLjgsIGxpc3Q9RkFMU0UpCmVudHJlbmFtaWVudG88LSBkZltyZW5nbG9uZXNfZW50cmVuYW1pZW50byxdCnBydWViYTwtIGRmWy1yZW5nbG9uZXNfZW50cmVuYW1pZW50byxdCmBgYAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5Nw6l0b2RvcyBwYXJhIE1vZGVsYXI8L3NwYW4+CkxvcyBtw6l0b2RvcyBtw6FzIHV0aWxpemFkb3MgcGFyYSBtb2RlbGFyIGFwcmVuZGl6YWplIGF1dG9tw6F0aWNvIHNvbjoKKiAqKlNWTSoqOiAqU3VwcG9ydCBWZWN0b3IgTWFjaGluZSogbyBtw6FxdWluYSBkZSB2ZWN0b3JlcyBkZSBzb3BvcnRlLiBIYXkgdmFyaW9zIHN1YnRpcG9zOgpMaW5lYWwgKHN2bUxpbmVhciksIFJhZGlhbCAoc3ZtUmFkaWFsKSwgUG9saW7Ds21pY28gKHN2bVBvbHkpLCBldGMuCiogKirDgXJib2wgZGUgRGVjaXNpw7NuKio6IHJwYXJ0CiogKipSZWRlcyBOZXVyb25hbGVzKio6IG5uZXQKKiAqKlJhbmRvbSBGb3Jlc3QqKjogcmYKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPjEuIE1vZGVsbyBjb24gZWwgTcOpdG9kbyBzdm1MaW5lYXI8L3NwYW4+CgpgYGB7cn0KbW9kZWxvMSA8LSB0cmFpbih0YXJnZXQgfi4sIGRhdGE9ZW50cmVuYW1pZW50bywKICAgICAgICAgICAgICAgICBtZXRob2QgPSAic3ZtTGluZWFyIiwKICAgICAgICAgICAgICAgICBwcmVQcm9jZXNzPWMoInNjYWxlIiwiY2VudGVyIiksCiAgICAgICAgICAgICAgICAgdHJDb250cm9sPSB0cmFpbkNvbnRyb2wobWV0aG9kID0gImN2IiwgbnVtYmVyID0gMTApLAogICAgICAgICAgICAgICAgIHR1bmVHcmlkPWRhdGEuZnJhbWUoQz0xKQogICAgICAgICAgICAgICAgICkKcmVzdWx0YWRvX2VudHJlbmFtaWVudG8xIDwtIHByZWRpY3QobW9kZWxvMSwgZW50cmVuYW1pZW50bykKcmVzdWx0YWRvX3BydWViYTEgPC0gcHJlZGljdChtb2RlbG8xLCBwcnVlYmEpCiNNYXRyaXogZGUgY29uZnVzacOzbjogcmVzdWx0YWRvIGRlbCBlbnRyZW5hbWllbnRvCm1jcmUxIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzEsIGVudHJlbmFtaWVudG8kdGFyZ2V0KQojTWF0cml6IGRlIGNvbmZ1c2nDs246IHJlc3VsdGFkbyBkZSBsYSBwcnVlYmEKbWNycDEgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmExLCBwcnVlYmEkdGFyZ2V0KQoKYGBgCgoKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPjIuIE1vZGVsbyBjb24gZWwgTcOpdG9kbyBzdm1SYWRpYWw8L3NwYW4+CmBgYHtyfQptb2RlbG8yIDwtIHRyYWluKHRhcmdldCB+LiwgZGF0YT1lbnRyZW5hbWllbnRvLAogICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJzdm1SYWRpYWwiLAogICAgICAgICAgICAgICAgIHByZVByb2Nlc3M9Yygic2NhbGUiLCJjZW50ZXIiKSwKICAgICAgICAgICAgICAgICB0ckNvbnRyb2w9IHRyYWluQ29udHJvbChtZXRob2QgPSAiY3YiLCBudW1iZXIgPSAxMCksCiAgICAgICAgICAgICAgICAgdHVuZUdyaWQ9ZGF0YS5mcmFtZShzaWdtYT0xLCBDPTEpCiAgICAgICAgICAgICAgICAgKQpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzIgPC0gcHJlZGljdChtb2RlbG8yLCBlbnRyZW5hbWllbnRvKQpyZXN1bHRhZG9fcHJ1ZWJhMiA8LSBwcmVkaWN0KG1vZGVsbzIsIHBydWViYSkKI01hdHJpeiBkZSBjb25mdXNpw7NuOiByZXN1bHRhZG8gZGVsIGVudHJlbmFtaWVudG8KbWNyZTIgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvMiwgZW50cmVuYW1pZW50byR0YXJnZXQpCiNNYXRyaXogZGUgY29uZnVzacOzbjogcmVzdWx0YWRvIGRlIGxhIHBydWViYQptY3JwMiA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTIsIHBydWViYSR0YXJnZXQpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+My4gTW9kZWxvIGNvbiBlbCBNw6l0b2RvIHN2bVBvbHk8L3NwYW4+CgpgYGB7cn0KbW9kZWxvMyA8LSB0cmFpbih0YXJnZXQgfi4sIGRhdGE9ZW50cmVuYW1pZW50bywKICAgICAgICAgICAgICAgICBtZXRob2QgPSAic3ZtUG9seSIsCiAgICAgICAgICAgICAgICAgcHJlUHJvY2Vzcz1jKCJzY2FsZSIsImNlbnRlciIpLAogICAgICAgICAgICAgICAgIHRyQ29udHJvbD0gdHJhaW5Db250cm9sKG1ldGhvZCA9ICJjdiIsIG51bWJlciA9IDEwKSwKICAgICAgICAgICAgICAgICB0dW5lR3JpZD1kYXRhLmZyYW1lKGRlZ3JlZT0xLCBzY2FsZT0gMSwgQz0xKQogICAgICAgICAgICAgICAgICkKcmVzdWx0YWRvX2VudHJlbmFtaWVudG8zIDwtIHByZWRpY3QobW9kZWxvMywgZW50cmVuYW1pZW50bykKcmVzdWx0YWRvX3BydWViYTMgPC0gcHJlZGljdChtb2RlbG8zLCBwcnVlYmEpCiNNYXRyaXogZGUgY29uZnVzacOzbjogcmVzdWx0YWRvIGRlbCBlbnRyZW5hbWllbnRvCm1jcmUzIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzMsIGVudHJlbmFtaWVudG8kdGFyZ2V0KQojTWF0cml6IGRlIGNvbmZ1c2nDs246IHJlc3VsdGFkbyBkZSBsYSBwcnVlYmEKbWNycDMgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmEzLCBwcnVlYmEkdGFyZ2V0KQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPjQuIE1vZGVsbyBjb24gZWwgTcOpdG9kbyBycGFydCA8L3NwYW4+CgpgYGB7cn0KbW9kZWxvNCA8LSB0cmFpbih0YXJnZXQgfi4sIGRhdGE9ZW50cmVuYW1pZW50bywKICAgICAgICAgICAgICAgICBtZXRob2QgPSAicnBhcnQiLAogICAgICAgICAgICAgICAgIHByZVByb2Nlc3M9Yygic2NhbGUiLCJjZW50ZXIiKSwKICAgICAgICAgICAgICAgICB0ckNvbnRyb2w9IHRyYWluQ29udHJvbChtZXRob2QgPSAiY3YiLCBudW1iZXIgPSAxMCksCiAgICAgICAgICAgICAgICAgdHVuZUxlbmd0aCA9IDEwCiAgICAgICAgICAgICAgICAgKQpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzQgPC0gcHJlZGljdChtb2RlbG80LCBlbnRyZW5hbWllbnRvKQpyZXN1bHRhZG9fcHJ1ZWJhNCA8LSBwcmVkaWN0KG1vZGVsbzQsIHBydWViYSkKI01hdHJpeiBkZSBjb25mdXNpw7NuOiByZXN1bHRhZG8gZGVsIGVudHJlbmFtaWVudG8KbWNyZTQgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvNCwgZW50cmVuYW1pZW50byR0YXJnZXQpCiNNYXRyaXogZGUgY29uZnVzacOzbjogcmVzdWx0YWRvIGRlIGxhIHBydWViYQptY3JwNCA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTQsIHBydWViYSR0YXJnZXQpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+NS4gTW9kZWxvIGNvbiBlbCBNw6l0b2RvIG5uZXQgPC9zcGFuPgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KbW9kZWxvNSA8LSB0cmFpbih0YXJnZXQgfi4sIGRhdGE9ZW50cmVuYW1pZW50bywKICAgICAgICAgICAgICAgICBtZXRob2QgPSAibm5ldCIsCiAgICAgICAgICAgICAgICAgcHJlUHJvY2Vzcz1jKCJzY2FsZSIsImNlbnRlciIpLAogICAgICAgICAgICAgICAgIHRyQ29udHJvbD0gdHJhaW5Db250cm9sKG1ldGhvZCA9ICJjdiIsIG51bWJlciA9IDEwKQogICAgICAgICAgICAgICAgICkKcmVzdWx0YWRvX2VudHJlbmFtaWVudG81IDwtIHByZWRpY3QobW9kZWxvNSwgZW50cmVuYW1pZW50bykKcmVzdWx0YWRvX3BydWViYTUgPC0gcHJlZGljdChtb2RlbG81LCBwcnVlYmEpCiNNYXRyaXogZGUgY29uZnVzacOzbjogcmVzdWx0YWRvIGRlbCBlbnRyZW5hbWllbnRvCm1jcmU1IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzUsIGVudHJlbmFtaWVudG8kdGFyZ2V0KQojTWF0cml6IGRlIGNvbmZ1c2nDs246IHJlc3VsdGFkbyBkZSBsYSBwcnVlYmEKbWNycDUgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmE1LCBwcnVlYmEkdGFyZ2V0KQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPjYuIE1vZGVsbyBjb24gZWwgTcOpdG9kbyByZiA8L3NwYW4+CgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQptb2RlbG82IDwtIHRyYWluKHRhcmdldCB+LiwgZGF0YT1lbnRyZW5hbWllbnRvLAogICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJyZiIsCiAgICAgICAgICAgICAgICAgcHJlUHJvY2Vzcz1jKCJzY2FsZSIsImNlbnRlciIpLAogICAgICAgICAgICAgICAgIHRyQ29udHJvbD0gdHJhaW5Db250cm9sKG1ldGhvZCA9ICJjdiIsIG51bWJlciA9IDEwKSwKICAgICAgICAgICAgICAgICB0dW5lR3JpZCA9IGV4cGFuZC5ncmlkKG10cnkgPSBjKDIsNCw2KSkKICAgICAgICAgICAgICAgICApCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvNiA8LSBwcmVkaWN0KG1vZGVsbzYsIGVudHJlbmFtaWVudG8pCnJlc3VsdGFkb19wcnVlYmE2IDwtIHByZWRpY3QobW9kZWxvNiwgcHJ1ZWJhKQojTWF0cml6IGRlIGNvbmZ1c2nDs246IHJlc3VsdGFkbyBkZWwgZW50cmVuYW1pZW50bwptY3JlNiA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG82LCBlbnRyZW5hbWllbnRvJHRhcmdldCkKI01hdHJpeiBkZSBjb25mdXNpw7NuOiByZXN1bHRhZG8gZGUgbGEgcHJ1ZWJhCm1jcnA2IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhNiwgcHJ1ZWJhJHRhcmdldCkKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5SZXN1bWVuIGRlIFJlc3VsdGFkbyA8L3NwYW4+CmBgYHtyfQpyZXN1bHRhZG9zIDwtIGRhdGEuZnJhbWUoCiAgInN2bUxpbmVhciI9YyhtY3JlMSRvdmVyYWxsWyJBY2N1cmFjeSJdLG1jcnAxJG92ZXJhbGxbIkFjY3VyYWN5Il0pLAogICJzdm1SYWRpYWwiPWMobWNyZTIkb3ZlcmFsbFsiQWNjdXJhY3kiXSxtY3JwMiRvdmVyYWxsWyJBY2N1cmFjeSJdKSwKICAic3ZtUG9seSI9YyhtY3JlMyRvdmVyYWxsWyJBY2N1cmFjeSJdLG1jcnAzJG92ZXJhbGxbIkFjY3VyYWN5Il0pLAogICJycGFydCI9YyhtY3JlNCRvdmVyYWxsWyJBY2N1cmFjeSJdLG1jcnA0JG92ZXJhbGxbIkFjY3VyYWN5Il0pLAogICJubmV0Ij1jKG1jcmU1JG92ZXJhbGxbIkFjY3VyYWN5Il0sbWNycDUkb3ZlcmFsbFsiQWNjdXJhY3kiXSksCiAgInJmIj1jKG1jcmU2JG92ZXJhbGxbIkFjY3VyYWN5Il0sbWNycDYkb3ZlcmFsbFsiQWNjdXJhY3kiXSkKKQpyb3duYW1lcyhyZXN1bHRhZG9zKSA8LSBjKCJQcmVjaXNpw7NuIGRlIEVudHJlbmFtaWVudG8iLCAiUHJlY2lzacOzbiBkZSBQcnVlYmEiKQpyZXN1bHRhZG9zCmBgYAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5Db25jbHVzaW9uZXMgPC9zcGFuPgoKCkRlIGFjdWVyZG8gYSBsYXMgcHJ1ZWJhcyBkZSBwcmVjaXNpw7NuIGVsIG1vZGVsbyBkZSByZWRlcyBuZXVyb25hbGVzIGZ1ZSBlbCBtZWpvciBtb2RlbG8gc2kgc2UgdG9tYW4gZW4gY3VlbnRhIHRvZGFzIGxhcyB2YXJpYWJsZXMgeWEgcXVlIGxhIHByZWNpc2nDs24gcXVlIG90b3JnYSBlc3RlIG1vZGVsbyBlcyBkZSA5NyUgbGEgY3VhbCBmdWUgbGEgbcOhcyBhbHRhIGNvbXBhcmFkYSBhIGxvcyBkZW3DoXMgbW9kZWxvcywgZW4gZWwgY2FzbyBkZSBzdm1SYWRpYWwgcXVlIGRpbyB1bmEgcHJlY2lzacOzbiBkZWwgMTAwJSBubyBzZSB0b21hIGVuIGN1ZW50YSB5YSBxdWUgdGVuZXIgdW5hIHByZWNpc2nDs24gZGVsIDEwMCUgc29sbyBmdWUgY29uIGxvcyBkYXRvcyBkZWwgbW9kZWxvIGRlIGVudHJlbmFtaWVudG8gcG9yIGxvIHF1ZSBubyBzZXLDoSByZXByZXNlbnRhdGl2byBwYXJhIGxhIHBvYmxhY2nDs24uCgo=