# Cargar librerías necesarias
library(ggplot2)
library(lattice)
library(caret)
library(DataExplorer)
library(kernlab)
## 
## Attaching package: '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.
## 
## Attaching package: 'randomForest'
## The following object is masked from 'package:ggplot2':
## 
##     margin
library(nnet)  # para redes neuronales
# Cargar la base de datos
df <- read.csv("/Users/josemarentes/Downloads/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 Linear
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 Poly
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.745627
## iter  80 value 85.977242
## iter  90 value 84.988533
## iter 100 value 83.950078
## final  value 83.950078 
## 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.160084
## iter  70 value 276.679240
## iter  80 value 276.070883
## iter  90 value 270.703373
## iter 100 value 270.603052
## final  value 270.603052 
## 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.651625
## iter  70 value 80.449131
## iter  80 value 79.482380
## iter  90 value 79.264914
## 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.316344
## iter  60 value 193.542005
## iter  70 value 189.785770
## iter  80 value 181.510961
## iter  90 value 178.760413
## iter 100 value 178.693098
## final  value 178.693098 
## 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.013518
## 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.581697
## iter 100 value 151.996074
## final  value 151.996074 
## 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.944089
## final  value 264.944089 
## 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.709396
## iter  90 value 83.577938
## iter 100 value 83.479405
## final  value 83.479405 
## 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.228697
## iter  90 value 126.193457
## 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.832800
## iter  40 value 287.463872
## iter  50 value 277.033011
## iter  60 value 276.058417
## iter  70 value 275.855813
## iter  80 value 275.665230
## iter  90 value 275.661281
## iter 100 value 275.658150
## final  value 275.658150 
## 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.659612
## iter  80 value 142.109491
## iter  90 value 141.607893
## iter 100 value 141.088518
## final  value 141.088518 
## 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.748708
## iter  50 value 68.492533
## iter  60 value 63.995694
## iter  70 value 63.533272
## iter  80 value 63.116979
## iter  90 value 61.992021
## iter 100 value 56.250652
## final  value 56.250652 
## 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.339312
## iter  60 value 136.433386
## iter  70 value 124.430812
## iter  80 value 119.842468
## iter  90 value 119.190078
## iter 100 value 118.860940
## final  value 118.860940 
## 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.166038
## 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.654815
## iter  30 value 286.567127
## iter  40 value 280.412454
## iter  50 value 278.550056
## iter  60 value 273.841332
## iter  70 value 273.701616
## iter  80 value 273.689580
## iter  90 value 273.686203
## iter 100 value 273.683959
## final  value 273.683959 
## 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.449345
## iter  50 value 91.731782
## iter  60 value 89.376926
## iter  70 value 88.456335
## iter  80 value 87.878110
## iter  90 value 87.497858
## iter 100 value 87.391327
## final  value 87.391327 
## 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.319192
## 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.649669
## iter  90 value 56.829718
## iter 100 value 51.906502
## final  value 51.906502 
## 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.779177
## 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.686597
## 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.100831
## iter  70 value 106.574861
## iter  80 value 105.814535
## iter  90 value 105.305918
## iter 100 value 103.167733
## final  value 103.167733 
## 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.745973
## iter  70 value 146.334545
## iter  80 value 144.549042
## iter  90 value 142.692247
## iter 100 value 141.964676
## final  value 141.964676 
## 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.898149
## iter  80 value 181.076767
## iter  90 value 180.952188
## iter 100 value 180.488595
## final  value 180.488595 
## 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.314579
## iter  80 value 58.705963
## iter  90 value 58.438658
## iter 100 value 58.315680
## final  value 58.315680 
## 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.031625
## iter  80 value 65.753736
## iter  90 value 65.064273
## iter 100 value 65.003113
## final  value 65.003113 
## 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.433725
## final  value 133.433725 
## 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.065000
## iter 100 value 248.595534
## final  value 248.595534 
## 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.419858
## iter  60 value 83.635619
## iter  70 value 82.097751
## iter  80 value 81.433830
## iter  90 value 81.070809
## iter 100 value 80.944838
## final  value 80.944838 
## 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.059927
## iter  80 value 206.819349
## iter  90 value 205.284540
## iter 100 value 204.058261
## final  value 204.058261 
## 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.667056
## iter  50 value 284.817472
## iter  60 value 284.613317
## iter  70 value 284.603602
## iter  80 value 284.599077
## iter  90 value 282.683555
## iter 100 value 278.388700
## final  value 278.388700 
## stopped after 100 iterations
## # 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.729785
## iter  90 value 111.494671
## iter 100 value 110.289018
## final  value 110.289018 
## 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.595701
## iter  30 value 249.392421
## iter  40 value 242.803493
## iter  50 value 240.626612
## iter  60 value 239.536571
## iter  70 value 238.813379
## iter  80 value 238.769494
## iter  90 value 238.759786
## iter 100 value 238.756444
## final  value 238.756444 
## 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.009343
## iter  70 value 106.346695
## iter  80 value 102.548223
## iter  90 value 99.186224
## iter 100 value 96.110727
## final  value 96.110727 
## 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.114438
## 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.506955
## iter  60 value 269.967641
## iter  70 value 269.841401
## iter  80 value 269.834165
## iter  90 value 269.801854
## iter 100 value 269.762714
## final  value 269.762714 
## 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.557087
## iter  70 value 85.362889
## iter  80 value 84.645176
## iter  90 value 84.623086
## iter 100 value 84.614561
## final  value 84.614561 
## 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.843035
## 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
LS0tCnRpdGxlOiAiSGVhcnQiCmF1dGhvcjogIkpvc2UgQW5nZWwgTWFyZW50ZXMiCmRhdGU6ICIyMDI0LTA4LTIxIgpvdXRwdXQ6IAogaHRtbF9kb2N1bWVudDoKICAgIHRvYzogVFJVRQogICAgdG9jX2Zsb2F0OiBUUlVFCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFCiAgICB0aGVtZTogY2VydWxlYW4KLS0tCmBgYHtyfQojIENhcmdhciBsaWJyZXLDrWFzIG5lY2VzYXJpYXMKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGxhdHRpY2UpCmxpYnJhcnkoY2FyZXQpCmxpYnJhcnkoRGF0YUV4cGxvcmVyKQpsaWJyYXJ5KGtlcm5sYWIpCmxpYnJhcnkocmFuZG9tRm9yZXN0KQpsaWJyYXJ5KG5uZXQpICAjIHBhcmEgcmVkZXMgbmV1cm9uYWxlcwpgYGAKCmBgYHtyfQojIENhcmdhciBsYSBiYXNlIGRlIGRhdG9zCmRmIDwtIHJlYWQuY3N2KCIvVXNlcnMvam9zZW1hcmVudGVzL0Rvd25sb2Fkcy9oZWFydC5jc3YiKQpgYGAKCmBgYHtyfQojIFJlc3VtZW4gZGUgbGEgYmFzZSBkZSBkYXRvcwpzdW1tYXJ5KGRmKQpzdHIoZGYpCnBsb3RfbWlzc2luZyhkZikKYGBgCgpgYGB7cn0KIyBEaXZpZGlyIGxvcyBkYXRvcyBlbiBjb25qdW50byBkZSBlbnRyZW5hbWllbnRvIHkgcHJ1ZWJhCnNldC5zZWVkKDEyMykKcmVuZ2xvbmVzX2VudHJlbmFtaWVudG8gPC0gY3JlYXRlRGF0YVBhcnRpdGlvbihkZiR0YXJnZXQsIHA9MC44LCBsaXN0PUZBTFNFKQplbnRyZW5hbWllbnRvIDwtIGRmW3Jlbmdsb25lc19lbnRyZW5hbWllbnRvLCBdCnBydWViYSA8LSBkZlstcmVuZ2xvbmVzX2VudHJlbmFtaWVudG8sIF0KYGBgCgpgYGB7cn0KIyBDb252ZXJ0aXIgbGEgdmFyaWFibGUgJ3RhcmdldCcgZW4gdW4gZmFjdG9yCmRmJHRhcmdldCA8LSBhcy5mYWN0b3IoZGYkdGFyZ2V0KQplbnRyZW5hbWllbnRvJHRhcmdldCA8LSBhcy5mYWN0b3IoZW50cmVuYW1pZW50byR0YXJnZXQpCnBydWViYSR0YXJnZXQgPC0gYXMuZmFjdG9yKHBydWViYSR0YXJnZXQpCgojIE1vZGVsbyAxOiBTVk0gTGluZWFyCm1vZGVsbzEgPC0gdHJhaW4odGFyZ2V0IH4gLiwgZGF0YT1lbnRyZW5hbWllbnRvLCAKICAgICAgICAgICAgICAgICBtZXRob2QgPSAic3ZtTGluZWFyIiwKICAgICAgICAgICAgICAgICBwcmVQcm9jZXNzPWMoInNjYWxlIiwgImNlbnRlciIpLAogICAgICAgICAgICAgICAgIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2Q9ImN2IiwgbnVtYmVyPTEwKSwgCiAgICAgICAgICAgICAgICAgdHVuZUdyaWQgPSBkYXRhLmZyYW1lKEM9MSkpCgpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzEgPC0gcHJlZGljdChtb2RlbG8xLCBlbnRyZW5hbWllbnRvKQpyZXN1bHRhZG9fcHJ1ZWJhMSA8LSBwcmVkaWN0KG1vZGVsbzEsIHBydWViYSkKCiMgTWF0cml6IGRlIGNvbmZ1c2nDs24KbWNyZTEgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvMSwgZW50cmVuYW1pZW50byR0YXJnZXQpCm1jcnAxIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhMSwgcHJ1ZWJhJHRhcmdldCkKCmBgYAoKYGBge3J9CiMgTW9kZWxvIDI6IFNWTSBSYWRpYWwKbW9kZWxvMiA8LSB0cmFpbih0YXJnZXQgfiAuLCBkYXRhPWVudHJlbmFtaWVudG8sIAogICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJzdm1SYWRpYWwiLAogICAgICAgICAgICAgICAgIHByZVByb2Nlc3M9Yygic2NhbGUiLCAiY2VudGVyIiksCiAgICAgICAgICAgICAgICAgdHJDb250cm9sID0gdHJhaW5Db250cm9sKG1ldGhvZD0iY3YiLCBudW1iZXI9MTApLCAKICAgICAgICAgICAgICAgICB0dW5lR3JpZCA9IGRhdGEuZnJhbWUoc2lnbWE9MSwgQz0xKSkKCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvMiA8LSBwcmVkaWN0KG1vZGVsbzIsIGVudHJlbmFtaWVudG8pCnJlc3VsdGFkb19wcnVlYmEyIDwtIHByZWRpY3QobW9kZWxvMiwgcHJ1ZWJhKQoKIyBNYXRyaXogZGUgY29uZnVzacOzbgptY3JlMiA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG8yLCBlbnRyZW5hbWllbnRvJHRhcmdldCkKbWNycDIgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmEyLCBwcnVlYmEkdGFyZ2V0KQpgYGAKCmBgYHtyfQojIE1vZGVsbyAzOiBTVk0gUG9seQptb2RlbG8zIDwtIHRyYWluKHRhcmdldCB+IC4sIGRhdGE9ZW50cmVuYW1pZW50bywgCiAgICAgICAgICAgICAgICAgbWV0aG9kID0gInN2bVBvbHkiLAogICAgICAgICAgICAgICAgIHByZVByb2Nlc3M9Yygic2NhbGUiLCAiY2VudGVyIiksCiAgICAgICAgICAgICAgICAgdHJDb250cm9sID0gdHJhaW5Db250cm9sKG1ldGhvZD0iY3YiLCBudW1iZXI9MTApLCAKICAgICAgICAgICAgICAgICB0dW5lR3JpZCA9IGRhdGEuZnJhbWUoZGVncmVlPTEsIHNjYWxlPTEsIEM9MSkpCgpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzMgPC0gcHJlZGljdChtb2RlbG8zLCBlbnRyZW5hbWllbnRvKQpyZXN1bHRhZG9fcHJ1ZWJhMyA8LSBwcmVkaWN0KG1vZGVsbzMsIHBydWViYSkKCiMgTWF0cml6IGRlIGNvbmZ1c2nDs24KbWNyZTMgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvMywgZW50cmVuYW1pZW50byR0YXJnZXQpCm1jcnAzIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhMywgcHJ1ZWJhJHRhcmdldCkKYGBgCgpgYGB7cn0KIyBNb2RlbG8gNDogw4FyYm9sIGRlIERlY2lzacOzbiAocnBhcnQpCm1vZGVsbzQgPC0gdHJhaW4odGFyZ2V0IH4gLiwgZGF0YT1lbnRyZW5hbWllbnRvLCAKICAgICAgICAgICAgICAgICBtZXRob2QgPSAicnBhcnQiLAogICAgICAgICAgICAgICAgIHByZVByb2Nlc3M9Yygic2NhbGUiLCAiY2VudGVyIiksCiAgICAgICAgICAgICAgICAgdHJDb250cm9sID0gdHJhaW5Db250cm9sKG1ldGhvZD0iY3YiLCBudW1iZXI9MTApLCAKICAgICAgICAgICAgICAgICB0dW5lTGVuZ3RoID0gMTApCgpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzQgPC0gcHJlZGljdChtb2RlbG80LCBlbnRyZW5hbWllbnRvKQpyZXN1bHRhZG9fcHJ1ZWJhNCA8LSBwcmVkaWN0KG1vZGVsbzQsIHBydWViYSkKCiMgTWF0cml6IGRlIGNvbmZ1c2nDs24KbWNyZTQgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvNCwgZW50cmVuYW1pZW50byR0YXJnZXQpCm1jcnA0IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhNCwgcHJ1ZWJhJHRhcmdldCkKYGBgCgoKYGBge3J9CiMgTW9kZWxvIDU6IFJlZCBOZXVyb25hbCAobm5ldCkKbW9kZWxvNSA8LSB0cmFpbih0YXJnZXQgfiAuLCBkYXRhPWVudHJlbmFtaWVudG8sCiAgICAgICAgICAgICAgICAgbWV0aG9kPSJubmV0IiwKICAgICAgICAgICAgICAgICBwcmVQcm9jZXNzPWMoInNjYWxlIiwgImNlbnRlciIpLAogICAgICAgICAgICAgICAgIHRyQ29udHJvbD10cmFpbkNvbnRyb2wobWV0aG9kPSJjdiIsIG51bWJlcj0xMCkpCgpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzUgPC0gcHJlZGljdChtb2RlbG81LCBlbnRyZW5hbWllbnRvKQpyZXN1bHRhZG9fcHJ1ZWJhNSA8LSBwcmVkaWN0KG1vZGVsbzUsIHBydWViYSkKCiMgTWF0cml6IGRlIGNvbmZ1c2nDs24KbWNyZTUgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvNSwgZW50cmVuYW1pZW50byR0YXJnZXQpCm1jcnA1IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhNSwgcHJ1ZWJhJHRhcmdldCkKYGBgCgoKYGBge3J9CiMgTW9kZWxvIDY6IFJhbmRvbSBGb3Jlc3QKbW9kZWxvNiA8LSB0cmFpbih0YXJnZXQgfiAuLCBkYXRhID0gZW50cmVuYW1pZW50bywKICAgICAgICAgICAgICAgICBtZXRob2QgPSAicmYiLAogICAgICAgICAgICAgICAgIHByZVByb2Nlc3MgPSBjKCJzY2FsZSIsICJjZW50ZXIiKSwKICAgICAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kID0gImN2IiwgbnVtYmVyID0gMTApKQoKcmVzdWx0YWRvX2VudHJlbmFtaWVudG82IDwtIHByZWRpY3QobW9kZWxvNiwgZW50cmVuYW1pZW50bykKcmVzdWx0YWRvX3BydWViYTYgPC0gcHJlZGljdChtb2RlbG82LCBwcnVlYmEpCgojIE1hdHJpeiBkZSBDb25mdXNpw7NuCm1jcmU2IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzYsIGVudHJlbmFtaWVudG8kdGFyZ2V0KQptY3JwNiA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTYsIHBydWViYSR0YXJnZXQpCmBgYAoKCmBgYHtyfQojIENvbXBhcmFjacOzbiBkZSBSZXN1bHRhZG9zCnJlc3VsdGFkb3MgPC0gZGF0YS5mcmFtZSgKICAic3ZtTGluZWFyIiA9IGMobWNyZTEkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDEkb3ZlcmFsbFsiQWNjdXJhY3kiXSksCiAgInN2bVJhZGlhbCIgPSBjKG1jcmUyJG92ZXJhbGxbIkFjY3VyYWN5Il0sIG1jcnAyJG92ZXJhbGxbIkFjY3VyYWN5Il0pLAogICJzdm1Qb2x5IiA9IGMobWNyZTMkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDMkb3ZlcmFsbFsiQWNjdXJhY3kiXSksCiAgInJwYXJ0IiA9IGMobWNyZTQkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDQkb3ZlcmFsbFsiQWNjdXJhY3kiXSksCiAgIm5uZXQiID0gYyhtY3JlNSRvdmVyYWxsWyJBY2N1cmFjeSJdLCBtY3JwNSRvdmVyYWxsWyJBY2N1cmFjeSJdKSwKICAicmYiID0gYyhtY3JlNiRvdmVyYWxsWyJBY2N1cmFjeSJdLCBtY3JwNiRvdmVyYWxsWyJBY2N1cmFjeSJdKQopCgpyb3duYW1lcyhyZXN1bHRhZG9zKSA8LSBjKCJQcmVjaXNpw7NuIGRlIEVudHJlbmFtaWVudG8iLCAiUHJlY2lzacOzbiBkZSBQcnVlYmEiKQpyZXN1bHRhZG9zCmBgYA==