Cargar librerías necesarias.

library(ggplot2)
library(lattice)
library(caret)
library(DataExplorer)
library(kernlab)
## 
## Adjuntando el paquete: 'kernlab'
## The following object is masked from 'package:ggplot2':
## 
##     alpha
library(randomForest)
## 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
library(nnet)

Cargar la base de datos.

df <- read.csv("C:\\Carpeta de R\\DBs\\heart.csv")

Resumen de la base de datos.

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)

Dividir los datos en conjunto de entrenamiento y prueba.

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

Convertir la variable ‘target’ en un factor.

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

Modelo 1: SVM lineal.

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
mcre1 <- confusionMatrix(resultado_entrenamiento1, entrenamiento$target)
mcrp1 <- confusionMatrix(resultado_prueba1, prueba$target)

Modelo 2: SVM radial.

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
mcre2 <- confusionMatrix(resultado_entrenamiento2, entrenamiento$target)
mcrp2 <- confusionMatrix(resultado_prueba2, prueba$target)

Modelo 3: SVM polinómico.

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
mcre3 <- confusionMatrix(resultado_entrenamiento3, entrenamiento$target)
mcrp3 <- confusionMatrix(resultado_prueba3, prueba$target)

Modelo 4: Árbol de decisión (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
mcre4 <- confusionMatrix(resultado_entrenamiento4, entrenamiento$target)
mcrp4 <- confusionMatrix(resultado_prueba4, prueba$target)

Modelo 5: Red neuronal (nnet).

modelo5 <- train(target ~ ., data=entrenamiento,
                 method="nnet",
                 preProcess=c("scale", "center"),
                 trControl=trainControl(method="cv", number=10))
## # weights:  16
## initial  value 501.608993 
## iter  10 value 303.085280
## iter  20 value 277.738916
## iter  30 value 272.091590
## iter  40 value 271.238055
## iter  50 value 270.564656
## iter  60 value 269.629343
## iter  70 value 269.490466
## iter  80 value 269.467957
## iter  90 value 269.385196
## iter 100 value 269.327539
## final  value 269.327539 
## stopped after 100 iterations
## # weights:  46
## initial  value 522.574867 
## iter  10 value 261.487478
## iter  20 value 223.030376
## iter  30 value 181.751492
## iter  40 value 164.791099
## iter  50 value 155.182052
## iter  60 value 146.208766
## iter  70 value 145.049097
## iter  80 value 144.791929
## iter  90 value 144.789494
## final  value 144.789335 
## converged
## # weights:  76
## initial  value 515.705782 
## iter  10 value 238.097498
## iter  20 value 171.547977
## iter  30 value 128.416301
## iter  40 value 109.536288
## iter  50 value 103.478559
## iter  60 value 96.202672
## iter  70 value 87.745630
## iter  80 value 85.977243
## iter  90 value 84.988532
## iter 100 value 83.950083
## final  value 83.950083 
## stopped after 100 iterations
## # weights:  16
## initial  value 531.174394 
## iter  10 value 313.563438
## iter  20 value 302.962146
## iter  30 value 291.708660
## iter  40 value 285.287134
## iter  50 value 284.651741
## iter  60 value 283.160089
## iter  70 value 276.678631
## iter  80 value 276.070540
## iter  90 value 270.693532
## iter 100 value 270.603041
## final  value 270.603041 
## stopped after 100 iterations
## # weights:  46
## initial  value 490.015192 
## iter  10 value 254.361668
## iter  20 value 230.979633
## iter  30 value 228.258661
## iter  40 value 223.486663
## iter  50 value 214.646694
## iter  60 value 212.281869
## iter  70 value 212.065944
## final  value 212.065895 
## converged
## # weights:  76
## initial  value 560.862977 
## iter  10 value 242.207686
## iter  20 value 201.684943
## iter  30 value 179.253427
## iter  40 value 170.791644
## iter  50 value 169.593790
## iter  60 value 165.898865
## iter  70 value 150.710357
## iter  80 value 134.135979
## iter  90 value 125.095224
## iter 100 value 122.576215
## final  value 122.576215 
## stopped after 100 iterations
## # weights:  16
## initial  value 541.567609 
## iter  10 value 364.939132
## iter  20 value 300.893875
## iter  30 value 277.272464
## iter  40 value 276.348114
## iter  50 value 263.044337
## iter  60 value 256.447442
## iter  70 value 256.196400
## iter  80 value 256.138058
## final  value 256.136420 
## converged
## # weights:  46
## initial  value 485.740742 
## iter  10 value 246.991499
## iter  20 value 188.337422
## iter  30 value 160.040470
## iter  40 value 144.588525
## iter  50 value 140.045363
## iter  60 value 138.965138
## iter  70 value 138.664846
## iter  80 value 138.160641
## iter  90 value 137.895869
## iter 100 value 137.720669
## final  value 137.720669 
## stopped after 100 iterations
## # weights:  76
## initial  value 494.813660 
## iter  10 value 240.353424
## iter  20 value 148.781908
## iter  30 value 99.000581
## iter  40 value 87.433815
## iter  50 value 85.246637
## iter  60 value 82.651624
## iter  70 value 80.449132
## iter  80 value 79.482379
## iter  90 value 79.264913
## iter 100 value 79.139853
## final  value 79.139853 
## stopped after 100 iterations
## # weights:  16
## initial  value 495.761239 
## iter  10 value 262.743205
## iter  20 value 255.589292
## iter  30 value 244.752320
## iter  40 value 244.172038
## iter  50 value 244.166418
## iter  60 value 244.164991
## final  value 244.164722 
## converged
## # weights:  46
## initial  value 549.470350 
## iter  10 value 232.885800
## iter  20 value 182.512277
## iter  30 value 169.197290
## iter  40 value 154.745400
## iter  50 value 141.323782
## iter  60 value 139.565730
## iter  70 value 139.538871
## final  value 139.538516 
## converged
## # weights:  76
## initial  value 573.327113 
## iter  10 value 197.717940
## iter  20 value 112.743469
## iter  30 value 74.105233
## iter  40 value 53.620146
## iter  50 value 49.458499
## iter  60 value 47.822150
## iter  70 value 47.623889
## iter  80 value 47.604862
## iter  90 value 47.596031
## iter 100 value 47.586046
## final  value 47.586046 
## stopped after 100 iterations
## # weights:  16
## initial  value 494.520214 
## iter  10 value 307.466497
## iter  20 value 272.033981
## iter  30 value 270.769478
## iter  40 value 270.049326
## iter  50 value 269.983242
## final  value 269.982362 
## converged
## # weights:  46
## initial  value 523.919817 
## iter  10 value 278.136113
## iter  20 value 264.054922
## iter  30 value 253.136670
## iter  40 value 221.105634
## iter  50 value 209.316345
## iter  60 value 193.542004
## iter  70 value 189.785813
## iter  80 value 181.335717
## iter  90 value 178.765791
## iter 100 value 178.694753
## final  value 178.694753 
## stopped after 100 iterations
## # weights:  76
## initial  value 458.163126 
## iter  10 value 239.738804
## iter  20 value 190.112595
## iter  30 value 157.003826
## iter  40 value 144.671150
## iter  50 value 140.439213
## iter  60 value 137.776009
## iter  70 value 130.061931
## iter  80 value 128.170257
## iter  90 value 128.013517
## iter 100 value 127.961233
## final  value 127.961233 
## stopped after 100 iterations
## # weights:  16
## initial  value 558.127915 
## iter  10 value 328.458226
## iter  20 value 286.635176
## iter  30 value 278.940736
## iter  40 value 272.009299
## iter  50 value 269.142302
## iter  60 value 267.606628
## iter  70 value 267.592332
## iter  80 value 267.587074
## iter  90 value 267.586641
## final  value 267.586624 
## converged
## # weights:  46
## initial  value 578.431238 
## iter  10 value 233.234118
## iter  20 value 201.629784
## iter  30 value 185.850659
## iter  40 value 160.932787
## iter  50 value 154.800125
## iter  60 value 153.941052
## iter  70 value 153.435193
## iter  80 value 152.980896
## iter  90 value 152.581699
## iter 100 value 151.996075
## final  value 151.996075 
## stopped after 100 iterations
## # weights:  76
## initial  value 551.427635 
## iter  10 value 212.817771
## iter  20 value 130.369270
## iter  30 value 108.423394
## iter  40 value 101.183420
## iter  50 value 93.156118
## iter  60 value 92.203352
## iter  70 value 92.060260
## iter  80 value 91.999124
## iter  90 value 91.873651
## iter 100 value 91.561444
## final  value 91.561444 
## stopped after 100 iterations
## # weights:  16
## initial  value 499.717620 
## iter  10 value 305.175224
## iter  20 value 280.639642
## iter  30 value 269.887436
## iter  40 value 267.369359
## iter  50 value 265.618588
## iter  60 value 265.284730
## iter  70 value 265.238428
## iter  80 value 265.086833
## iter  90 value 264.947294
## iter 100 value 264.944085
## final  value 264.944085 
## stopped after 100 iterations
## # weights:  46
## initial  value 561.612701 
## iter  10 value 256.676245
## iter  20 value 189.171312
## iter  30 value 167.674197
## iter  40 value 155.017446
## iter  50 value 144.744988
## iter  60 value 134.109536
## iter  70 value 133.005718
## iter  80 value 133.002112
## iter  90 value 132.962268
## iter 100 value 132.894606
## final  value 132.894606 
## stopped after 100 iterations
## # weights:  76
## initial  value 521.378929 
## iter  10 value 231.913732
## iter  20 value 146.133755
## iter  30 value 101.598923
## iter  40 value 90.261559
## iter  50 value 86.114038
## iter  60 value 84.562705
## iter  70 value 84.316777
## iter  80 value 83.709395
## iter  90 value 83.577937
## iter 100 value 83.479398
## final  value 83.479398 
## stopped after 100 iterations
## # weights:  16
## initial  value 550.592788 
## iter  10 value 283.628272
## iter  20 value 276.008886
## iter  30 value 272.291056
## iter  40 value 271.735169
## iter  50 value 270.876231
## iter  60 value 270.189251
## iter  60 value 270.189249
## iter  60 value 270.189249
## final  value 270.189249 
## converged
## # weights:  46
## initial  value 545.898892 
## iter  10 value 272.238053
## iter  20 value 235.052743
## iter  30 value 209.912873
## iter  40 value 199.279654
## iter  50 value 197.077568
## iter  60 value 196.386769
## iter  70 value 196.256589
## iter  80 value 196.172734
## iter  90 value 196.159338
## final  value 196.159220 
## converged
## # weights:  76
## initial  value 501.713568 
## iter  10 value 236.954878
## iter  20 value 192.909041
## iter  30 value 166.180582
## iter  40 value 149.755980
## iter  50 value 136.923777
## iter  60 value 131.947677
## iter  70 value 130.486909
## iter  80 value 128.228701
## iter  90 value 126.193458
## iter 100 value 126.053806
## final  value 126.053806 
## stopped after 100 iterations
## # weights:  16
## initial  value 519.070143 
## iter  10 value 349.702591
## iter  20 value 332.508332
## iter  30 value 304.832779
## iter  40 value 287.463898
## iter  50 value 277.033129
## iter  60 value 276.058458
## iter  70 value 275.855854
## iter  80 value 275.665236
## iter  90 value 275.661282
## iter 100 value 275.658151
## final  value 275.658151 
## stopped after 100 iterations
## # weights:  46
## initial  value 514.240160 
## iter  10 value 234.974383
## iter  20 value 193.149227
## iter  30 value 174.450760
## iter  40 value 159.540499
## iter  50 value 149.243329
## iter  60 value 146.912170
## iter  70 value 143.659613
## iter  80 value 142.109491
## iter  90 value 141.606538
## iter 100 value 141.095134
## final  value 141.095134 
## stopped after 100 iterations
## # weights:  76
## initial  value 545.282034 
## iter  10 value 207.875500
## iter  20 value 134.309701
## iter  30 value 104.909072
## iter  40 value 78.748709
## iter  50 value 68.492524
## iter  60 value 63.995719
## iter  70 value 63.533258
## iter  80 value 63.117001
## iter  90 value 62.064573
## iter 100 value 61.036596
## final  value 61.036596 
## stopped after 100 iterations
## # weights:  16
## initial  value 508.419251 
## iter  10 value 278.269246
## iter  20 value 255.811002
## iter  30 value 245.202308
## iter  40 value 235.841740
## iter  50 value 235.273145
## iter  60 value 235.197731
## iter  70 value 235.196577
## iter  80 value 235.194069
## iter  90 value 235.186062
## iter 100 value 235.184600
## final  value 235.184600 
## stopped after 100 iterations
## # weights:  46
## initial  value 667.458053 
## iter  10 value 264.359496
## iter  20 value 200.104663
## iter  30 value 167.500939
## iter  40 value 149.822138
## iter  50 value 139.339313
## iter  60 value 136.433400
## iter  70 value 124.430857
## iter  80 value 119.842477
## iter  90 value 119.190039
## iter 100 value 118.860953
## final  value 118.860953 
## stopped after 100 iterations
## # weights:  76
## initial  value 507.148145 
## iter  10 value 242.786954
## iter  20 value 151.321551
## iter  30 value 123.495642
## iter  40 value 109.433714
## iter  50 value 104.684851
## iter  60 value 102.166042
## iter  70 value 101.613127
## iter  80 value 101.505343
## iter  90 value 101.496326
## iter 100 value 101.493958
## final  value 101.493958 
## stopped after 100 iterations
## # weights:  16
## initial  value 532.389387 
## iter  10 value 353.868341
## iter  20 value 275.603309
## iter  30 value 271.944298
## iter  40 value 267.757128
## iter  50 value 267.041263
## iter  60 value 266.546117
## iter  70 value 266.475086
## iter  70 value 266.475083
## iter  70 value 266.475083
## final  value 266.475083 
## converged
## # weights:  46
## initial  value 522.462882 
## iter  10 value 256.434827
## iter  20 value 218.706181
## iter  30 value 211.613251
## iter  40 value 192.399316
## iter  50 value 172.793734
## iter  60 value 168.575534
## iter  70 value 166.867637
## iter  80 value 166.800857
## final  value 166.800816 
## converged
## # weights:  76
## initial  value 518.440362 
## iter  10 value 227.693395
## iter  20 value 182.314629
## iter  30 value 168.257957
## iter  40 value 159.775336
## iter  50 value 154.329105
## iter  60 value 150.865413
## iter  70 value 146.753316
## iter  80 value 144.983921
## iter  90 value 143.158478
## iter 100 value 142.376788
## final  value 142.376788 
## stopped after 100 iterations
## # weights:  16
## initial  value 537.949737 
## iter  10 value 352.037745
## iter  20 value 295.654814
## iter  30 value 286.566682
## iter  40 value 280.409892
## iter  50 value 278.531947
## iter  60 value 273.839553
## iter  70 value 273.697034
## iter  80 value 273.688851
## iter  90 value 273.685812
## iter 100 value 273.683674
## final  value 273.683674 
## stopped after 100 iterations
## # weights:  46
## initial  value 618.006240 
## iter  10 value 284.116794
## iter  20 value 239.147319
## iter  30 value 206.487305
## iter  40 value 180.093008
## iter  50 value 168.156632
## iter  60 value 165.715658
## iter  70 value 164.471156
## iter  80 value 163.482066
## iter  90 value 162.989076
## iter 100 value 162.450097
## final  value 162.450097 
## stopped after 100 iterations
## # weights:  76
## initial  value 561.243753 
## iter  10 value 243.164396
## iter  20 value 161.181030
## iter  30 value 127.094391
## iter  40 value 102.449338
## iter  50 value 91.731751
## iter  60 value 89.376930
## iter  70 value 88.457276
## iter  80 value 87.868953
## iter  90 value 87.485003
## iter 100 value 87.387063
## final  value 87.387063 
## stopped after 100 iterations
## # weights:  16
## initial  value 548.364764 
## iter  10 value 331.113275
## iter  20 value 271.780231
## iter  30 value 260.582785
## iter  40 value 258.095663
## iter  50 value 250.300608
## iter  60 value 233.319191
## final  value 233.192830 
## converged
## # weights:  46
## initial  value 625.997743 
## iter  10 value 259.610999
## iter  20 value 211.051686
## iter  30 value 177.160554
## iter  40 value 161.058387
## iter  50 value 152.615103
## iter  60 value 152.327742
## iter  70 value 152.326413
## final  value 152.326292 
## converged
## # weights:  76
## initial  value 575.392742 
## iter  10 value 212.489967
## iter  20 value 153.875648
## iter  30 value 105.269151
## iter  40 value 93.446827
## iter  50 value 86.100233
## iter  60 value 74.384193
## iter  70 value 67.247274
## iter  80 value 62.649670
## iter  90 value 56.829710
## iter 100 value 51.906432
## final  value 51.906432 
## stopped after 100 iterations
## # weights:  16
## initial  value 546.390766 
## iter  10 value 287.731739
## iter  20 value 276.460393
## iter  30 value 272.567094
## iter  40 value 271.998637
## iter  50 value 271.763684
## final  value 271.737911 
## converged
## # weights:  46
## initial  value 537.656495 
## iter  10 value 239.256594
## iter  20 value 206.573544
## iter  30 value 198.329741
## iter  40 value 188.771717
## iter  50 value 176.918623
## iter  60 value 168.779178
## iter  70 value 166.077115
## iter  80 value 165.972312
## iter  90 value 165.959665
## final  value 165.959586 
## converged
## # weights:  76
## initial  value 631.896899 
## iter  10 value 270.034581
## iter  20 value 216.612174
## iter  30 value 191.020909
## iter  40 value 177.529454
## iter  50 value 171.884915
## iter  60 value 169.474284
## iter  70 value 168.557214
## iter  80 value 168.064472
## iter  90 value 167.396426
## iter 100 value 165.234901
## final  value 165.234901 
## stopped after 100 iterations
## # weights:  16
## initial  value 518.934268 
## iter  10 value 295.265851
## iter  20 value 263.133649
## iter  30 value 258.419928
## iter  40 value 250.126210
## iter  50 value 246.120392
## iter  60 value 244.391969
## iter  70 value 244.264271
## iter  80 value 244.257460
## iter  90 value 244.254647
## iter 100 value 244.254344
## final  value 244.254344 
## stopped after 100 iterations
## # weights:  46
## initial  value 478.753391 
## iter  10 value 271.866491
## iter  20 value 228.085287
## iter  30 value 197.628652
## iter  40 value 176.701806
## iter  50 value 174.130542
## iter  60 value 171.530304
## iter  70 value 170.968224
## iter  80 value 170.869405
## iter  90 value 170.686598
## iter 100 value 170.494102
## final  value 170.494102 
## stopped after 100 iterations
## # weights:  76
## initial  value 586.141179 
## iter  10 value 252.114678
## iter  20 value 186.394151
## iter  30 value 157.575027
## iter  40 value 133.202021
## iter  50 value 115.102382
## iter  60 value 108.100838
## iter  70 value 106.574854
## iter  80 value 105.814555
## iter  90 value 105.303116
## iter 100 value 102.956747
## final  value 102.956747 
## stopped after 100 iterations
## # weights:  16
## initial  value 547.723145 
## iter  10 value 277.870791
## iter  20 value 268.523595
## iter  30 value 267.383603
## iter  40 value 266.924902
## iter  50 value 266.214193
## iter  60 value 265.136303
## iter  70 value 264.978996
## iter  80 value 264.918352
## iter  90 value 264.776059
## iter 100 value 264.714876
## final  value 264.714876 
## stopped after 100 iterations
## # weights:  46
## initial  value 486.170215 
## iter  10 value 224.840397
## iter  20 value 193.701497
## iter  30 value 168.511636
## iter  40 value 154.990536
## iter  50 value 151.483646
## iter  60 value 148.745970
## iter  70 value 146.334627
## iter  80 value 144.407981
## iter  90 value 142.671317
## iter 100 value 142.019934
## final  value 142.019934 
## stopped after 100 iterations
## # weights:  76
## initial  value 561.225487 
## iter  10 value 233.836964
## iter  20 value 137.862589
## iter  30 value 100.707660
## iter  40 value 87.280258
## iter  50 value 82.372126
## iter  60 value 79.965188
## iter  70 value 78.970956
## iter  80 value 78.849107
## iter  90 value 78.833768
## iter 100 value 78.831650
## final  value 78.831650 
## stopped after 100 iterations
## # weights:  16
## initial  value 499.794993 
## iter  10 value 297.618560
## iter  20 value 273.832188
## iter  30 value 268.410128
## iter  40 value 268.347593
## final  value 268.347582 
## converged
## # weights:  46
## initial  value 518.826719 
## iter  10 value 246.808813
## iter  20 value 236.849143
## iter  30 value 200.394083
## iter  40 value 189.123940
## iter  50 value 187.903610
## iter  60 value 187.423673
## iter  70 value 187.161980
## iter  80 value 187.159754
## iter  80 value 187.159753
## iter  80 value 187.159752
## final  value 187.159752 
## converged
## # weights:  76
## initial  value 553.004921 
## iter  10 value 236.855956
## iter  20 value 183.916607
## iter  30 value 165.690450
## iter  40 value 148.804191
## iter  50 value 138.960302
## iter  60 value 135.569243
## iter  70 value 134.309488
## iter  80 value 132.837211
## iter  90 value 132.094023
## iter 100 value 131.978105
## final  value 131.978105 
## stopped after 100 iterations
## # weights:  16
## initial  value 517.537021 
## iter  10 value 261.511034
## iter  20 value 252.936656
## iter  30 value 250.754826
## iter  40 value 243.009847
## iter  50 value 241.101617
## iter  60 value 240.122647
## iter  70 value 239.768211
## iter  80 value 239.757244
## iter  90 value 239.755256
## iter 100 value 239.753417
## final  value 239.753417 
## stopped after 100 iterations
## # weights:  46
## initial  value 562.195937 
## iter  10 value 294.555121
## iter  20 value 243.197868
## iter  30 value 224.058670
## iter  40 value 215.154644
## iter  50 value 201.016621
## iter  60 value 191.879932
## iter  70 value 182.898140
## iter  80 value 181.076767
## iter  90 value 180.952181
## iter 100 value 180.488575
## final  value 180.488575 
## stopped after 100 iterations
## # weights:  76
## initial  value 535.988042 
## iter  10 value 198.997262
## iter  20 value 127.844150
## iter  30 value 93.896868
## iter  40 value 73.722722
## iter  50 value 66.719004
## iter  60 value 62.970285
## iter  70 value 59.314578
## iter  80 value 58.705962
## iter  90 value 58.438658
## iter 100 value 58.315681
## final  value 58.315681 
## stopped after 100 iterations
## # weights:  16
## initial  value 523.919988 
## iter  10 value 351.344657
## iter  20 value 269.278258
## iter  30 value 267.724626
## iter  40 value 267.097790
## iter  50 value 266.949508
## iter  60 value 266.586505
## iter  70 value 266.478816
## iter  80 value 266.469723
## iter  90 value 266.439708
## iter 100 value 266.382949
## final  value 266.382949 
## stopped after 100 iterations
## # weights:  46
## initial  value 530.848696 
## iter  10 value 262.219044
## iter  20 value 214.659376
## iter  30 value 182.470731
## iter  40 value 158.313032
## iter  50 value 124.892579
## iter  60 value 107.816408
## iter  70 value 105.871139
## iter  80 value 105.516487
## iter  90 value 105.425752
## iter 100 value 105.392620
## final  value 105.392620 
## stopped after 100 iterations
## # weights:  76
## initial  value 572.283358 
## iter  10 value 246.627413
## iter  20 value 196.517003
## iter  30 value 104.880863
## iter  40 value 81.237477
## iter  50 value 76.907629
## iter  60 value 74.481730
## iter  70 value 72.031626
## iter  80 value 65.753755
## iter  90 value 65.064301
## iter 100 value 65.003109
## final  value 65.003109 
## stopped after 100 iterations
## # weights:  16
## initial  value 523.788681 
## iter  10 value 288.412022
## iter  20 value 275.024141
## iter  30 value 273.266281
## final  value 273.264648 
## converged
## # weights:  46
## initial  value 519.927750 
## iter  10 value 280.643271
## iter  20 value 248.835772
## iter  30 value 222.731065
## iter  40 value 217.707456
## iter  50 value 205.272451
## iter  60 value 200.380015
## iter  70 value 197.195682
## iter  80 value 196.803246
## iter  90 value 196.795646
## final  value 196.795607 
## converged
## # weights:  76
## initial  value 514.204376 
## iter  10 value 247.422184
## iter  20 value 196.162391
## iter  30 value 158.978933
## iter  40 value 145.385683
## iter  50 value 139.489708
## iter  60 value 137.068384
## iter  70 value 135.094972
## iter  80 value 134.633127
## iter  90 value 134.248488
## iter 100 value 133.433726
## final  value 133.433726 
## stopped after 100 iterations
## # weights:  16
## initial  value 523.018837 
## iter  10 value 328.439989
## iter  20 value 275.692345
## iter  30 value 269.276793
## iter  40 value 268.434512
## iter  50 value 266.784920
## iter  60 value 260.294871
## iter  70 value 255.547312
## iter  80 value 249.739257
## iter  90 value 249.065001
## iter 100 value 248.595532
## final  value 248.595532 
## stopped after 100 iterations
## # weights:  46
## initial  value 562.711421 
## iter  10 value 249.121632
## iter  20 value 208.114792
## iter  30 value 185.389052
## iter  40 value 172.443420
## iter  50 value 157.307223
## iter  60 value 156.598485
## iter  70 value 156.337113
## iter  80 value 156.169520
## iter  90 value 155.928760
## iter 100 value 155.844542
## final  value 155.844542 
## stopped after 100 iterations
## # weights:  76
## initial  value 480.930030 
## iter  10 value 237.567284
## iter  20 value 154.299590
## iter  30 value 119.811674
## iter  40 value 102.237661
## iter  50 value 99.108931
## iter  60 value 98.836572
## iter  70 value 98.713650
## iter  80 value 98.662764
## iter  90 value 98.575091
## iter 100 value 98.522810
## final  value 98.522810 
## stopped after 100 iterations
## # weights:  16
## initial  value 548.601740 
## iter  10 value 335.559247
## iter  20 value 282.085469
## iter  30 value 279.100390
## iter  40 value 278.883847
## iter  50 value 277.968075
## iter  60 value 276.448429
## iter  70 value 276.096736
## iter  80 value 276.066943
## iter  90 value 275.828427
## iter 100 value 275.737719
## final  value 275.737719 
## stopped after 100 iterations
## # weights:  46
## initial  value 502.546361 
## iter  10 value 268.212459
## iter  20 value 221.323931
## iter  30 value 193.439436
## iter  40 value 186.862433
## iter  50 value 180.978607
## iter  60 value 175.852463
## iter  70 value 175.690710
## final  value 175.690397 
## converged
## # weights:  76
## initial  value 582.707803 
## iter  10 value 266.889034
## iter  20 value 187.334196
## iter  30 value 124.428001
## iter  40 value 96.210153
## iter  50 value 86.419860
## iter  60 value 83.635620
## iter  70 value 82.097752
## iter  80 value 81.433832
## iter  90 value 81.070809
## iter 100 value 80.944839
## final  value 80.944839 
## stopped after 100 iterations
## # weights:  16
## initial  value 514.084721 
## iter  10 value 365.451803
## iter  20 value 283.401442
## iter  30 value 280.218758
## iter  40 value 280.193282
## final  value 280.193238 
## converged
## # weights:  46
## initial  value 539.264469 
## iter  10 value 291.860084
## iter  20 value 253.814758
## iter  30 value 231.480194
## iter  40 value 225.959467
## iter  50 value 220.846829
## iter  60 value 212.093395
## iter  70 value 207.059926
## iter  80 value 206.819349
## iter  90 value 205.284331
## iter 100 value 204.054162
## final  value 204.054162 
## stopped after 100 iterations
## # weights:  76
## initial  value 489.361337 
## iter  10 value 237.736287
## iter  20 value 197.194673
## iter  30 value 180.001210
## iter  40 value 162.651827
## iter  50 value 141.310462
## iter  60 value 133.848915
## iter  70 value 131.194976
## iter  80 value 127.235640
## iter  90 value 125.578180
## iter 100 value 125.350777
## final  value 125.350777 
## stopped after 100 iterations
## # weights:  16
## initial  value 518.246253 
## iter  10 value 313.361249
## iter  20 value 311.198385
## iter  30 value 301.499581
## iter  40 value 289.664891
## iter  50 value 284.817532
## iter  60 value 284.613326
## iter  70 value 284.603610
## iter  70 value 284.603610
## final  value 284.603610 
## converged
## # weights:  46
## initial  value 563.000810 
## iter  10 value 250.797083
## iter  20 value 181.876400
## iter  30 value 152.505346
## iter  40 value 136.981640
## iter  50 value 128.895413
## iter  60 value 121.583731
## iter  70 value 120.252337
## iter  80 value 114.729776
## iter  90 value 111.494677
## iter 100 value 110.288640
## final  value 110.288640 
## stopped after 100 iterations
## # weights:  76
## initial  value 538.891637 
## iter  10 value 227.115987
## iter  20 value 134.320227
## iter  30 value 98.211881
## iter  40 value 84.544035
## iter  50 value 76.193597
## iter  60 value 70.798072
## iter  70 value 67.118037
## iter  80 value 65.128391
## iter  90 value 62.693899
## iter 100 value 61.328871
## final  value 61.328871 
## stopped after 100 iterations
## # weights:  16
## initial  value 504.556441 
## iter  10 value 335.405686
## iter  20 value 258.595702
## iter  30 value 249.392420
## iter  40 value 242.803492
## iter  50 value 240.626619
## iter  60 value 239.536576
## iter  70 value 238.813383
## iter  80 value 238.769494
## iter  90 value 238.759788
## iter 100 value 238.756445
## final  value 238.756445 
## stopped after 100 iterations
## # weights:  46
## initial  value 633.956374 
## iter  10 value 231.116788
## iter  20 value 164.915094
## iter  30 value 136.105833
## iter  40 value 124.213013
## iter  50 value 112.857306
## iter  60 value 111.058617
## iter  70 value 111.032545
## iter  80 value 111.031827
## iter  80 value 111.031825
## iter  80 value 111.031825
## final  value 111.031825 
## converged
## # weights:  76
## initial  value 559.142983 
## iter  10 value 242.710702
## iter  20 value 196.433817
## iter  30 value 161.623756
## iter  40 value 132.858058
## iter  50 value 117.075351
## iter  60 value 111.009350
## iter  70 value 106.345791
## iter  80 value 102.549270
## iter  90 value 99.320098
## iter 100 value 97.295130
## final  value 97.295130 
## stopped after 100 iterations
## # weights:  16
## initial  value 544.580369 
## iter  10 value 273.296518
## iter  20 value 264.077639
## final  value 263.113587 
## converged
## # weights:  46
## initial  value 523.677517 
## iter  10 value 273.659617
## iter  20 value 230.387658
## iter  30 value 200.632895
## iter  40 value 193.757968
## iter  50 value 192.773264
## iter  60 value 192.743761
## final  value 192.743226 
## converged
## # weights:  76
## initial  value 569.418018 
## iter  10 value 248.071004
## iter  20 value 203.029706
## iter  30 value 181.451649
## iter  40 value 169.946339
## iter  50 value 163.182653
## iter  60 value 160.676763
## iter  70 value 159.595647
## iter  80 value 156.538324
## iter  90 value 152.711105
## iter 100 value 151.698206
## final  value 151.698206 
## stopped after 100 iterations
## # weights:  16
## initial  value 498.690624 
## iter  10 value 318.273208
## iter  20 value 271.108243
## iter  30 value 263.076172
## iter  40 value 262.397643
## iter  50 value 262.327191
## iter  60 value 262.071015
## iter  70 value 262.009289
## iter  80 value 262.009028
## iter  90 value 262.000658
## final  value 262.000650 
## converged
## # weights:  46
## initial  value 524.723394 
## iter  10 value 264.264776
## iter  20 value 216.490973
## iter  30 value 202.711733
## iter  40 value 183.975125
## iter  50 value 172.943086
## iter  60 value 172.349378
## iter  70 value 172.223302
## iter  80 value 172.114440
## iter  90 value 171.315112
## iter 100 value 171.247567
## final  value 171.247567 
## stopped after 100 iterations
## # weights:  76
## initial  value 597.243127 
## iter  10 value 223.877466
## iter  20 value 142.690153
## iter  30 value 103.163597
## iter  40 value 97.207584
## iter  50 value 93.667068
## iter  60 value 92.363944
## iter  70 value 92.063823
## iter  80 value 91.954566
## iter  90 value 91.888477
## iter 100 value 91.815104
## final  value 91.815104 
## stopped after 100 iterations
## # weights:  16
## initial  value 521.206815 
## iter  10 value 440.124809
## iter  20 value 350.856317
## iter  30 value 277.027921
## iter  40 value 271.577789
## iter  50 value 270.506956
## iter  60 value 269.967641
## iter  70 value 269.841408
## iter  80 value 269.834155
## iter  90 value 269.802172
## iter 100 value 269.763849
## final  value 269.763849 
## stopped after 100 iterations
## # weights:  46
## initial  value 594.154779 
## iter  10 value 250.404211
## iter  20 value 217.172871
## iter  30 value 165.101773
## iter  40 value 149.192675
## iter  50 value 140.281429
## iter  60 value 138.592852
## iter  70 value 138.580254
## final  value 138.580240 
## converged
## # weights:  76
## initial  value 592.135411 
## iter  10 value 246.757858
## iter  20 value 163.005045
## iter  30 value 116.802392
## iter  40 value 105.264614
## iter  50 value 92.430188
## iter  60 value 87.557084
## iter  70 value 85.362888
## iter  80 value 84.645166
## iter  90 value 84.623078
## iter 100 value 84.614555
## final  value 84.614555 
## stopped after 100 iterations
## # weights:  16
## initial  value 490.705547 
## iter  10 value 319.703124
## iter  20 value 279.511157
## iter  30 value 271.560912
## final  value 271.554651 
## converged
## # weights:  46
## initial  value 491.159737 
## iter  10 value 256.748913
## iter  20 value 224.958815
## iter  30 value 205.055537
## iter  40 value 196.085087
## iter  50 value 194.992135
## iter  60 value 194.890753
## iter  70 value 194.880866
## final  value 194.880851 
## converged
## # weights:  76
## initial  value 568.265619 
## iter  10 value 232.001679
## iter  20 value 178.612541
## iter  30 value 156.505896
## iter  40 value 147.063278
## iter  50 value 142.379276
## iter  60 value 137.982141
## iter  70 value 133.476190
## iter  80 value 125.775175
## iter  90 value 119.958724
## iter 100 value 116.443264
## final  value 116.443264 
## stopped after 100 iterations
## # weights:  16
## initial  value 515.685801 
## iter  10 value 281.082819
## iter  20 value 272.253756
## iter  30 value 262.709792
## iter  40 value 256.726358
## iter  50 value 255.490960
## iter  60 value 250.199411
## iter  70 value 250.081791
## iter  80 value 250.080401
## iter  90 value 250.077970
## iter 100 value 250.045004
## final  value 250.045004 
## stopped after 100 iterations
## # weights:  46
## initial  value 552.303115 
## iter  10 value 291.495797
## iter  20 value 207.488503
## iter  30 value 190.457529
## iter  40 value 178.988995
## iter  50 value 175.377290
## iter  60 value 173.576882
## iter  70 value 172.736454
## iter  80 value 171.768852
## iter  90 value 171.138861
## iter 100 value 170.875667
## final  value 170.875667 
## stopped after 100 iterations
## # weights:  76
## initial  value 501.305291 
## iter  10 value 213.141130
## iter  20 value 156.703550
## iter  30 value 127.907908
## iter  40 value 113.607249
## iter  50 value 102.843034
## iter  60 value 101.102221
## iter  70 value 100.928528
## iter  80 value 100.841160
## iter  90 value 100.758529
## iter 100 value 100.669049
## final  value 100.669049 
## stopped after 100 iterations
## # weights:  76
## initial  value 596.581003 
## iter  10 value 250.647011
## iter  20 value 163.416651
## iter  30 value 112.173249
## iter  40 value 81.871766
## iter  50 value 71.970226
## iter  60 value 68.708798
## iter  70 value 68.176001
## iter  80 value 68.150074
## iter  90 value 68.145207
## iter 100 value 68.144025
## final  value 68.144025 
## stopped after 100 iterations
resultado_entrenamiento5 <- predict(modelo5, entrenamiento)
resultado_prueba5 <- predict(modelo5, prueba)

# Matriz de confusión
mcre5 <- confusionMatrix(resultado_entrenamiento5, entrenamiento$target)
mcrp5 <- confusionMatrix(resultado_prueba5, prueba$target)

Modelo 6: Random Forest.

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

resultado_entrenamiento6 <- predict(modelo6, entrenamiento)
resultado_prueba6 <- predict(modelo6, prueba)

# Matriz de Confusión
mcre6 <- confusionMatrix(resultado_entrenamiento6, entrenamiento$target)
mcrp6 <- confusionMatrix(resultado_prueba6, prueba$target)

Comparación 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 de Entrenamiento", "Precisión de Prueba")
resultados
##                            svmLinear svmRadial   svmPoly     rpart      nnet
## Precisión de Entrenamiento 0.8426829         1 0.8426829 0.9012195 0.9719512
## Precisión de Prueba        0.8634146         1 0.8634146 0.8634146 0.9609756
##                                   rf
## Precisión de Entrenamiento 1.0000000
## Precisión de Prueba        0.9853659

Conclusión

El modelo con el método de bosques aleatorios (rf) presenta un sobreajuste, ya que tiene una alta precisión en entrenamiento pero baja en prueba.
Acorde al resumen de resultados, el modelo mejor evaluado es el de Máquina de Vectores de Soporte Lineal.

LS0tDQp0aXRsZTogIkNBUkVUIOKAkyBFbmZlcm1lZGFkIENhcmRpYWNhIg0KYXV0aG9yOiAiRXN0ZWJhbiBMb3phbm8gTWFsZG9uYWRvIg0KZGF0ZTogIjIwMjQtMDgtMjIiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KICAgIHRoZW1lOiB1bml0ZWQNCi0tLQ0KIVtdKEM6L0NhcnBldGEgZGUgUi9JbWdzL2NvcmFzb2guZ2lmKQ0KDQojIENhcmdhciBsaWJyZXLDrWFzIG5lY2VzYXJpYXMuDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkobGF0dGljZSkNCmxpYnJhcnkoY2FyZXQpDQpsaWJyYXJ5KERhdGFFeHBsb3JlcikNCmxpYnJhcnkoa2VybmxhYikNCmxpYnJhcnkocmFuZG9tRm9yZXN0KQ0KbGlicmFyeShubmV0KQ0KDQpgYGANCg0KIyBDYXJnYXIgbGEgYmFzZSBkZSBkYXRvcy4NCmBgYHtyfQ0KZGYgPC0gcmVhZC5jc3YoIkM6XFxDYXJwZXRhIGRlIFJcXERCc1xcaGVhcnQuY3N2IikNCmBgYA0KDQojIFJlc3VtZW4gZGUgbGEgYmFzZSBkZSBkYXRvcy4NCmBgYHtyfQ0Kc3VtbWFyeShkZikNCnN0cihkZikNCnBsb3RfbWlzc2luZyhkZikNCmBgYA0KDQojIERpdmlkaXIgbG9zIGRhdG9zIGVuIGNvbmp1bnRvIGRlIGVudHJlbmFtaWVudG8geSBwcnVlYmEuDQpgYGB7cn0NCnNldC5zZWVkKDEyMykNCnJlbmdsb25lc19lbnRyZW5hbWllbnRvIDwtIGNyZWF0ZURhdGFQYXJ0aXRpb24oZGYkdGFyZ2V0LCBwPTAuOCwgbGlzdD1GQUxTRSkNCmVudHJlbmFtaWVudG8gPC0gZGZbcmVuZ2xvbmVzX2VudHJlbmFtaWVudG8sIF0NCnBydWViYSA8LSBkZlstcmVuZ2xvbmVzX2VudHJlbmFtaWVudG8sIF0NCg0KYGBgDQoNCiMgQ29udmVydGlyIGxhIHZhcmlhYmxlICd0YXJnZXQnIGVuIHVuIGZhY3Rvci4NCmBgYHtyfQ0KZGYkdGFyZ2V0IDwtIGFzLmZhY3RvcihkZiR0YXJnZXQpDQplbnRyZW5hbWllbnRvJHRhcmdldCA8LSBhcy5mYWN0b3IoZW50cmVuYW1pZW50byR0YXJnZXQpDQpwcnVlYmEkdGFyZ2V0IDwtIGFzLmZhY3RvcihwcnVlYmEkdGFyZ2V0KQ0KDQpgYGANCg0KIyBNb2RlbG8gMTogU1ZNIGxpbmVhbC4NCmBgYHtyfQ0KbW9kZWxvMSA8LSB0cmFpbih0YXJnZXQgfiAuLCBkYXRhPWVudHJlbmFtaWVudG8sIA0KICAgICAgICAgICAgICAgICBtZXRob2QgPSAic3ZtTGluZWFyIiwNCiAgICAgICAgICAgICAgICAgcHJlUHJvY2Vzcz1jKCJzY2FsZSIsICJjZW50ZXIiKSwNCiAgICAgICAgICAgICAgICAgdHJDb250cm9sID0gdHJhaW5Db250cm9sKG1ldGhvZD0iY3YiLCBudW1iZXI9MTApLCANCiAgICAgICAgICAgICAgICAgdHVuZUdyaWQgPSBkYXRhLmZyYW1lKEM9MSkpDQoNCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvMSA8LSBwcmVkaWN0KG1vZGVsbzEsIGVudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhMSA8LSBwcmVkaWN0KG1vZGVsbzEsIHBydWViYSkNCg0KIyBNYXRyaXogZGUgY29uZnVzacOzbg0KbWNyZTEgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvMSwgZW50cmVuYW1pZW50byR0YXJnZXQpDQptY3JwMSA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTEsIHBydWViYSR0YXJnZXQpDQoNCmBgYA0KDQojIE1vZGVsbyAyOiBTVk0gcmFkaWFsLg0KYGBge3J9DQptb2RlbG8yIDwtIHRyYWluKHRhcmdldCB+IC4sIGRhdGE9ZW50cmVuYW1pZW50bywgDQogICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJzdm1SYWRpYWwiLA0KICAgICAgICAgICAgICAgICBwcmVQcm9jZXNzPWMoInNjYWxlIiwgImNlbnRlciIpLA0KICAgICAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kPSJjdiIsIG51bWJlcj0xMCksIA0KICAgICAgICAgICAgICAgICB0dW5lR3JpZCA9IGRhdGEuZnJhbWUoc2lnbWE9MSwgQz0xKSkNCg0KcmVzdWx0YWRvX2VudHJlbmFtaWVudG8yIDwtIHByZWRpY3QobW9kZWxvMiwgZW50cmVuYW1pZW50bykNCnJlc3VsdGFkb19wcnVlYmEyIDwtIHByZWRpY3QobW9kZWxvMiwgcHJ1ZWJhKQ0KDQojIE1hdHJpeiBkZSBjb25mdXNpw7NuDQptY3JlMiA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG8yLCBlbnRyZW5hbWllbnRvJHRhcmdldCkNCm1jcnAyIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhMiwgcHJ1ZWJhJHRhcmdldCkNCmBgYA0KDQojIE1vZGVsbyAzOiBTVk0gcG9saW7Ds21pY28uDQpgYGB7cn0NCm1vZGVsbzMgPC0gdHJhaW4odGFyZ2V0IH4gLiwgZGF0YT1lbnRyZW5hbWllbnRvLCANCiAgICAgICAgICAgICAgICAgbWV0aG9kID0gInN2bVBvbHkiLA0KICAgICAgICAgICAgICAgICBwcmVQcm9jZXNzPWMoInNjYWxlIiwgImNlbnRlciIpLA0KICAgICAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kPSJjdiIsIG51bWJlcj0xMCksIA0KICAgICAgICAgICAgICAgICB0dW5lR3JpZCA9IGRhdGEuZnJhbWUoZGVncmVlPTEsIHNjYWxlPTEsIEM9MSkpDQoNCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvMyA8LSBwcmVkaWN0KG1vZGVsbzMsIGVudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhMyA8LSBwcmVkaWN0KG1vZGVsbzMsIHBydWViYSkNCg0KIyBNYXRyaXogZGUgY29uZnVzacOzbg0KbWNyZTMgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvMywgZW50cmVuYW1pZW50byR0YXJnZXQpDQptY3JwMyA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTMsIHBydWViYSR0YXJnZXQpDQoNCmBgYA0KDQojIE1vZGVsbyA0OiDDgXJib2wgZGUgZGVjaXNpw7NuIChycGFydCkuDQpgYGB7cn0NCm1vZGVsbzQgPC0gdHJhaW4odGFyZ2V0IH4gLiwgZGF0YT1lbnRyZW5hbWllbnRvLCANCiAgICAgICAgICAgICAgICAgbWV0aG9kID0gInJwYXJ0IiwNCiAgICAgICAgICAgICAgICAgcHJlUHJvY2Vzcz1jKCJzY2FsZSIsICJjZW50ZXIiKSwNCiAgICAgICAgICAgICAgICAgdHJDb250cm9sID0gdHJhaW5Db250cm9sKG1ldGhvZD0iY3YiLCBudW1iZXI9MTApLCANCiAgICAgICAgICAgICAgICAgdHVuZUxlbmd0aCA9IDEwKQ0KDQpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzQgPC0gcHJlZGljdChtb2RlbG80LCBlbnRyZW5hbWllbnRvKQ0KcmVzdWx0YWRvX3BydWViYTQgPC0gcHJlZGljdChtb2RlbG80LCBwcnVlYmEpDQoNCiMgTWF0cml6IGRlIGNvbmZ1c2nDs24NCm1jcmU0IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzQsIGVudHJlbmFtaWVudG8kdGFyZ2V0KQ0KbWNycDQgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmE0LCBwcnVlYmEkdGFyZ2V0KQ0KYGBgDQoNCiMgTW9kZWxvIDU6IFJlZCBuZXVyb25hbCAobm5ldCkuDQpgYGB7cn0NCm1vZGVsbzUgPC0gdHJhaW4odGFyZ2V0IH4gLiwgZGF0YT1lbnRyZW5hbWllbnRvLA0KICAgICAgICAgICAgICAgICBtZXRob2Q9Im5uZXQiLA0KICAgICAgICAgICAgICAgICBwcmVQcm9jZXNzPWMoInNjYWxlIiwgImNlbnRlciIpLA0KICAgICAgICAgICAgICAgICB0ckNvbnRyb2w9dHJhaW5Db250cm9sKG1ldGhvZD0iY3YiLCBudW1iZXI9MTApKQ0KDQpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzUgPC0gcHJlZGljdChtb2RlbG81LCBlbnRyZW5hbWllbnRvKQ0KcmVzdWx0YWRvX3BydWViYTUgPC0gcHJlZGljdChtb2RlbG81LCBwcnVlYmEpDQoNCiMgTWF0cml6IGRlIGNvbmZ1c2nDs24NCm1jcmU1IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzUsIGVudHJlbmFtaWVudG8kdGFyZ2V0KQ0KbWNycDUgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmE1LCBwcnVlYmEkdGFyZ2V0KQ0KDQpgYGANCg0KIyBNb2RlbG8gNjogUmFuZG9tIEZvcmVzdC4NCmBgYHtyfQ0KbW9kZWxvNiA8LSB0cmFpbih0YXJnZXQgfiAuLCBkYXRhID0gZW50cmVuYW1pZW50bywNCiAgICAgICAgICAgICAgICAgbWV0aG9kID0gInJmIiwNCiAgICAgICAgICAgICAgICAgcHJlUHJvY2VzcyA9IGMoInNjYWxlIiwgImNlbnRlciIpLA0KICAgICAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kID0gImN2IiwgbnVtYmVyID0gMTApKQ0KDQpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzYgPC0gcHJlZGljdChtb2RlbG82LCBlbnRyZW5hbWllbnRvKQ0KcmVzdWx0YWRvX3BydWViYTYgPC0gcHJlZGljdChtb2RlbG82LCBwcnVlYmEpDQoNCiMgTWF0cml6IGRlIENvbmZ1c2nDs24NCm1jcmU2IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzYsIGVudHJlbmFtaWVudG8kdGFyZ2V0KQ0KbWNycDYgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmE2LCBwcnVlYmEkdGFyZ2V0KQ0KDQpgYGANCg0KIyBDb21wYXJhY2nDs24gZGUgcmVzdWx0YWRvcy4NCmBgYHtyfQ0KcmVzdWx0YWRvcyA8LSBkYXRhLmZyYW1lKA0KICAic3ZtTGluZWFyIiA9IGMobWNyZTEkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDEkb3ZlcmFsbFsiQWNjdXJhY3kiXSksDQogICJzdm1SYWRpYWwiID0gYyhtY3JlMiRvdmVyYWxsWyJBY2N1cmFjeSJdLCBtY3JwMiRvdmVyYWxsWyJBY2N1cmFjeSJdKSwNCiAgInN2bVBvbHkiID0gYyhtY3JlMyRvdmVyYWxsWyJBY2N1cmFjeSJdLCBtY3JwMyRvdmVyYWxsWyJBY2N1cmFjeSJdKSwNCiAgInJwYXJ0IiA9IGMobWNyZTQkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDQkb3ZlcmFsbFsiQWNjdXJhY3kiXSksDQogICJubmV0IiA9IGMobWNyZTUkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDUkb3ZlcmFsbFsiQWNjdXJhY3kiXSksDQogICJyZiIgPSBjKG1jcmU2JG92ZXJhbGxbIkFjY3VyYWN5Il0sIG1jcnA2JG92ZXJhbGxbIkFjY3VyYWN5Il0pDQopDQoNCnJvd25hbWVzKHJlc3VsdGFkb3MpIDwtIGMoIlByZWNpc2nDs24gZGUgRW50cmVuYW1pZW50byIsICJQcmVjaXNpw7NuIGRlIFBydWViYSIpDQpyZXN1bHRhZG9zDQpgYGANCg0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHZpb2xldDsiPkNvbmNsdXNpw7NuPC9zcGFuPg0KDQpFbCBtb2RlbG8gY29uIGVsIG3DqXRvZG8gZGUgYm9zcXVlcyBhbGVhdG9yaW9zIChyZikgcHJlc2VudGEgdW4gc29icmVhanVzdGUsIHlhIHF1ZSB0aWVuZSB1bmEgYWx0YSBwcmVjaXNpw7NuIGVuIGVudHJlbmFtaWVudG8gcGVybyBiYWphIGVuIHBydWViYS4gPGJyPg0KQWNvcmRlIGFsIHJlc3VtZW4gZGUgcmVzdWx0YWRvcywgZWwgbW9kZWxvIG1lam9yIGV2YWx1YWRvIGVzIGVsIGRlICoqTcOhcXVpbmEgZGUgVmVjdG9yZXMgZGUgU29wb3J0ZSBMaW5lYWwqKi4NCg==