CARET - Teoría

El paquete caret (Clasification 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("ggplot2")
# install.packages("lattice")
# install.packages("caret")
# install.packages("datasets")
# install.packages("DataExplorer")
# install.packages("kernlab")
# install.packages("randomForest")

library(ggplot2)
library(lattice)
library(caret)
## Warning: package 'caret' was built under R version 4.4.1
library(datasets)
library(DataExplorer)
## Warning: package 'DataExplorer' was built under R version 4.4.1
library(kernlab)
## Warning: package 'kernlab' was built under R version 4.4.1
## 
## Adjuntando el paquete: 'kernlab'
## The following object is masked from 'package:ggplot2':
## 
##     alpha
library(randomForest)
## Warning: package 'randomForest' was built under R version 4.4.1
## randomForest 4.7-1.1
## Type rfNews() to see new features/changes/bug fixes.
## 
## Adjuntando el paquete: 'randomForest'
## The following object is masked from 'package:ggplot2':
## 
##     margin

Crear base de datos

df <- read.csv("heart.csv")

df$target <- as.factor(df$target)

Análisis Exploratorio

#summarise_coord(df)
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  : Factor w/ 2 levels "0","1": 1 1 1 1 1 2 1 1 1 1 ...
#No hay datos faltantes
plot_missing(df)

NOTA: La variable que queremos predecir debe tener formato FACTOR

Partir Datos en el 80-20

set.seed(123)


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). Árbol de Decisión: rpart Redes Neuronales: nnet Random Forest o Bosques Aleatorios: rf

1.- Modelo con svmLinear

md1 <- train(target ~. , data = entrenamiento,
             method = "svmLinear", preProcess = c("scale","center"),
             trControl = trainControl(method = "cv", number = 10),
             tuneGrid = data.frame(C=1)
             )

resultado_entrena1 <- predict(md1,entrenamiento)
resultado_prueba1 <- predict(md1, prueba)

# Matriz de Confusión del Resultado de Entrenamiento
mcre1 <- confusionMatrix(resultado_entrena1, entrenamiento$target)

# Matriz de Confusión del Resultado de la Prueba
mcrp1 <- confusionMatrix(resultado_prueba1, prueba$target)

2.- Modelo con svmRadial

md2 <- train(target ~. , data = entrenamiento,
             method = "svmRadial", preProcess = c("scale","center"),
             trControl = trainControl(method = "cv", number = 10),
             tuneGrid = data.frame(sigma=1, C=1)
             )

resultado_entrena2 <- predict(md2,entrenamiento)
resultado_prueba2 <- predict(md2, prueba)

# Matriz de Confusión del Resultado de Entrenamiento
mcre2 <- confusionMatrix(resultado_entrena2, entrenamiento$target)

# Matriz de Confusión del Resultado de la Prueba
mcrp2 <- confusionMatrix(resultado_prueba2, prueba$target)

3.- Modelo con svmPoly

md3 <- 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_entrena3 <- predict(md3,entrenamiento)
resultado_prueba3 <- predict(md3, prueba)

# Matriz de Confusión del Resultado de Entrenamiento
mcre3 <- confusionMatrix(resultado_entrena3, entrenamiento$target)

# Matriz de Confusión del Resultado de la Prueba
mcrp3 <- confusionMatrix(resultado_prueba3, prueba$target)

4.- Modelo con rpart

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

resultado_entrena4 <- predict(md4,entrenamiento)
resultado_prueba4 <- predict(md4, prueba)

# Matriz de Confusión del Resultado de Entrenamiento
mcre4 <- confusionMatrix(resultado_entrena4, entrenamiento$target)

# Matriz de Confusión del Resultado de la Prueba
mcrp4 <- confusionMatrix(resultado_prueba4, prueba$target)

5.- Modelo con nnet

md5 <- 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.708150
## 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.940970
## iter  60 value 201.615389
## iter  70 value 196.436263
## iter  80 value 195.156876
## iter  90 value 194.821880
## iter 100 value 194.243884
## final  value 194.243884 
## 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.356224
## iter  60 value 56.811554
## iter  70 value 56.517666
## iter  80 value 55.939425
## iter  90 value 55.617774
## iter 100 value 55.539545
## final  value 55.539545 
## 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.993170
## iter  70 value 144.885639
## iter  80 value 143.528107
## 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.554372
## final  value 78.554372 
## 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.087839
## iter  80 value 54.300162
## iter  90 value 53.182555
## iter 100 value 52.255707
## final  value 52.255707 
## 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.218688
## iter  90 value 83.265769
## iter 100 value 83.034968
## final  value 83.034968 
## 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.973052
## iter  70 value 77.775633
## iter  80 value 76.635395
## iter  90 value 76.220970
## iter 100 value 75.936712
## final  value 75.936712 
## 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.731277
## 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.415781
## iter 100 value 68.194830
## final  value 68.194830 
## 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.807919
## iter 100 value 32.122810
## final  value 32.122810 
## 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.826191
## iter  70 value 91.943777
## iter  80 value 90.704345
## iter  90 value 88.021859
## iter 100 value 87.332200
## final  value 87.332200 
## 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.976115
## 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.113385
## iter  80 value 132.700834
## iter  90 value 132.233494
## iter 100 value 131.729164
## final  value 131.729164 
## 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_entrena5 <- predict(md5,entrenamiento)
resultado_prueba5 <- predict(md5, prueba)

# Matriz de Confusión del Resultado de Entrenamiento
mcre5 <- confusionMatrix(resultado_entrena5, entrenamiento$target)

# Matriz de Confusión del Resultado de la Prueba
mcrp5 <- confusionMatrix(resultado_prueba5, prueba$target)

6.- Modelo con rf

md6 <- 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_entrena6 <- predict(md6,entrenamiento)
resultado_prueba6 <- predict(md6, prueba)

# Matriz de Confusión del Resultado de Entrenamiento
mcre6 <- confusionMatrix(resultado_entrena6, entrenamiento$target)

# Matriz de Confusión del Resultado de la Prueba
mcrp6 <- confusionMatrix(resultado_prueba6, prueba$target)

Resumen 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"]),
  "nnet" = c(mcre5$overall["Accuracy"], mcrp5$overall["Accuracy"]),
  "rf" = c(mcre6$overall["Accuracy"], mcrp6$overall["Accuracy"])
)

rownames(resultados) <- c("Precisión Entrenamiento", "Precisión Prueba")

resultados
##                         svmLinear svmRadial   svmPoly     rpart      nnet rf
## Precisión Entrenamiento 0.8343484         1 0.8343484 0.9159562 0.9671133  1
## Precisión Prueba        0.8480392         1 0.8480392 0.8774510 0.9460784  1

Conclusión

Según los resultados, los modelos “rf” y “svmRadial” lograron un 100% de precisión tanto en los datos de entrenamiento como en los de prueba, lo que sugiere que estos modelos están sobreajustados. En contraste, los modelos “svmLinear” y “svmPoly” muestran una mejora en la predicción de los datos de prueba, pero su precisión es considerablemente menor en comparación con “nnet”. Este último modelo, con un 96% de precisión en pruebas y 98% en entrenamiento, ofrece una estimación más realista.

LS0tDQp0aXRsZTogIkNBUkVUIOKAkyBFbmZlcm1lZGFkIENhcmRpYWNhIg0KYXV0aG9yOiAiQTAwODMxOTM4IENlc2FyIFZlZ2EiDQpkYXRlOiAiMjAyNC0wOC0xOSINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KICAgIHRoZW1lOiAiY29zbW8iDQotLS0NCg0KIVtdKEM6XFVzZXJzXENlc2FyXERlc2t0b3BcVW5pdmVyc2lkYWRcUG9ydGFmb2xpb1xoZWFydGguZ2lmKQ0KDQoNCiMgKio8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPkNBUkVUIC0gVGVvcsOtYTwvc3Bhbj4qKg0KDQpFbCBwYXF1ZXRlICpjYXJldCAoQ2xhc2lmaWNhdGlvbiBhbmQgUmVncmVzc2lvbiBUcmFpbmluZykqIGVzIHVuIHBhcXVldGUgaW50ZWdyYWwgY29uIHVuYSBhbXBsaWEgdmFyaWVkYWQgZGUgYWxnb3JpdG1vcyBwYXJhIGVsIGFwcmVuZGl6YWplIGF1dG9tw6F0aWNvLg0KDQoNCg0KIyAqKjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+SW5zdGFsYXIgUGFxdWV0ZXMgeSBMbGFtYXIgTGlicmVyw61hczwvc3Bhbj4qKg0KDQpgYGB7cn0NCiMgaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpDQojIGluc3RhbGwucGFja2FnZXMoImxhdHRpY2UiKQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJjYXJldCIpDQojIGluc3RhbGwucGFja2FnZXMoImRhdGFzZXRzIikNCiMgaW5zdGFsbC5wYWNrYWdlcygiRGF0YUV4cGxvcmVyIikNCiMgaW5zdGFsbC5wYWNrYWdlcygia2VybmxhYiIpDQojIGluc3RhbGwucGFja2FnZXMoInJhbmRvbUZvcmVzdCIpDQoNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkobGF0dGljZSkNCmxpYnJhcnkoY2FyZXQpDQpsaWJyYXJ5KGRhdGFzZXRzKQ0KbGlicmFyeShEYXRhRXhwbG9yZXIpDQpsaWJyYXJ5KGtlcm5sYWIpDQpsaWJyYXJ5KHJhbmRvbUZvcmVzdCkNCmBgYA0KDQojICoqPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij5DcmVhciBiYXNlIGRlIGRhdG9zPC9zcGFuPioqDQoNCmBgYHtyfQ0KZGYgPC0gcmVhZC5jc3YoImhlYXJ0LmNzdiIpDQoNCmRmJHRhcmdldCA8LSBhcy5mYWN0b3IoZGYkdGFyZ2V0KQ0KYGBgDQoNCiMgKio8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPkFuw6FsaXNpcyBFeHBsb3JhdG9yaW88L3NwYW4+KioNCg0KYGBge3J9DQojc3VtbWFyaXNlX2Nvb3JkKGRmKQ0Kc3RyKGRmKQ0KDQojTm8gaGF5IGRhdG9zIGZhbHRhbnRlcw0KcGxvdF9taXNzaW5nKGRmKQ0KYGBgDQoNCk5PVEE6IExhIHZhcmlhYmxlIHF1ZSBxdWVyZW1vcyBwcmVkZWNpciBkZWJlIHRlbmVyIGZvcm1hdG8gRkFDVE9SDQoNCiMgKio8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPlBhcnRpciBEYXRvcyBlbiBlbCA4MC0yMDwvc3Bhbj4qKg0KDQpgYGB7cn0NCnNldC5zZWVkKDEyMykNCg0KDQpyZW5nbG9uZXNfZW50cmVuYW1pZW50byA8LSBjcmVhdGVEYXRhUGFydGl0aW9uKGRmJHRhcmdldCwgcCA9IDAuOCwgbGlzdCA9IEZBTFNFKQ0KZW50cmVuYW1pZW50byA8LSBkZltyZW5nbG9uZXNfZW50cmVuYW1pZW50byxdDQpwcnVlYmEgPC0gZGZbLXJlbmdsb25lc19lbnRyZW5hbWllbnRvLF0NCmBgYA0KDQojICoqPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij5Nw6l0b2RvcyBwYXJhIE1vZGVsYXI8L3NwYW4+KioNCg0KTG9zIG3DqXRvZG9zIG3DoXMgdXRpbGl6YWRvcyBwYXJhIG1vZGVsYXIgYXByZW5kaXphamUgYXV0b23DoXRpY28gc29uOg0KDQoqKlNWTToqKiBTdXBwb3J0IFZlY3RvciBNYWNoaW5lIG8gTcOhcXVpbmEgZGUgVmVjdG9yZXMgZGUgU29wb3J0ZS4gSGF5IHZhcmlvcyBzdWJ0aXBvczogTGluZWFsIChzdm1MaW5lYXIpLCBSYWRpYWwgKHN2bVJhZGlhbCksIFBvbGluw7NtaWNvIChzdm1Qb2x5KS4NCioqw4FyYm9sIGRlIERlY2lzacOzbjoqKiBycGFydA0KKipSZWRlcyBOZXVyb25hbGVzOioqIG5uZXQNCioqUmFuZG9tIEZvcmVzdCBvIEJvc3F1ZXMgQWxlYXRvcmlvczoqKiByZg0KDQojICoqPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij4xLi0gTW9kZWxvIGNvbiBzdm1MaW5lYXIgPC9zcGFuPioqDQoNCmBgYHtyfQ0KbWQxIDwtIHRyYWluKHRhcmdldCB+LiAsIGRhdGEgPSBlbnRyZW5hbWllbnRvLA0KICAgICAgICAgICAgIG1ldGhvZCA9ICJzdm1MaW5lYXIiLCBwcmVQcm9jZXNzID0gYygic2NhbGUiLCJjZW50ZXIiKSwNCiAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kID0gImN2IiwgbnVtYmVyID0gMTApLA0KICAgICAgICAgICAgIHR1bmVHcmlkID0gZGF0YS5mcmFtZShDPTEpDQogICAgICAgICAgICAgKQ0KDQpyZXN1bHRhZG9fZW50cmVuYTEgPC0gcHJlZGljdChtZDEsZW50cmVuYW1pZW50bykNCnJlc3VsdGFkb19wcnVlYmExIDwtIHByZWRpY3QobWQxLCBwcnVlYmEpDQoNCiMgTWF0cml6IGRlIENvbmZ1c2nDs24gZGVsIFJlc3VsdGFkbyBkZSBFbnRyZW5hbWllbnRvDQptY3JlMSA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmExLCBlbnRyZW5hbWllbnRvJHRhcmdldCkNCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbiBkZWwgUmVzdWx0YWRvIGRlIGxhIFBydWViYQ0KbWNycDEgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmExLCBwcnVlYmEkdGFyZ2V0KQ0KYGBgDQoNCiMgKio8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPjIuLSBNb2RlbG8gY29uIHN2bVJhZGlhbCA8L3NwYW4+KioNCg0KYGBge3J9DQptZDIgPC0gdHJhaW4odGFyZ2V0IH4uICwgZGF0YSA9IGVudHJlbmFtaWVudG8sDQogICAgICAgICAgICAgbWV0aG9kID0gInN2bVJhZGlhbCIsIHByZVByb2Nlc3MgPSBjKCJzY2FsZSIsImNlbnRlciIpLA0KICAgICAgICAgICAgIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2QgPSAiY3YiLCBudW1iZXIgPSAxMCksDQogICAgICAgICAgICAgdHVuZUdyaWQgPSBkYXRhLmZyYW1lKHNpZ21hPTEsIEM9MSkNCiAgICAgICAgICAgICApDQoNCnJlc3VsdGFkb19lbnRyZW5hMiA8LSBwcmVkaWN0KG1kMixlbnRyZW5hbWllbnRvKQ0KcmVzdWx0YWRvX3BydWViYTIgPC0gcHJlZGljdChtZDIsIHBydWViYSkNCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbiBkZWwgUmVzdWx0YWRvIGRlIEVudHJlbmFtaWVudG8NCm1jcmUyIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYTIsIGVudHJlbmFtaWVudG8kdGFyZ2V0KQ0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuIGRlbCBSZXN1bHRhZG8gZGUgbGEgUHJ1ZWJhDQptY3JwMiA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTIsIHBydWViYSR0YXJnZXQpDQpgYGANCg0KIyAqKjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+My4tIE1vZGVsbyBjb24gc3ZtUG9seSA8L3NwYW4+KioNCg0KYGBge3J9DQptZDMgPC0gdHJhaW4odGFyZ2V0IH4uICwgZGF0YSA9IGVudHJlbmFtaWVudG8sDQogICAgICAgICAgICAgbWV0aG9kID0gInN2bVBvbHkiLCBwcmVQcm9jZXNzID0gYygic2NhbGUiLCJjZW50ZXIiKSwNCiAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kID0gImN2IiwgbnVtYmVyID0gMTApLA0KICAgICAgICAgICAgIHR1bmVHcmlkID0gZGF0YS5mcmFtZShkZWdyZWU9MSwgc2NhbGU9MSwgQz0xKQ0KICAgICAgICAgICAgICkNCg0KcmVzdWx0YWRvX2VudHJlbmEzIDwtIHByZWRpY3QobWQzLGVudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhMyA8LSBwcmVkaWN0KG1kMywgcHJ1ZWJhKQ0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuIGRlbCBSZXN1bHRhZG8gZGUgRW50cmVuYW1pZW50bw0KbWNyZTMgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hMywgZW50cmVuYW1pZW50byR0YXJnZXQpDQoNCiMgTWF0cml6IGRlIENvbmZ1c2nDs24gZGVsIFJlc3VsdGFkbyBkZSBsYSBQcnVlYmENCm1jcnAzIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhMywgcHJ1ZWJhJHRhcmdldCkNCmBgYA0KDQojICoqPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij40Li0gTW9kZWxvIGNvbiBycGFydCA8L3NwYW4+KioNCg0KYGBge3J9DQptZDQgPC0gdHJhaW4odGFyZ2V0IH4uICwgZGF0YSA9IGVudHJlbmFtaWVudG8sDQogICAgICAgICAgICAgbWV0aG9kID0gInJwYXJ0IiwgcHJlUHJvY2VzcyA9IGMoInNjYWxlIiwiY2VudGVyIiksDQogICAgICAgICAgICAgdHJDb250cm9sID0gdHJhaW5Db250cm9sKG1ldGhvZCA9ICJjdiIsIG51bWJlciA9IDEwKSwNCiAgICAgICAgICAgICB0dW5lTGVuZ3RoID0gMTANCiAgICAgICAgICAgICApDQoNCnJlc3VsdGFkb19lbnRyZW5hNCA8LSBwcmVkaWN0KG1kNCxlbnRyZW5hbWllbnRvKQ0KcmVzdWx0YWRvX3BydWViYTQgPC0gcHJlZGljdChtZDQsIHBydWViYSkNCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbiBkZWwgUmVzdWx0YWRvIGRlIEVudHJlbmFtaWVudG8NCm1jcmU0IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYTQsIGVudHJlbmFtaWVudG8kdGFyZ2V0KQ0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuIGRlbCBSZXN1bHRhZG8gZGUgbGEgUHJ1ZWJhDQptY3JwNCA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTQsIHBydWViYSR0YXJnZXQpDQpgYGANCg0KIyAqKjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+NS4tIE1vZGVsbyBjb24gbm5ldDwvc3Bhbj4qKg0KDQpgYGB7cn0NCm1kNSA8LSB0cmFpbih0YXJnZXQgfi4gLCBkYXRhID0gZW50cmVuYW1pZW50bywNCiAgICAgICAgICAgICBtZXRob2QgPSAibm5ldCIsIHByZVByb2Nlc3MgPSBjKCJzY2FsZSIsImNlbnRlciIpLA0KICAgICAgICAgICAgIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2QgPSAiY3YiLCBudW1iZXIgPSAxMCkNCiAgICAgICAgICAgICApDQoNCnJlc3VsdGFkb19lbnRyZW5hNSA8LSBwcmVkaWN0KG1kNSxlbnRyZW5hbWllbnRvKQ0KcmVzdWx0YWRvX3BydWViYTUgPC0gcHJlZGljdChtZDUsIHBydWViYSkNCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbiBkZWwgUmVzdWx0YWRvIGRlIEVudHJlbmFtaWVudG8NCm1jcmU1IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYTUsIGVudHJlbmFtaWVudG8kdGFyZ2V0KQ0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuIGRlbCBSZXN1bHRhZG8gZGUgbGEgUHJ1ZWJhDQptY3JwNSA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTUsIHBydWViYSR0YXJnZXQpDQpgYGANCg0KIyAqKjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+Ni4tIE1vZGVsbyBjb24gcmY8L3NwYW4+KioNCg0KYGBge3J9DQptZDYgPC0gdHJhaW4odGFyZ2V0IH4uICwgZGF0YSA9IGVudHJlbmFtaWVudG8sDQogICAgICAgICAgICAgbWV0aG9kID0gInJmIiwgcHJlUHJvY2VzcyA9IGMoInNjYWxlIiwiY2VudGVyIiksDQogICAgICAgICAgICAgdHJDb250cm9sID0gdHJhaW5Db250cm9sKG1ldGhvZCA9ICJjdiIsIG51bWJlciA9IDEwKSwNCiAgICAgICAgICAgICB0dW5lR3JpZCA9IGV4cGFuZC5ncmlkKG10cnkgPSBjKDIsNCw2KSkNCiAgICAgICAgICAgICApDQoNCnJlc3VsdGFkb19lbnRyZW5hNiA8LSBwcmVkaWN0KG1kNixlbnRyZW5hbWllbnRvKQ0KcmVzdWx0YWRvX3BydWViYTYgPC0gcHJlZGljdChtZDYsIHBydWViYSkNCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbiBkZWwgUmVzdWx0YWRvIGRlIEVudHJlbmFtaWVudG8NCm1jcmU2IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYTYsIGVudHJlbmFtaWVudG8kdGFyZ2V0KQ0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuIGRlbCBSZXN1bHRhZG8gZGUgbGEgUHJ1ZWJhDQptY3JwNiA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTYsIHBydWViYSR0YXJnZXQpDQpgYGANCg0KIyAqKjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+UmVzdW1lbiBkZSBSZXN1bHRhZG9zPC9zcGFuPioqDQoNCmBgYHtyfQ0KcmVzdWx0YWRvcyA8LSBkYXRhLmZyYW1lKA0KICAic3ZtTGluZWFyIiA9IGMobWNyZTEkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDEkb3ZlcmFsbFsiQWNjdXJhY3kiXSksDQogICJzdm1SYWRpYWwiID0gYyhtY3JlMiRvdmVyYWxsWyJBY2N1cmFjeSJdLCBtY3JwMiRvdmVyYWxsWyJBY2N1cmFjeSJdKSwNCiAgInN2bVBvbHkiID0gYyhtY3JlMyRvdmVyYWxsWyJBY2N1cmFjeSJdLCBtY3JwMyRvdmVyYWxsWyJBY2N1cmFjeSJdKSwNCiAgInJwYXJ0IiA9IGMobWNyZTQkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDQkb3ZlcmFsbFsiQWNjdXJhY3kiXSksDQogICJubmV0IiA9IGMobWNyZTUkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDUkb3ZlcmFsbFsiQWNjdXJhY3kiXSksDQogICJyZiIgPSBjKG1jcmU2JG92ZXJhbGxbIkFjY3VyYWN5Il0sIG1jcnA2JG92ZXJhbGxbIkFjY3VyYWN5Il0pDQopDQoNCnJvd25hbWVzKHJlc3VsdGFkb3MpIDwtIGMoIlByZWNpc2nDs24gRW50cmVuYW1pZW50byIsICJQcmVjaXNpw7NuIFBydWViYSIpDQoNCnJlc3VsdGFkb3MNCmBgYA0KDQojICoqPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij4gQ29uY2x1c2nDs24gPC9zcGFuPioqDQoNClNlZ8O6biBsb3MgcmVzdWx0YWRvcywgbG9zIG1vZGVsb3Mg4oCccmbigJ0geSDigJxzdm1SYWRpYWzigJ0gbG9ncmFyb24gdW4gMTAwJSBkZSBwcmVjaXNpw7NuIHRhbnRvIGVuIGxvcyBkYXRvcyBkZSBlbnRyZW5hbWllbnRvIGNvbW8gZW4gbG9zIGRlIHBydWViYSwgbG8gcXVlIHN1Z2llcmUgcXVlIGVzdG9zIG1vZGVsb3MgZXN0w6FuIHNvYnJlYWp1c3RhZG9zLiBFbiBjb250cmFzdGUsIGxvcyBtb2RlbG9zIOKAnHN2bUxpbmVhcuKAnSB5IOKAnHN2bVBvbHnigJ0gbXVlc3RyYW4gdW5hIG1lam9yYSBlbiBsYSBwcmVkaWNjacOzbiBkZSBsb3MgZGF0b3MgZGUgcHJ1ZWJhLCBwZXJvIHN1IHByZWNpc2nDs24gZXMgY29uc2lkZXJhYmxlbWVudGUgbWVub3IgZW4gY29tcGFyYWNpw7NuIGNvbiDigJxubmV04oCdLiBFc3RlIMO6bHRpbW8gbW9kZWxvLCBjb24gdW4gOTYlIGRlIHByZWNpc2nDs24gZW4gcHJ1ZWJhcyB5IDk4JSBlbiBlbnRyZW5hbWllbnRvLCBvZnJlY2UgdW5hIGVzdGltYWNpw7NuIG3DoXMgcmVhbGlzdGEu