Teoría

EL paquete CARET (Classification and Regression Training) es un paquete integral con una amplia variedad de algoritmos para el aprendizaje automático.

library(caret)        # Algoritmos de aprendizaje automático
## Loading required package: ggplot2
## Loading required package: lattice
library(ggplot2)      # Gráficas
library(lattice)      # Crear gráficas
library(datasets)
library(DataExplorer) # Análisis descriptivo
library(kernlab)
## 
## Attaching package: 'kernlab'
## The following object is masked from 'package:ggplot2':
## 
##     alpha
library(randomForest)
## randomForest 4.7-1.2
## Type rfNews() to see new features/changes/bug fixes.
## 
## Attaching package: 'randomForest'
## The following object is masked from 'package:ggplot2':
## 
##     margin
library(readxl)       # Para leer archivos .xlsx

Cargar base de datos

df <-read_excel("/Users/ceciliabalditbautista/Downloads/heart.xlsx")

Crear 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)
## tibble [1,025 × 14] (S3: tbl_df/tbl/data.frame)
##  $ age     : num [1:1025] 52 53 70 61 62 58 58 55 46 54 ...
##  $ sex     : num [1:1025] 1 1 1 1 0 0 1 1 1 1 ...
##  $ cp      : num [1:1025] 0 0 0 0 0 0 0 0 0 0 ...
##  $ trestbps: num [1:1025] 125 140 145 148 138 100 114 160 120 122 ...
##  $ chol    : num [1:1025] 212 203 174 203 294 248 318 289 249 286 ...
##  $ fbs     : num [1:1025] 0 1 0 0 1 0 0 0 0 0 ...
##  $ restecg : num [1:1025] 1 0 1 1 1 0 2 0 0 0 ...
##  $ thalach : num [1:1025] 168 155 125 161 106 122 140 145 144 116 ...
##  $ exang   : num [1:1025] 0 1 1 0 0 0 0 1 0 1 ...
##  $ oldpeak : num [1:1025] 1 3.1 2.6 0 1.9 1 4.4 0.8 0.8 3.2 ...
##  $ slope   : num [1:1025] 2 0 0 2 1 1 0 1 2 1 ...
##  $ ca      : num [1:1025] 2 0 0 1 3 0 3 1 0 2 ...
##  $ thal    : num [1:1025] 3 3 3 3 2 2 1 3 3 2 ...
##  $ target  : num [1:1025] 0 0 0 0 0 1 0 0 0 0 ...
#create report
plot_missing(df)

plot_histogram(df)

plot_correlation(df)

# Convertir la variable objetivo ‘target’ a factor para clasificación

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

NOTA: En modelos de clasificación, la variable que queremos predecir debe de tener formto FACTOR

Partir la base de datos

#Normalmente 80-20 o 70-30
set.seed(123)
renglones_entrenamiento <- createDataPartition(df$target, p=0.8, list=FALSE)
entrenamiento <- df[renglones_entrenamiento, ]
prueba <- df [-renglones_entrenamiento, ] 

Distintos tipos de Métodos para Modelar

Los métodos más utlizados para modelar aprendizaje automático son:

  • SVM: Support Ventor Machine o Maquina de Ventores de Soporte. Hay varios subtipos: Lineal (svmLinear), Radial(svmRdadial), Polinómico (svmPoly), etc.

  • Árbol de decesión: rpart

  • Redes Neuronales : nnet

  • Radom Forests : rf

Modelo 1. MVS 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
#tabla de evaluacion que desglosa el rendimiento del modelo de clasificación

#matriz de confusión del resultado de entrenamiento
mcre1 <- confusionMatrix(resultado_entrenamiento1, entrenamiento$target)
mcre1
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0 301  37
##          1  99 384
##                                           
##                Accuracy : 0.8343          
##                  95% CI : (0.8071, 0.8592)
##     No Information Rate : 0.5128          
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.6672          
##                                           
##  Mcnemar's Test P-Value : 1.689e-07       
##                                           
##             Sensitivity : 0.7525          
##             Specificity : 0.9121          
##          Pos Pred Value : 0.8905          
##          Neg Pred Value : 0.7950          
##              Prevalence : 0.4872          
##          Detection Rate : 0.3666          
##    Detection Prevalence : 0.4117          
##       Balanced Accuracy : 0.8323          
##                                           
##        'Positive' Class : 0               
## 
#matriz de confusión del resultado de prueba
mcrp1 <- confusionMatrix(resultado_prueba1, prueba$target)
mcrp1
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  0  1
##          0 78 10
##          1 21 95
##                                           
##                Accuracy : 0.848           
##                  95% CI : (0.7913, 0.8944)
##     No Information Rate : 0.5147          
##     P-Value [Acc > NIR] : < 2e-16         
##                                           
##                   Kappa : 0.6948          
##                                           
##  Mcnemar's Test P-Value : 0.07249         
##                                           
##             Sensitivity : 0.7879          
##             Specificity : 0.9048          
##          Pos Pred Value : 0.8864          
##          Neg Pred Value : 0.8190          
##              Prevalence : 0.4853          
##          Detection Rate : 0.3824          
##    Detection Prevalence : 0.4314          
##       Balanced Accuracy : 0.8463          
##                                           
##        'Positive' Class : 0               
## 

Modelo 2. MVS Radial

modelo2 <- train(target ~ ., 
                 data = entrenamiento,
                 method = "svmRadial", #cambiar1
                 preProcess = c("scale", "center"),
                 trControl = trainControl(method = "cv", number = 10), 
                 tuneGrid = data.frame(sigma=1, C= 1) #cambiar
)
resultado_entrenamiento2 <- predict(modelo2, entrenamiento)
resultado_prueba2 <- predict(modelo2, prueba)

#matriz de confusión
#tabla de evaluacion que desglosa el rendimiento del modelo de clasificación

#matriz de confusión del resultado de entrenamiento
mcre2 <- confusionMatrix(resultado_entrenamiento2, entrenamiento$target)
mcre2
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0 400   0
##          1   0 421
##                                      
##                Accuracy : 1          
##                  95% CI : (0.9955, 1)
##     No Information Rate : 0.5128     
##     P-Value [Acc > NIR] : < 2.2e-16  
##                                      
##                   Kappa : 1          
##                                      
##  Mcnemar's Test P-Value : NA         
##                                      
##             Sensitivity : 1.0000     
##             Specificity : 1.0000     
##          Pos Pred Value : 1.0000     
##          Neg Pred Value : 1.0000     
##              Prevalence : 0.4872     
##          Detection Rate : 0.4872     
##    Detection Prevalence : 0.4872     
##       Balanced Accuracy : 1.0000     
##                                      
##        'Positive' Class : 0          
## 
#matriz de confusión del resultado de prueba
mcrp2 <- confusionMatrix(resultado_prueba2, prueba$target)
mcrp2
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0  99   0
##          1   0 105
##                                      
##                Accuracy : 1          
##                  95% CI : (0.9821, 1)
##     No Information Rate : 0.5147     
##     P-Value [Acc > NIR] : < 2.2e-16  
##                                      
##                   Kappa : 1          
##                                      
##  Mcnemar's Test P-Value : NA         
##                                      
##             Sensitivity : 1.0000     
##             Specificity : 1.0000     
##          Pos Pred Value : 1.0000     
##          Neg Pred Value : 1.0000     
##              Prevalence : 0.4853     
##          Detection Rate : 0.4853     
##    Detection Prevalence : 0.4853     
##       Balanced Accuracy : 1.0000     
##                                      
##        'Positive' Class : 0          
## 

Modelo 3. MVS Polinómico

modelo3 <- train(target ~ ., 
                 data = entrenamiento,
                 method = "svmPoly", #cambiar1
                 preProcess = c("scale", "center"),
                 trControl = trainControl(method = "cv", number = 10), 
                 tuneGrid = data.frame(degree=1, scale=1, C= 1) #cambiar
)
resultado_entrenamiento3 <- predict(modelo3, entrenamiento)
resultado_prueba3 <- predict(modelo3, prueba)

#matriz de confusión
#tabla de evaluacion que desglosa el rendimiento del modelo de clasificación

#matriz de confusión del resultado de entrenamiento
mcre3 <- confusionMatrix(resultado_entrenamiento3, entrenamiento$target)
mcre3
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0 301  37
##          1  99 384
##                                           
##                Accuracy : 0.8343          
##                  95% CI : (0.8071, 0.8592)
##     No Information Rate : 0.5128          
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.6672          
##                                           
##  Mcnemar's Test P-Value : 1.689e-07       
##                                           
##             Sensitivity : 0.7525          
##             Specificity : 0.9121          
##          Pos Pred Value : 0.8905          
##          Neg Pred Value : 0.7950          
##              Prevalence : 0.4872          
##          Detection Rate : 0.3666          
##    Detection Prevalence : 0.4117          
##       Balanced Accuracy : 0.8323          
##                                           
##        'Positive' Class : 0               
## 
#matriz de confusión del resultado de prueba
mcrp3 <- confusionMatrix(resultado_prueba3, prueba$target)
mcrp3
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  0  1
##          0 78 10
##          1 21 95
##                                           
##                Accuracy : 0.848           
##                  95% CI : (0.7913, 0.8944)
##     No Information Rate : 0.5147          
##     P-Value [Acc > NIR] : < 2e-16         
##                                           
##                   Kappa : 0.6948          
##                                           
##  Mcnemar's Test P-Value : 0.07249         
##                                           
##             Sensitivity : 0.7879          
##             Specificity : 0.9048          
##          Pos Pred Value : 0.8864          
##          Neg Pred Value : 0.8190          
##              Prevalence : 0.4853          
##          Detection Rate : 0.3824          
##    Detection Prevalence : 0.4314          
##       Balanced Accuracy : 0.8463          
##                                           
##        'Positive' Class : 0               
## 

Modelo 4. Árbol de decisión

modelo4 <- train(target ~ ., 
                 data = entrenamiento,
                 method = "rpart", #cambiar1
                 preProcess = c("scale", "center"),
                 trControl = trainControl(method = "cv", number = 10), 
                 tuneLength = 10 #cambiar
)
resultado_entrenamiento4 <- predict(modelo4, entrenamiento)
resultado_prueba4 <- predict(modelo4, prueba)

#matriz de confusión
#tabla de evaluacion que desglosa el rendimiento del modelo de clasificación

#matriz de confusión del resultado de entrenamiento
mcre4 <- confusionMatrix(resultado_entrenamiento4, entrenamiento$target)
mcre4
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0 360  29
##          1  40 392
##                                          
##                Accuracy : 0.916          
##                  95% CI : (0.8948, 0.934)
##     No Information Rate : 0.5128         
##     P-Value [Acc > NIR] : <2e-16         
##                                          
##                   Kappa : 0.8317         
##                                          
##  Mcnemar's Test P-Value : 0.2286         
##                                          
##             Sensitivity : 0.9000         
##             Specificity : 0.9311         
##          Pos Pred Value : 0.9254         
##          Neg Pred Value : 0.9074         
##              Prevalence : 0.4872         
##          Detection Rate : 0.4385         
##    Detection Prevalence : 0.4738         
##       Balanced Accuracy : 0.9156         
##                                          
##        'Positive' Class : 0              
## 
#matriz de confusión del resultado de prueba
mcrp4 <- confusionMatrix(resultado_prueba4, prueba$target)
mcrp4
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  0  1
##          0 81  7
##          1 18 98
##                                           
##                Accuracy : 0.8775          
##                  95% CI : (0.8244, 0.9191)
##     No Information Rate : 0.5147          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.7539          
##                                           
##  Mcnemar's Test P-Value : 0.0455          
##                                           
##             Sensitivity : 0.8182          
##             Specificity : 0.9333          
##          Pos Pred Value : 0.9205          
##          Neg Pred Value : 0.8448          
##              Prevalence : 0.4853          
##          Detection Rate : 0.3971          
##    Detection Prevalence : 0.4314          
##       Balanced Accuracy : 0.8758          
##                                           
##        'Positive' Class : 0               
## 

Modelo 5. Random Forests

modelo5 <- train(target ~ ., 
                 data = entrenamiento,
                 method = "rf", #cambiar1
                 preProcess = c("scale", "center"),
                 trControl = trainControl(method = "cv", number = 10), 
                 tuneGrid = expand.grid (mtry=c(2,4,6)) #cambiar
)
resultado_entrenamiento5 <- predict(modelo5, entrenamiento)
resultado_prueba5 <- predict(modelo5, prueba)

#matriz de confusión
#tabla de evaluacion que desglosa el rendimiento del modelo de clasificación

#matriz de confusión del resultado de entrenamiento
mcre5 <- confusionMatrix(resultado_entrenamiento5, entrenamiento$target)
mcre5
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0 400   0
##          1   0 421
##                                      
##                Accuracy : 1          
##                  95% CI : (0.9955, 1)
##     No Information Rate : 0.5128     
##     P-Value [Acc > NIR] : < 2.2e-16  
##                                      
##                   Kappa : 1          
##                                      
##  Mcnemar's Test P-Value : NA         
##                                      
##             Sensitivity : 1.0000     
##             Specificity : 1.0000     
##          Pos Pred Value : 1.0000     
##          Neg Pred Value : 1.0000     
##              Prevalence : 0.4872     
##          Detection Rate : 0.4872     
##    Detection Prevalence : 0.4872     
##       Balanced Accuracy : 1.0000     
##                                      
##        'Positive' Class : 0          
## 
#matriz de confusión del resultado de prueba
mcrp5 <- confusionMatrix(resultado_prueba5, prueba$target)
mcrp5
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0  99   0
##          1   0 105
##                                      
##                Accuracy : 1          
##                  95% CI : (0.9821, 1)
##     No Information Rate : 0.5147     
##     P-Value [Acc > NIR] : < 2.2e-16  
##                                      
##                   Kappa : 1          
##                                      
##  Mcnemar's Test P-Value : NA         
##                                      
##             Sensitivity : 1.0000     
##             Specificity : 1.0000     
##          Pos Pred Value : 1.0000     
##          Neg Pred Value : 1.0000     
##              Prevalence : 0.4853     
##          Detection Rate : 0.4853     
##    Detection Prevalence : 0.4853     
##       Balanced Accuracy : 1.0000     
##                                      
##        'Positive' Class : 0          
## 

Modelo 6. Redes Neuronales

modelo6 <- train(target ~ ., 
                 data = entrenamiento,
                 method = "nnet", #cambiar1
                 preProcess = c("scale", "center"),
                 trControl = trainControl(method = "cv", number = 10) 
                 
)
## # weights:  16
## initial  value 569.999083 
## iter  10 value 288.130048
## iter  20 value 258.238020
## iter  30 value 254.233141
## iter  40 value 248.373203
## iter  50 value 243.467587
## final  value 243.456763 
## converged
## # weights:  46
## initial  value 488.903292 
## iter  10 value 256.703101
## iter  20 value 218.697603
## iter  30 value 198.367975
## iter  40 value 180.586995
## iter  50 value 172.732690
## iter  60 value 172.427073
## iter  70 value 172.425505
## iter  70 value 172.425503
## iter  70 value 172.425503
## final  value 172.425503 
## converged
## # weights:  76
## initial  value 594.174024 
## iter  10 value 223.638080
## iter  20 value 134.291261
## iter  30 value 102.745281
## iter  40 value 93.611640
## iter  50 value 89.482480
## iter  60 value 86.165546
## iter  70 value 85.593437
## iter  80 value 85.536406
## iter  90 value 85.510667
## iter 100 value 85.480040
## final  value 85.480040 
## stopped after 100 iterations
## # weights:  16
## initial  value 567.201902 
## iter  10 value 305.269751
## iter  20 value 277.435554
## iter  30 value 266.448224
## iter  40 value 266.436106
## iter  50 value 266.422893
## final  value 266.421964 
## converged
## # weights:  46
## initial  value 489.707226 
## iter  10 value 254.538182
## iter  20 value 216.454009
## iter  30 value 199.465976
## iter  40 value 197.288104
## iter  50 value 196.806287
## iter  60 value 196.776704
## final  value 196.774639 
## converged
## # weights:  76
## initial  value 630.299406 
## iter  10 value 227.105804
## iter  20 value 168.517275
## iter  30 value 146.882723
## iter  40 value 140.322976
## iter  50 value 136.247669
## iter  60 value 134.631209
## iter  70 value 134.185180
## iter  80 value 134.128228
## iter  90 value 134.115957
## iter 100 value 134.115052
## final  value 134.115052 
## stopped after 100 iterations
## # weights:  16
## initial  value 549.450505 
## iter  10 value 275.951162
## iter  20 value 262.815875
## iter  30 value 259.584329
## iter  40 value 251.927180
## iter  50 value 251.473032
## iter  60 value 249.157226
## iter  70 value 249.032055
## iter  80 value 248.954444
## iter  90 value 248.923437
## iter 100 value 248.921333
## final  value 248.921333 
## stopped after 100 iterations
## # weights:  46
## initial  value 562.224034 
## iter  10 value 234.467358
## iter  20 value 197.553289
## iter  30 value 169.086603
## iter  40 value 153.714918
## iter  50 value 148.974980
## iter  60 value 148.338994
## iter  70 value 147.753641
## iter  80 value 147.573783
## iter  90 value 147.446538
## iter 100 value 147.386545
## final  value 147.386545 
## stopped after 100 iterations
## # weights:  76
## initial  value 579.453584 
## iter  10 value 216.453208
## iter  20 value 151.747627
## iter  30 value 105.233970
## iter  40 value 91.413434
## iter  50 value 85.512889
## iter  60 value 83.592936
## iter  70 value 82.902827
## iter  80 value 82.589017
## iter  90 value 82.391170
## iter 100 value 82.279682
## final  value 82.279682 
## stopped after 100 iterations
## # weights:  16
## initial  value 499.338879 
## iter  10 value 294.127496
## iter  20 value 271.803046
## iter  30 value 265.103249
## iter  40 value 262.121030
## iter  50 value 261.843585
## final  value 261.843254 
## converged
## # weights:  46
## initial  value 554.611051 
## iter  10 value 263.713912
## iter  20 value 216.331087
## iter  30 value 194.232631
## iter  40 value 175.893493
## iter  50 value 154.819662
## iter  60 value 137.240204
## iter  70 value 134.993292
## iter  80 value 134.548651
## iter  90 value 134.468037
## iter 100 value 134.453899
## final  value 134.453899 
## stopped after 100 iterations
## # weights:  76
## initial  value 526.575346 
## iter  10 value 251.364116
## iter  20 value 154.889625
## iter  30 value 107.488080
## iter  40 value 92.826473
## iter  50 value 88.606456
## iter  60 value 79.831017
## iter  70 value 77.801825
## iter  80 value 76.182565
## iter  90 value 74.671395
## iter 100 value 74.180774
## final  value 74.180774 
## stopped after 100 iterations
## # weights:  16
## initial  value 533.471970 
## iter  10 value 281.520296
## iter  20 value 279.402907
## iter  30 value 275.806272
## iter  40 value 273.778819
## iter  50 value 273.609821
## final  value 273.562003 
## converged
## # weights:  46
## initial  value 556.767195 
## iter  10 value 269.664002
## iter  20 value 235.433690
## iter  30 value 221.295662
## iter  40 value 207.664594
## iter  50 value 201.518256
## iter  60 value 195.689009
## iter  70 value 189.713812
## iter  80 value 188.584992
## iter  90 value 188.429999
## iter 100 value 188.423969
## final  value 188.423969 
## stopped after 100 iterations
## # weights:  76
## initial  value 531.556429 
## iter  10 value 248.763783
## iter  20 value 216.397163
## iter  30 value 189.005266
## iter  40 value 171.249596
## iter  50 value 159.426514
## iter  60 value 154.108174
## iter  70 value 152.282143
## iter  80 value 151.863605
## iter  90 value 151.058766
## iter 100 value 150.817477
## final  value 150.817477 
## stopped after 100 iterations
## # weights:  16
## initial  value 523.430464 
## iter  10 value 282.361163
## iter  20 value 275.449058
## iter  30 value 273.716527
## iter  40 value 267.496995
## iter  50 value 250.126167
## iter  60 value 249.958508
## iter  70 value 249.951670
## final  value 249.951321 
## converged
## # weights:  46
## initial  value 501.215317 
## iter  10 value 245.458491
## iter  20 value 204.115037
## iter  30 value 188.936460
## iter  40 value 181.130687
## iter  50 value 180.314487
## iter  60 value 180.233829
## iter  70 value 180.200757
## iter  80 value 180.172973
## iter  90 value 180.124639
## iter 100 value 180.095880
## final  value 180.095880 
## stopped after 100 iterations
## # weights:  76
## initial  value 540.624337 
## iter  10 value 249.708967
## iter  20 value 197.730774
## iter  30 value 143.270406
## iter  40 value 109.366999
## iter  50 value 90.170169
## iter  60 value 82.058028
## iter  70 value 72.373188
## iter  80 value 68.711012
## iter  90 value 67.799776
## iter 100 value 67.353067
## final  value 67.353067 
## stopped after 100 iterations
## # weights:  16
## initial  value 522.369413 
## iter  10 value 286.180142
## iter  20 value 252.401258
## iter  30 value 249.810549
## iter  40 value 247.093151
## iter  50 value 246.457037
## iter  60 value 232.881491
## iter  70 value 232.441387
## iter  80 value 232.440596
## iter  90 value 232.439746
## final  value 232.438628 
## converged
## # weights:  46
## initial  value 632.879225 
## iter  10 value 222.711909
## iter  20 value 186.067500
## iter  30 value 161.087713
## iter  40 value 148.598551
## iter  50 value 142.660877
## iter  60 value 131.420911
## iter  70 value 122.030802
## iter  80 value 121.456726
## iter  90 value 121.396900
## final  value 121.396750 
## converged
## # weights:  76
## initial  value 579.468565 
## iter  10 value 204.217404
## iter  20 value 127.200640
## iter  30 value 100.016152
## iter  40 value 89.685489
## iter  50 value 83.025091
## iter  60 value 81.614518
## iter  70 value 81.591558
## final  value 81.591352 
## converged
## # weights:  16
## initial  value 512.140527 
## iter  10 value 294.272883
## iter  20 value 261.433506
## iter  30 value 256.517540
## iter  40 value 256.435720
## iter  50 value 256.435341
## final  value 256.435287 
## converged
## # weights:  46
## initial  value 534.433134 
## iter  10 value 228.974571
## iter  20 value 194.576720
## iter  30 value 181.380101
## iter  40 value 177.464094
## iter  50 value 176.083136
## iter  60 value 175.486047
## iter  70 value 175.398274
## final  value 175.398158 
## converged
## # weights:  76
## initial  value 736.936682 
## iter  10 value 290.609772
## iter  20 value 229.208670
## iter  30 value 188.822519
## iter  40 value 169.676931
## iter  50 value 160.840613
## iter  60 value 153.052948
## iter  70 value 144.772663
## iter  80 value 136.135105
## iter  90 value 132.853034
## iter 100 value 130.067996
## final  value 130.067996 
## stopped after 100 iterations
## # weights:  16
## initial  value 482.710516 
## iter  10 value 257.990539
## iter  20 value 253.526426
## iter  30 value 251.758960
## iter  40 value 250.453936
## iter  50 value 249.868187
## iter  60 value 249.021454
## iter  70 value 248.942158
## iter  80 value 248.932364
## iter  90 value 248.915001
## iter 100 value 248.910146
## final  value 248.910146 
## stopped after 100 iterations
## # weights:  46
## initial  value 565.642371 
## iter  10 value 292.402143
## iter  20 value 221.239701
## iter  30 value 198.558890
## iter  40 value 185.478920
## iter  50 value 166.010745
## iter  60 value 163.671824
## iter  70 value 160.791390
## iter  80 value 160.184598
## iter  90 value 157.949652
## iter 100 value 154.362580
## final  value 154.362580 
## stopped after 100 iterations
## # weights:  76
## initial  value 519.428221 
## iter  10 value 230.093778
## iter  20 value 146.072769
## iter  30 value 128.497221
## iter  40 value 121.773207
## iter  50 value 116.919150
## iter  60 value 111.253142
## iter  70 value 108.375459
## iter  80 value 105.759512
## iter  90 value 103.471434
## iter 100 value 102.412697
## final  value 102.412697 
## stopped after 100 iterations
## # weights:  16
## initial  value 518.728748 
## iter  10 value 374.477946
## iter  20 value 314.971249
## iter  30 value 304.746668
## iter  40 value 303.082227
## iter  50 value 295.255833
## iter  60 value 295.108966
## final  value 295.108733 
## converged
## # weights:  46
## initial  value 489.444448 
## iter  10 value 246.200445
## iter  20 value 206.082579
## iter  30 value 188.981431
## iter  40 value 178.857508
## iter  50 value 173.630247
## iter  60 value 173.547800
## final  value 173.547051 
## converged
## # weights:  76
## initial  value 516.478466 
## iter  10 value 213.084720
## iter  20 value 150.134175
## iter  30 value 116.271210
## iter  40 value 89.561419
## iter  50 value 82.009425
## iter  60 value 77.701963
## iter  70 value 73.840871
## iter  80 value 72.878090
## iter  90 value 72.528648
## iter 100 value 72.459629
## final  value 72.459629 
## stopped after 100 iterations
## # weights:  16
## initial  value 513.834902 
## iter  10 value 302.506409
## iter  20 value 284.995432
## iter  30 value 278.653341
## iter  40 value 276.875540
## iter  50 value 276.723316
## final  value 276.714717 
## converged
## # weights:  46
## initial  value 551.083777 
## iter  10 value 288.242706
## iter  20 value 249.136959
## iter  30 value 234.590317
## iter  40 value 227.997432
## iter  50 value 220.670552
## iter  60 value 215.398674
## iter  70 value 207.616785
## iter  80 value 206.139456
## iter  90 value 201.394461
## iter 100 value 192.687353
## final  value 192.687353 
## stopped after 100 iterations
## # weights:  76
## initial  value 559.507939 
## iter  10 value 237.523953
## iter  20 value 167.723895
## iter  30 value 144.594044
## iter  40 value 132.494249
## iter  50 value 126.164125
## iter  60 value 123.711126
## iter  70 value 122.073696
## iter  80 value 120.361261
## iter  90 value 119.068573
## iter 100 value 118.756960
## final  value 118.756960 
## stopped after 100 iterations
## # weights:  16
## initial  value 561.551788 
## iter  10 value 282.606053
## iter  20 value 272.427301
## iter  30 value 265.738112
## iter  40 value 259.164735
## iter  50 value 258.945463
## iter  60 value 258.795877
## iter  70 value 258.779928
## iter  80 value 258.773712
## iter  90 value 258.770641
## iter 100 value 258.770352
## final  value 258.770352 
## stopped after 100 iterations
## # weights:  46
## initial  value 525.223776 
## iter  10 value 254.105847
## iter  20 value 226.288312
## iter  30 value 204.254949
## iter  40 value 193.012062
## iter  50 value 164.677679
## iter  60 value 159.739732
## iter  70 value 158.581450
## iter  80 value 157.879683
## iter  90 value 156.493309
## iter 100 value 155.988352
## final  value 155.988352 
## stopped after 100 iterations
## # weights:  76
## initial  value 513.866017 
## iter  10 value 230.122284
## iter  20 value 138.103976
## iter  30 value 90.628992
## iter  40 value 80.163652
## iter  50 value 77.770170
## iter  60 value 77.127219
## iter  70 value 76.785573
## iter  80 value 76.658092
## iter  90 value 76.603311
## iter 100 value 76.535110
## final  value 76.535110 
## stopped after 100 iterations
## # weights:  16
## initial  value 535.291588 
## iter  10 value 324.532222
## iter  20 value 297.758845
## iter  30 value 277.184776
## iter  40 value 268.206680
## iter  50 value 260.512247
## final  value 260.477446 
## converged
## # weights:  46
## initial  value 557.878727 
## iter  10 value 237.844338
## iter  20 value 209.734558
## iter  30 value 196.868439
## iter  40 value 185.434159
## iter  50 value 173.814023
## iter  60 value 167.889657
## iter  70 value 167.633411
## final  value 167.632789 
## converged
## # weights:  76
## initial  value 504.955112 
## iter  10 value 238.449069
## iter  20 value 173.162936
## iter  30 value 133.100713
## iter  40 value 107.804388
## iter  50 value 101.964805
## iter  60 value 96.718482
## iter  70 value 95.737817
## iter  80 value 95.099069
## iter  90 value 93.968178
## iter 100 value 93.721234
## final  value 93.721234 
## stopped after 100 iterations
## # weights:  16
## initial  value 535.784524 
## iter  10 value 374.701905
## iter  20 value 274.553197
## iter  30 value 263.494590
## iter  40 value 263.254691
## iter  50 value 263.156454
## final  value 263.153479 
## converged
## # weights:  46
## initial  value 639.757004 
## iter  10 value 302.848366
## iter  20 value 255.314708
## iter  30 value 221.016431
## iter  40 value 204.863483
## iter  50 value 200.696134
## iter  60 value 198.063913
## iter  70 value 196.024907
## iter  80 value 195.915760
## iter  90 value 195.831934
## iter 100 value 195.830163
## final  value 195.830163 
## stopped after 100 iterations
## # weights:  76
## initial  value 621.918985 
## iter  10 value 256.688767
## iter  20 value 198.285922
## iter  30 value 168.519263
## iter  40 value 148.119397
## iter  50 value 137.989620
## iter  60 value 129.677102
## iter  70 value 123.375212
## iter  80 value 116.888053
## iter  90 value 112.930887
## iter 100 value 111.341320
## final  value 111.341320 
## stopped after 100 iterations
## # weights:  16
## initial  value 553.470966 
## iter  10 value 309.142169
## iter  20 value 256.528501
## iter  30 value 252.656870
## iter  40 value 245.813097
## iter  50 value 242.935275
## iter  60 value 240.853152
## iter  70 value 237.871940
## iter  80 value 237.792586
## iter  90 value 237.792105
## final  value 237.792070 
## converged
## # weights:  46
## initial  value 555.882288 
## iter  10 value 255.981316
## iter  20 value 188.618878
## iter  30 value 173.306615
## iter  40 value 171.075951
## iter  50 value 161.101911
## iter  60 value 159.132540
## iter  70 value 158.961661
## iter  80 value 158.798828
## iter  90 value 158.639235
## iter 100 value 158.488047
## final  value 158.488047 
## stopped after 100 iterations
## # weights:  76
## initial  value 560.338105 
## iter  10 value 201.637986
## iter  20 value 154.204902
## iter  30 value 118.979687
## iter  40 value 108.020310
## iter  50 value 102.898559
## iter  60 value 100.353813
## iter  70 value 85.558748
## iter  80 value 82.672579
## iter  90 value 81.756833
## iter 100 value 81.462664
## final  value 81.462664 
## stopped after 100 iterations
## # weights:  16
## initial  value 482.884165 
## iter  10 value 251.769987
## iter  20 value 246.149456
## iter  30 value 231.566528
## iter  40 value 230.084348
## iter  50 value 230.060983
## iter  60 value 230.049885
## iter  70 value 230.040337
## iter  80 value 230.036330
## iter  90 value 230.031895
## iter 100 value 230.020639
## final  value 230.020639 
## stopped after 100 iterations
## # weights:  46
## initial  value 584.156128 
## iter  10 value 248.607167
## iter  20 value 196.724324
## iter  30 value 180.165655
## iter  40 value 168.034215
## iter  50 value 151.582939
## iter  60 value 138.815609
## iter  70 value 134.872368
## iter  80 value 132.192073
## iter  90 value 131.761626
## iter 100 value 131.744577
## final  value 131.744577 
## stopped after 100 iterations
## # weights:  76
## initial  value 635.095422 
## iter  10 value 224.485173
## iter  20 value 131.705533
## iter  30 value 89.496083
## iter  40 value 78.034690
## iter  50 value 72.928969
## iter  60 value 70.510834
## iter  70 value 69.397265
## iter  80 value 67.468996
## iter  90 value 66.992608
## iter 100 value 66.782573
## final  value 66.782573 
## stopped after 100 iterations
## # weights:  16
## initial  value 593.592274 
## iter  10 value 352.987205
## iter  20 value 296.769622
## iter  30 value 259.734045
## iter  40 value 253.325808
## iter  50 value 251.099538
## final  value 251.084597 
## converged
## # weights:  46
## initial  value 566.985613 
## iter  10 value 282.513548
## iter  20 value 236.365082
## iter  30 value 205.511503
## iter  40 value 184.201849
## iter  50 value 178.608408
## iter  60 value 175.714204
## iter  70 value 171.906597
## iter  80 value 171.688966
## iter  90 value 171.685084
## final  value 171.685076 
## converged
## # weights:  76
## initial  value 528.174263 
## iter  10 value 206.940113
## iter  20 value 159.165460
## iter  30 value 147.303673
## iter  40 value 138.237048
## iter  50 value 133.378381
## iter  60 value 130.458085
## iter  70 value 128.403227
## iter  80 value 128.118779
## iter  90 value 128.012885
## iter 100 value 128.005211
## final  value 128.005211 
## stopped after 100 iterations
## # weights:  16
## initial  value 570.789462 
## iter  10 value 261.410538
## iter  20 value 249.238085
## iter  30 value 246.956609
## iter  40 value 246.160237
## iter  50 value 240.364887
## iter  60 value 234.042659
## iter  70 value 233.713239
## iter  80 value 233.667972
## iter  90 value 233.646453
## final  value 233.645750 
## converged
## # weights:  46
## initial  value 506.654332 
## iter  10 value 229.827985
## iter  20 value 193.455502
## iter  30 value 169.178554
## iter  40 value 157.720164
## iter  50 value 145.055055
## iter  60 value 143.882103
## iter  70 value 143.516864
## iter  80 value 143.226507
## iter  90 value 142.841179
## iter 100 value 142.779894
## final  value 142.779894 
## stopped after 100 iterations
## # weights:  76
## initial  value 567.633799 
## iter  10 value 266.939686
## iter  20 value 165.347787
## iter  30 value 134.164060
## iter  40 value 104.164933
## iter  50 value 86.666275
## iter  60 value 77.568372
## iter  70 value 76.237466
## iter  80 value 75.988405
## iter  90 value 75.551646
## iter 100 value 75.240119
## final  value 75.240119 
## stopped after 100 iterations
## # weights:  16
## initial  value 533.784600 
## iter  10 value 365.728697
## iter  20 value 291.395175
## iter  30 value 271.226308
## iter  40 value 269.679766
## iter  50 value 255.404140
## iter  60 value 233.551983
## iter  70 value 233.158002
## final  value 233.156795 
## converged
## # weights:  46
## initial  value 526.689684 
## iter  10 value 260.365606
## iter  20 value 197.869090
## iter  30 value 168.585880
## iter  40 value 155.309235
## iter  50 value 145.636818
## iter  60 value 136.351075
## iter  70 value 125.530836
## iter  80 value 123.581112
## iter  90 value 117.154123
## iter 100 value 116.485801
## final  value 116.485801 
## stopped after 100 iterations
## # weights:  76
## initial  value 567.539021 
## iter  10 value 260.010810
## iter  20 value 188.827160
## iter  30 value 144.256407
## iter  40 value 120.149045
## iter  50 value 108.786221
## iter  60 value 100.354180
## iter  70 value 94.953713
## iter  80 value 89.392529
## iter  90 value 84.864343
## iter 100 value 82.427840
## final  value 82.427840 
## stopped after 100 iterations
## # weights:  16
## initial  value 518.303551 
## iter  10 value 301.226659
## iter  20 value 276.697610
## iter  30 value 273.611202
## iter  40 value 273.384737
## iter  50 value 273.353830
## final  value 273.353074 
## converged
## # weights:  46
## initial  value 591.310208 
## iter  10 value 279.431557
## iter  20 value 245.741291
## iter  30 value 223.281028
## iter  40 value 214.575468
## iter  50 value 212.640059
## iter  60 value 209.994821
## iter  70 value 203.230288
## iter  80 value 198.077586
## iter  90 value 197.541082
## iter 100 value 197.483424
## final  value 197.483424 
## stopped after 100 iterations
## # weights:  76
## initial  value 519.425187 
## iter  10 value 231.175300
## iter  20 value 182.323553
## iter  30 value 163.767229
## iter  40 value 151.801160
## iter  50 value 146.416592
## iter  60 value 144.300904
## iter  70 value 140.009398
## iter  80 value 136.682185
## iter  90 value 135.340508
## iter 100 value 135.171582
## final  value 135.171582 
## stopped after 100 iterations
## # weights:  16
## initial  value 540.733446 
## iter  10 value 304.607171
## iter  20 value 271.976050
## iter  30 value 268.287702
## iter  40 value 259.894410
## iter  50 value 254.662453
## iter  60 value 254.464064
## iter  70 value 254.374821
## iter  80 value 254.373228
## iter  90 value 254.365481
## iter  90 value 254.365479
## final  value 254.365479 
## converged
## # weights:  46
## initial  value 545.640462 
## iter  10 value 239.326181
## iter  20 value 194.950839
## iter  30 value 172.787268
## iter  40 value 166.742004
## iter  50 value 166.175388
## iter  60 value 166.067196
## iter  70 value 165.905586
## iter  80 value 165.765830
## iter  90 value 165.449865
## iter 100 value 165.253182
## final  value 165.253182 
## stopped after 100 iterations
## # weights:  76
## initial  value 518.040333 
## iter  10 value 277.491826
## iter  20 value 167.872275
## iter  30 value 140.576782
## iter  40 value 121.746256
## iter  50 value 113.017002
## iter  60 value 109.564551
## iter  70 value 108.700925
## iter  80 value 108.541876
## iter  90 value 108.290257
## iter 100 value 107.717404
## final  value 107.717404 
## stopped after 100 iterations
## # weights:  16
## initial  value 592.075271 
## iter  10 value 343.656404
## iter  20 value 304.890285
## iter  30 value 291.979532
## iter  40 value 286.235555
## iter  50 value 262.686437
## iter  60 value 260.091038
## final  value 260.066162 
## converged
## # weights:  46
## initial  value 565.244889 
## iter  10 value 314.059995
## iter  20 value 233.101839
## iter  30 value 213.279739
## iter  40 value 205.723279
## iter  50 value 200.712153
## iter  60 value 197.315406
## iter  70 value 191.245467
## iter  80 value 187.040008
## iter  90 value 186.790797
## final  value 186.789981 
## converged
## # weights:  76
## initial  value 575.555413 
## iter  10 value 243.838344
## iter  20 value 169.116631
## iter  30 value 135.260802
## iter  40 value 119.827127
## iter  50 value 108.754961
## iter  60 value 104.382782
## iter  70 value 97.078041
## iter  80 value 89.687880
## iter  90 value 86.253428
## iter 100 value 84.039692
## final  value 84.039692 
## stopped after 100 iterations
## # weights:  16
## initial  value 513.769672 
## iter  10 value 308.378187
## iter  20 value 279.996961
## iter  30 value 274.661095
## iter  40 value 274.485602
## iter  50 value 274.485270
## iter  50 value 274.485270
## iter  50 value 274.485270
## final  value 274.485270 
## converged
## # weights:  46
## initial  value 576.907748 
## iter  10 value 316.740481
## iter  20 value 295.705874
## iter  30 value 263.440184
## iter  40 value 249.258399
## iter  50 value 247.029203
## iter  60 value 246.450439
## iter  70 value 246.321419
## iter  80 value 246.317547
## iter  80 value 246.317546
## iter  80 value 246.317545
## final  value 246.317545 
## converged
## # weights:  76
## initial  value 501.586599 
## iter  10 value 237.735797
## iter  20 value 196.141706
## iter  30 value 179.711096
## iter  40 value 166.638251
## iter  50 value 160.868440
## iter  60 value 150.476525
## iter  70 value 139.677743
## iter  80 value 133.637860
## iter  90 value 130.642134
## iter 100 value 128.372324
## final  value 128.372324 
## stopped after 100 iterations
## # weights:  16
## initial  value 504.361816 
## iter  10 value 284.297069
## iter  20 value 269.582156
## iter  30 value 267.183924
## iter  40 value 267.001318
## iter  50 value 266.845748
## iter  60 value 266.633572
## iter  70 value 266.612626
## iter  80 value 266.597830
## iter  90 value 266.581847
## iter 100 value 266.572916
## final  value 266.572916 
## stopped after 100 iterations
## # weights:  46
## initial  value 524.875102 
## iter  10 value 291.050453
## iter  20 value 222.893973
## iter  30 value 206.104366
## iter  40 value 184.592381
## iter  50 value 180.033441
## iter  60 value 179.145094
## iter  70 value 177.085322
## iter  80 value 176.771149
## iter  90 value 176.571212
## iter 100 value 176.290868
## final  value 176.290868 
## stopped after 100 iterations
## # weights:  76
## initial  value 531.940366 
## iter  10 value 248.236509
## iter  20 value 176.116234
## iter  30 value 125.340915
## iter  40 value 88.098424
## iter  50 value 73.524519
## iter  60 value 66.886453
## iter  70 value 63.992418
## iter  80 value 63.599480
## iter  90 value 63.416857
## iter 100 value 63.263717
## final  value 63.263717 
## stopped after 100 iterations
## # weights:  16
## initial  value 582.318194 
## iter  10 value 368.127308
## iter  20 value 278.774365
## iter  30 value 262.482390
## iter  40 value 260.596566
## iter  50 value 256.649640
## iter  60 value 248.130184
## final  value 248.073516 
## converged
## # weights:  46
## initial  value 518.758908 
## iter  10 value 265.168365
## iter  20 value 197.910623
## iter  30 value 180.269945
## iter  40 value 169.151997
## iter  50 value 157.883859
## iter  60 value 157.009975
## iter  70 value 157.002927
## final  value 157.002919 
## converged
## # weights:  76
## initial  value 670.615292 
## iter  10 value 213.003963
## iter  20 value 123.937625
## iter  30 value 85.317781
## iter  40 value 66.822438
## iter  50 value 66.595192
## iter  60 value 66.311790
## iter  70 value 65.314671
## final  value 65.314551 
## converged
## # weights:  16
## initial  value 537.474474 
## iter  10 value 326.585638
## iter  20 value 268.468229
## iter  30 value 262.852892
## iter  40 value 262.335037
## iter  50 value 262.251746
## final  value 262.241447 
## converged
## # weights:  46
## initial  value 540.357955 
## iter  10 value 318.907794
## iter  20 value 250.905763
## iter  30 value 214.015429
## iter  40 value 206.964485
## iter  50 value 204.415089
## iter  60 value 200.592785
## iter  70 value 197.423045
## iter  80 value 194.993931
## iter  90 value 194.045215
## iter 100 value 193.607747
## final  value 193.607747 
## stopped after 100 iterations
## # weights:  76
## initial  value 558.839137 
## iter  10 value 237.387515
## iter  20 value 191.939855
## iter  30 value 178.002543
## iter  40 value 164.642997
## iter  50 value 153.229340
## iter  60 value 145.662276
## iter  70 value 137.607060
## iter  80 value 130.585131
## iter  90 value 127.813214
## iter 100 value 125.967919
## final  value 125.967919 
## stopped after 100 iterations
## # weights:  16
## initial  value 508.823055 
## iter  10 value 279.198903
## iter  20 value 259.196423
## iter  30 value 251.870312
## iter  40 value 250.500712
## iter  50 value 249.955996
## iter  60 value 249.688797
## iter  70 value 249.627704
## iter  80 value 249.623984
## iter  90 value 249.623349
## iter  90 value 249.623346
## iter  90 value 249.623346
## final  value 249.623346 
## converged
## # weights:  46
## initial  value 548.206600 
## iter  10 value 261.794978
## iter  20 value 195.304911
## iter  30 value 172.233853
## iter  40 value 156.958771
## iter  50 value 153.847502
## iter  60 value 151.780940
## iter  70 value 151.603698
## iter  80 value 151.477359
## iter  90 value 151.350340
## iter 100 value 151.302827
## final  value 151.302827 
## stopped after 100 iterations
## # weights:  76
## initial  value 487.019608 
## iter  10 value 240.352009
## iter  20 value 178.724776
## iter  30 value 139.935952
## iter  40 value 103.374915
## iter  50 value 91.342995
## iter  60 value 88.330062
## iter  70 value 87.243701
## iter  80 value 86.925559
## iter  90 value 86.409534
## iter 100 value 86.054779
## final  value 86.054779 
## stopped after 100 iterations
## # weights:  16
## initial  value 504.318504 
## iter  10 value 284.259249
## iter  20 value 252.079208
## iter  30 value 245.856129
## iter  40 value 234.841374
## final  value 234.782766 
## converged
## # weights:  46
## initial  value 519.068646 
## iter  10 value 234.358378
## iter  20 value 181.156083
## iter  30 value 150.250027
## iter  40 value 134.428157
## iter  50 value 131.491650
## iter  60 value 129.117306
## iter  70 value 127.109241
## iter  80 value 126.628244
## iter  90 value 126.601316
## final  value 126.601196 
## converged
## # weights:  76
## initial  value 592.812324 
## iter  10 value 237.591845
## iter  20 value 138.652045
## iter  30 value 88.431803
## iter  40 value 73.222985
## iter  50 value 68.211943
## iter  60 value 66.355403
## iter  70 value 66.287814
## iter  80 value 66.267336
## iter  90 value 66.234803
## iter 100 value 66.230282
## final  value 66.230282 
## stopped after 100 iterations
## # weights:  16
## initial  value 504.388062 
## iter  10 value 288.685633
## iter  20 value 263.562772
## iter  30 value 263.014927
## iter  40 value 261.604979
## iter  50 value 260.892381
## final  value 260.833183 
## converged
## # weights:  46
## initial  value 564.759563 
## iter  10 value 248.157399
## iter  20 value 212.766556
## iter  30 value 197.664297
## iter  40 value 191.165506
## iter  50 value 186.441633
## iter  60 value 179.070853
## iter  70 value 176.402806
## iter  80 value 175.978300
## iter  90 value 175.950795
## iter 100 value 175.950020
## final  value 175.950020 
## stopped after 100 iterations
## # weights:  76
## initial  value 501.560733 
## iter  10 value 225.203209
## iter  20 value 168.688323
## iter  30 value 145.545840
## iter  40 value 136.600915
## iter  50 value 130.371835
## iter  60 value 125.796198
## iter  70 value 122.649023
## iter  80 value 120.995196
## iter  90 value 117.754099
## iter 100 value 117.068935
## final  value 117.068935 
## stopped after 100 iterations
## # weights:  16
## initial  value 535.955306 
## iter  10 value 305.690011
## iter  20 value 253.887669
## iter  30 value 249.885912
## iter  40 value 247.464137
## iter  50 value 245.050111
## iter  60 value 237.786071
## iter  70 value 237.536458
## iter  80 value 237.505175
## iter  90 value 237.503828
## final  value 237.503618 
## converged
## # weights:  46
## initial  value 547.007129 
## iter  10 value 250.758454
## iter  20 value 206.162503
## iter  30 value 190.301206
## iter  40 value 180.811125
## iter  50 value 176.211068
## iter  60 value 172.204079
## iter  70 value 166.695500
## iter  80 value 163.441944
## iter  90 value 163.003443
## iter 100 value 162.937655
## final  value 162.937655 
## stopped after 100 iterations
## # weights:  76
## initial  value 562.537681 
## iter  10 value 224.117810
## iter  20 value 131.487968
## iter  30 value 80.060725
## iter  40 value 56.257920
## iter  50 value 54.199833
## iter  60 value 54.006497
## iter  70 value 53.891973
## iter  80 value 53.774819
## iter  90 value 52.343864
## iter 100 value 51.018105
## final  value 51.018105 
## stopped after 100 iterations
## # weights:  76
## initial  value 550.237743 
## iter  10 value 273.564895
## iter  20 value 209.868988
## iter  30 value 190.508324
## iter  40 value 178.761447
## iter  50 value 169.558281
## iter  60 value 165.374923
## iter  70 value 161.961513
## iter  80 value 154.725210
## iter  90 value 146.898407
## iter 100 value 134.050923
## final  value 134.050923 
## stopped after 100 iterations
resultado_entrenamiento6 <- predict(modelo6, entrenamiento)
resultado_prueba6 <- predict(modelo6, prueba)

#matriz de confusión
#tabla de evaluacion que desglosa el rendimiento del modelo de clasificación

#matriz de confusión del resultado de entrenamiento
mcre6 <- confusionMatrix(resultado_entrenamiento6, entrenamiento$target)
mcre6
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0 391  10
##          1   9 411
##                                          
##                Accuracy : 0.9769         
##                  95% CI : (0.9641, 0.986)
##     No Information Rate : 0.5128         
##     P-Value [Acc > NIR] : <2e-16         
##                                          
##                   Kappa : 0.9537         
##                                          
##  Mcnemar's Test P-Value : 1              
##                                          
##             Sensitivity : 0.9775         
##             Specificity : 0.9762         
##          Pos Pred Value : 0.9751         
##          Neg Pred Value : 0.9786         
##              Prevalence : 0.4872         
##          Detection Rate : 0.4762         
##    Detection Prevalence : 0.4884         
##       Balanced Accuracy : 0.9769         
##                                          
##        'Positive' Class : 0              
## 
#matriz de confusión del resultado de prueba
mcrp6 <- confusionMatrix(resultado_prueba6, prueba$target)
mcrp6
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  0  1
##          0 97  6
##          1  2 99
##                                           
##                Accuracy : 0.9608          
##                  95% CI : (0.9242, 0.9829)
##     No Information Rate : 0.5147          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9216          
##                                           
##  Mcnemar's Test P-Value : 0.2888          
##                                           
##             Sensitivity : 0.9798          
##             Specificity : 0.9429          
##          Pos Pred Value : 0.9417          
##          Neg Pred Value : 0.9802          
##              Prevalence : 0.4853          
##          Detection Rate : 0.4755          
##    Detection Prevalence : 0.5049          
##       Balanced Accuracy : 0.9613          
##                                           
##        'Positive' Class : 0               
## 

Tabla de Resultados

resultados <- data.frame(
  "svmLinear" = c(mcre1$overall["Accuracy"], mcrp1$overall["Accuracy"]),
  "svmRadial" = c(mcre2$overall["Accuracy"], mcrp2$overall["Accuracy"]),
  "svmPoly"   = c(mcre3$overall["Accuracy"], mcrp3$overall["Accuracy"]),
  "rpart"     = c(mcre4$overall["Accuracy"], mcrp4$overall["Accuracy"]),
  "rf"        = c(mcre5$overall["Accuracy"], mcrp5$overall["Accuracy"]),
  "nnet"      = c(mcre6$overall["Accuracy"], mcrp6$overall["Accuracy"])
)

rownames(resultados) <- c("Exactitud del Entrenamiento", "Exactitud de la Prueba")
resultados
##                             svmLinear svmRadial   svmPoly     rpart rf
## Exactitud del Entrenamiento 0.8343484         1 0.8343484 0.9159562  1
## Exactitud de la Prueba      0.8480392         1 0.8480392 0.8774510  1
##                                  nnet
## Exactitud del Entrenamiento 0.9768575
## Exactitud de la Prueba      0.9607843

Conclusión

El modelo con mejor desempeño para predecir si un paciente presenta una enfermedad cardíaca (target) es Random Forest, al alcanzar un 100% de exactitud tanto en el conjunto de entrenamiento como en el de prueba, demostrando que los patrones no lineales entre las variables médicas (edad, tipo de dolor de pecho, frecuencia cardíaca máxima, etc.)

LS0tCnRpdGxlOiAiQ0FSRVQgaGVhcnQiCmF1dGhvcjogIkNlY2lsaWEgQmFsZGl0IgpkYXRlOiAiMjAyNi0wOS0wNCIKb3V0cHV0OgogICAgaHRtbF9kb2N1bWVudDoKICAgICAgdG9jOiBUUlVFCiAgICAgIHRvY19mbG9hdDogVFJVRQogICAgICBjb2RlX2Rvd25sb2FkOiBUUlVFCiAgICAgIHRoZW1lOiBzYW5kc3RvbmUKLS0tCiFbXShodHRwczovL2ltZy5pdGNoLnpvbmUvYVcxaFoyVXZNVEU0T1RFNU15ODJPVE0yTVRNekxtZHBaZz09L29yaWdpbmFsL3lFMnZrMS5naWYpCgojIDxzcGFuIHN0eWxlID0iY29sb3I6Ymx1ZSI+VGVvcsOtYTwvc3Bhbj4KRUwgcGFxdWV0ZSAqKkNBUkVUIChDbGFzc2lmaWNhdGlvbiBhbmQgUmVncmVzc2lvbiBUcmFpbmluZykqKiBlcyB1biBwYXF1ZXRlIGludGVncmFsIGNvbiB1bmEgYW1wbGlhIHZhcmllZGFkIGRlIGFsZ29yaXRtb3MgcGFyYSBlbCBhcHJlbmRpemFqZSBhdXRvbcOhdGljby4KCgpgYGB7cn0KbGlicmFyeShjYXJldCkgICAgICAgICMgQWxnb3JpdG1vcyBkZSBhcHJlbmRpemFqZSBhdXRvbcOhdGljbwpsaWJyYXJ5KGdncGxvdDIpICAgICAgIyBHcsOhZmljYXMKbGlicmFyeShsYXR0aWNlKSAgICAgICMgQ3JlYXIgZ3LDoWZpY2FzCmxpYnJhcnkoZGF0YXNldHMpCmxpYnJhcnkoRGF0YUV4cGxvcmVyKSAjIEFuw6FsaXNpcyBkZXNjcmlwdGl2bwpsaWJyYXJ5KGtlcm5sYWIpCmxpYnJhcnkocmFuZG9tRm9yZXN0KQpsaWJyYXJ5KHJlYWR4bCkgICAgICAgIyBQYXJhIGxlZXIgYXJjaGl2b3MgLnhsc3gKYGBgCiMgPHNwYW4gc3R5bGUgPSJjb2xvcjpibHVlIj5DYXJnYXIgYmFzZSBkZSBkYXRvczwvc3Bhbj4KYGBge3J9CmRmIDwtcmVhZF9leGNlbCgiL1VzZXJzL2NlY2lsaWFiYWxkaXRiYXV0aXN0YS9Eb3dubG9hZHMvaGVhcnQueGxzeCIpCmBgYAojIDxzcGFuIHN0eWxlID0iY29sb3I6Ymx1ZSI+Q3JlYXIgbGEgYmFzZSBkZSBkYXRvczwvc3Bhbj4KYGBge3J9CnN1bW1hcnkoZGYpCnN0cihkZikKI2NyZWF0ZSByZXBvcnQKcGxvdF9taXNzaW5nKGRmKQpwbG90X2hpc3RvZ3JhbShkZikKcGxvdF9jb3JyZWxhdGlvbihkZikKYGBgCiMgQ29udmVydGlyIGxhIHZhcmlhYmxlIG9iamV0aXZvICd0YXJnZXQnIGEgZmFjdG9yIHBhcmEgY2xhc2lmaWNhY2nDs24KYGBge3J9CmRmJHRhcmdldCA8LSBhcy5mYWN0b3IoZGYkdGFyZ2V0KQpgYGAKCioqTk9UQTogRW4gbW9kZWxvcyBkZSBjbGFzaWZpY2FjacOzbiwgbGEgdmFyaWFibGUgcXVlIHF1ZXJlbW9zIHByZWRlY2lyIGRlYmUgZGUgdGVuZXIgZm9ybXRvIEZBQ1RPUioqCiAKIyA8c3BhbiBzdHlsZSA9ImNvbG9yOmJsdWUiPlBhcnRpciBsYSBiYXNlIGRlIGRhdG9zPC9zcGFuPgpgYGB7cn0KI05vcm1hbG1lbnRlIDgwLTIwIG8gNzAtMzAKc2V0LnNlZWQoMTIzKQpyZW5nbG9uZXNfZW50cmVuYW1pZW50byA8LSBjcmVhdGVEYXRhUGFydGl0aW9uKGRmJHRhcmdldCwgcD0wLjgsIGxpc3Q9RkFMU0UpCmVudHJlbmFtaWVudG8gPC0gZGZbcmVuZ2xvbmVzX2VudHJlbmFtaWVudG8sIF0KcHJ1ZWJhIDwtIGRmIFstcmVuZ2xvbmVzX2VudHJlbmFtaWVudG8sIF0gCmBgYAojIDxzcGFuIHN0eWxlID0iY29sb3I6Ymx1ZSI+RGlzdGludG9zIHRpcG9zIGRlIE3DqXRvZG9zIHBhcmEgTW9kZWxhcjwvc3Bhbj4KTG9zIG3DqXRvZG9zIG3DoXMgdXRsaXphZG9zIHBhcmEgbW9kZWxhciBhcHJlbmRpemFqZSBhdXRvbcOhdGljbyBzb246CgoqICoqU1ZNKio6ICoqU3VwcG9ydCBWZW50b3IgTWFjaGluZSoqIG8gTWFxdWluYSBkZSBWZW50b3JlcyBkZSBTb3BvcnRlLiBIYXkgCnZhcmlvcyBzdWJ0aXBvczogTGluZWFsIChzdm1MaW5lYXIpLCBSYWRpYWwoc3ZtUmRhZGlhbCksIFBvbGluw7NtaWNvIChzdm1Qb2x5KSwgZXRjLgoKKiAqKsOBcmJvbCBkZSBkZWNlc2nDs24qKjogcnBhcnQgCiogKipSZWRlcyBOZXVyb25hbGVzKiogOiBubmV0CiogKipSYWRvbSBGb3Jlc3RzKiogOiByZgoKCiMgPHNwYW4gc3R5bGUgPSJjb2xvcjpibHVlIj5Nb2RlbG8gMS4gTVZTIExpbmVhbDwvc3Bhbj4KYGBge3J9Cm1vZGVsbzEgPC0gdHJhaW4odGFyZ2V0IH4gLiwgCiAgICAgICAgICAgICAgICAgZGF0YSA9IGVudHJlbmFtaWVudG8sCiAgICAgICAgICAgICAgICAgbWV0aG9kID0gInN2bUxpbmVhciIsIAogICAgICAgICAgICAgICAgIHByZVByb2Nlc3MgPSBjKCJzY2FsZSIsICJjZW50ZXIiKSwKICAgICAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kID0gImN2IiwgbnVtYmVyID0gMTApLCAKICAgICAgICAgICAgICAgICB0dW5lR3JpZCA9IGRhdGEuZnJhbWUoQyA9IDEpCikKcmVzdWx0YWRvX2VudHJlbmFtaWVudG8xIDwtIHByZWRpY3QobW9kZWxvMSwgZW50cmVuYW1pZW50bykKcmVzdWx0YWRvX3BydWViYTEgPC0gcHJlZGljdChtb2RlbG8xLCBwcnVlYmEpCgojbWF0cml6IGRlIGNvbmZ1c2nDs24KI3RhYmxhIGRlIGV2YWx1YWNpb24gcXVlIGRlc2dsb3NhIGVsIHJlbmRpbWllbnRvIGRlbCBtb2RlbG8gZGUgY2xhc2lmaWNhY2nDs24KCiNtYXRyaXogZGUgY29uZnVzacOzbiBkZWwgcmVzdWx0YWRvIGRlIGVudHJlbmFtaWVudG8KbWNyZTEgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvMSwgZW50cmVuYW1pZW50byR0YXJnZXQpCm1jcmUxCgojbWF0cml6IGRlIGNvbmZ1c2nDs24gZGVsIHJlc3VsdGFkbyBkZSBwcnVlYmEKbWNycDEgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmExLCBwcnVlYmEkdGFyZ2V0KQptY3JwMQpgYGAKIyA8c3BhbiBzdHlsZSA9ImNvbG9yOmJsdWUiPk1vZGVsbyAyLiBNVlMgUmFkaWFsPC9zcGFuPgpgYGB7cn0KbW9kZWxvMiA8LSB0cmFpbih0YXJnZXQgfiAuLCAKICAgICAgICAgICAgICAgICBkYXRhID0gZW50cmVuYW1pZW50bywKICAgICAgICAgICAgICAgICBtZXRob2QgPSAic3ZtUmFkaWFsIiwgI2NhbWJpYXIxCiAgICAgICAgICAgICAgICAgcHJlUHJvY2VzcyA9IGMoInNjYWxlIiwgImNlbnRlciIpLAogICAgICAgICAgICAgICAgIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2QgPSAiY3YiLCBudW1iZXIgPSAxMCksIAogICAgICAgICAgICAgICAgIHR1bmVHcmlkID0gZGF0YS5mcmFtZShzaWdtYT0xLCBDPSAxKSAjY2FtYmlhcgopCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvMiA8LSBwcmVkaWN0KG1vZGVsbzIsIGVudHJlbmFtaWVudG8pCnJlc3VsdGFkb19wcnVlYmEyIDwtIHByZWRpY3QobW9kZWxvMiwgcHJ1ZWJhKQoKI21hdHJpeiBkZSBjb25mdXNpw7NuCiN0YWJsYSBkZSBldmFsdWFjaW9uIHF1ZSBkZXNnbG9zYSBlbCByZW5kaW1pZW50byBkZWwgbW9kZWxvIGRlIGNsYXNpZmljYWNpw7NuCgojbWF0cml6IGRlIGNvbmZ1c2nDs24gZGVsIHJlc3VsdGFkbyBkZSBlbnRyZW5hbWllbnRvCm1jcmUyIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzIsIGVudHJlbmFtaWVudG8kdGFyZ2V0KQptY3JlMgoKI21hdHJpeiBkZSBjb25mdXNpw7NuIGRlbCByZXN1bHRhZG8gZGUgcHJ1ZWJhCm1jcnAyIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhMiwgcHJ1ZWJhJHRhcmdldCkKbWNycDIKYGBgCiMgPHNwYW4gc3R5bGUgPSJjb2xvcjpibHVlIj5Nb2RlbG8gMy4gTVZTIFBvbGluw7NtaWNvPC9zcGFuPgpgYGB7cn0KbW9kZWxvMyA8LSB0cmFpbih0YXJnZXQgfiAuLCAKICAgICAgICAgICAgICAgICBkYXRhID0gZW50cmVuYW1pZW50bywKICAgICAgICAgICAgICAgICBtZXRob2QgPSAic3ZtUG9seSIsICNjYW1iaWFyMQogICAgICAgICAgICAgICAgIHByZVByb2Nlc3MgPSBjKCJzY2FsZSIsICJjZW50ZXIiKSwKICAgICAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kID0gImN2IiwgbnVtYmVyID0gMTApLCAKICAgICAgICAgICAgICAgICB0dW5lR3JpZCA9IGRhdGEuZnJhbWUoZGVncmVlPTEsIHNjYWxlPTEsIEM9IDEpICNjYW1iaWFyCikKcmVzdWx0YWRvX2VudHJlbmFtaWVudG8zIDwtIHByZWRpY3QobW9kZWxvMywgZW50cmVuYW1pZW50bykKcmVzdWx0YWRvX3BydWViYTMgPC0gcHJlZGljdChtb2RlbG8zLCBwcnVlYmEpCgojbWF0cml6IGRlIGNvbmZ1c2nDs24KI3RhYmxhIGRlIGV2YWx1YWNpb24gcXVlIGRlc2dsb3NhIGVsIHJlbmRpbWllbnRvIGRlbCBtb2RlbG8gZGUgY2xhc2lmaWNhY2nDs24KCiNtYXRyaXogZGUgY29uZnVzacOzbiBkZWwgcmVzdWx0YWRvIGRlIGVudHJlbmFtaWVudG8KbWNyZTMgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvMywgZW50cmVuYW1pZW50byR0YXJnZXQpCm1jcmUzCgojbWF0cml6IGRlIGNvbmZ1c2nDs24gZGVsIHJlc3VsdGFkbyBkZSBwcnVlYmEKbWNycDMgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmEzLCBwcnVlYmEkdGFyZ2V0KQptY3JwMwpgYGAKIyA8c3BhbiBzdHlsZSA9ImNvbG9yOmJsdWUiPk1vZGVsbyA0LiDDgXJib2wgZGUgZGVjaXNpw7NuPC9zcGFuPgpgYGB7cn0KbW9kZWxvNCA8LSB0cmFpbih0YXJnZXQgfiAuLCAKICAgICAgICAgICAgICAgICBkYXRhID0gZW50cmVuYW1pZW50bywKICAgICAgICAgICAgICAgICBtZXRob2QgPSAicnBhcnQiLCAjY2FtYmlhcjEKICAgICAgICAgICAgICAgICBwcmVQcm9jZXNzID0gYygic2NhbGUiLCAiY2VudGVyIiksCiAgICAgICAgICAgICAgICAgdHJDb250cm9sID0gdHJhaW5Db250cm9sKG1ldGhvZCA9ICJjdiIsIG51bWJlciA9IDEwKSwgCiAgICAgICAgICAgICAgICAgdHVuZUxlbmd0aCA9IDEwICNjYW1iaWFyCikKcmVzdWx0YWRvX2VudHJlbmFtaWVudG80IDwtIHByZWRpY3QobW9kZWxvNCwgZW50cmVuYW1pZW50bykKcmVzdWx0YWRvX3BydWViYTQgPC0gcHJlZGljdChtb2RlbG80LCBwcnVlYmEpCgojbWF0cml6IGRlIGNvbmZ1c2nDs24KI3RhYmxhIGRlIGV2YWx1YWNpb24gcXVlIGRlc2dsb3NhIGVsIHJlbmRpbWllbnRvIGRlbCBtb2RlbG8gZGUgY2xhc2lmaWNhY2nDs24KCiNtYXRyaXogZGUgY29uZnVzacOzbiBkZWwgcmVzdWx0YWRvIGRlIGVudHJlbmFtaWVudG8KbWNyZTQgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvNCwgZW50cmVuYW1pZW50byR0YXJnZXQpCm1jcmU0CgojbWF0cml6IGRlIGNvbmZ1c2nDs24gZGVsIHJlc3VsdGFkbyBkZSBwcnVlYmEKbWNycDQgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmE0LCBwcnVlYmEkdGFyZ2V0KQptY3JwNApgYGAKIyA8c3BhbiBzdHlsZSA9ImNvbG9yOmJsdWUiPk1vZGVsbyA1LiBSYW5kb20gRm9yZXN0czwvc3Bhbj4KYGBge3J9Cm1vZGVsbzUgPC0gdHJhaW4odGFyZ2V0IH4gLiwgCiAgICAgICAgICAgICAgICAgZGF0YSA9IGVudHJlbmFtaWVudG8sCiAgICAgICAgICAgICAgICAgbWV0aG9kID0gInJmIiwgI2NhbWJpYXIxCiAgICAgICAgICAgICAgICAgcHJlUHJvY2VzcyA9IGMoInNjYWxlIiwgImNlbnRlciIpLAogICAgICAgICAgICAgICAgIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2QgPSAiY3YiLCBudW1iZXIgPSAxMCksIAogICAgICAgICAgICAgICAgIHR1bmVHcmlkID0gZXhwYW5kLmdyaWQgKG10cnk9YygyLDQsNikpICNjYW1iaWFyCikKcmVzdWx0YWRvX2VudHJlbmFtaWVudG81IDwtIHByZWRpY3QobW9kZWxvNSwgZW50cmVuYW1pZW50bykKcmVzdWx0YWRvX3BydWViYTUgPC0gcHJlZGljdChtb2RlbG81LCBwcnVlYmEpCgojbWF0cml6IGRlIGNvbmZ1c2nDs24KI3RhYmxhIGRlIGV2YWx1YWNpb24gcXVlIGRlc2dsb3NhIGVsIHJlbmRpbWllbnRvIGRlbCBtb2RlbG8gZGUgY2xhc2lmaWNhY2nDs24KCiNtYXRyaXogZGUgY29uZnVzacOzbiBkZWwgcmVzdWx0YWRvIGRlIGVudHJlbmFtaWVudG8KbWNyZTUgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvNSwgZW50cmVuYW1pZW50byR0YXJnZXQpCm1jcmU1CgojbWF0cml6IGRlIGNvbmZ1c2nDs24gZGVsIHJlc3VsdGFkbyBkZSBwcnVlYmEKbWNycDUgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmE1LCBwcnVlYmEkdGFyZ2V0KQptY3JwNQpgYGAKIyA8c3BhbiBzdHlsZSA9ImNvbG9yOmJsdWUiPk1vZGVsbyA2LiBSZWRlcyBOZXVyb25hbGVzPC9zcGFuPgpgYGB7cn0KbW9kZWxvNiA8LSB0cmFpbih0YXJnZXQgfiAuLCAKICAgICAgICAgICAgICAgICBkYXRhID0gZW50cmVuYW1pZW50bywKICAgICAgICAgICAgICAgICBtZXRob2QgPSAibm5ldCIsICNjYW1iaWFyMQogICAgICAgICAgICAgICAgIHByZVByb2Nlc3MgPSBjKCJzY2FsZSIsICJjZW50ZXIiKSwKICAgICAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kID0gImN2IiwgbnVtYmVyID0gMTApIAogICAgICAgICAgICAgICAgIAopCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvNiA8LSBwcmVkaWN0KG1vZGVsbzYsIGVudHJlbmFtaWVudG8pCnJlc3VsdGFkb19wcnVlYmE2IDwtIHByZWRpY3QobW9kZWxvNiwgcHJ1ZWJhKQoKI21hdHJpeiBkZSBjb25mdXNpw7NuCiN0YWJsYSBkZSBldmFsdWFjaW9uIHF1ZSBkZXNnbG9zYSBlbCByZW5kaW1pZW50byBkZWwgbW9kZWxvIGRlIGNsYXNpZmljYWNpw7NuCgojbWF0cml6IGRlIGNvbmZ1c2nDs24gZGVsIHJlc3VsdGFkbyBkZSBlbnRyZW5hbWllbnRvCm1jcmU2IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzYsIGVudHJlbmFtaWVudG8kdGFyZ2V0KQptY3JlNgoKI21hdHJpeiBkZSBjb25mdXNpw7NuIGRlbCByZXN1bHRhZG8gZGUgcHJ1ZWJhCm1jcnA2IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhNiwgcHJ1ZWJhJHRhcmdldCkKbWNycDYKYGBgCiMgPHNwYW4gc3R5bGUgPSJjb2xvcjpibHVlIj5UYWJsYSBkZSBSZXN1bHRhZG9zPC9zcGFuPgpgYGB7cn0KcmVzdWx0YWRvcyA8LSBkYXRhLmZyYW1lKAogICJzdm1MaW5lYXIiID0gYyhtY3JlMSRvdmVyYWxsWyJBY2N1cmFjeSJdLCBtY3JwMSRvdmVyYWxsWyJBY2N1cmFjeSJdKSwKICAic3ZtUmFkaWFsIiA9IGMobWNyZTIkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDIkb3ZlcmFsbFsiQWNjdXJhY3kiXSksCiAgInN2bVBvbHkiICAgPSBjKG1jcmUzJG92ZXJhbGxbIkFjY3VyYWN5Il0sIG1jcnAzJG92ZXJhbGxbIkFjY3VyYWN5Il0pLAogICJycGFydCIgICAgID0gYyhtY3JlNCRvdmVyYWxsWyJBY2N1cmFjeSJdLCBtY3JwNCRvdmVyYWxsWyJBY2N1cmFjeSJdKSwKICAicmYiICAgICAgICA9IGMobWNyZTUkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDUkb3ZlcmFsbFsiQWNjdXJhY3kiXSksCiAgIm5uZXQiICAgICAgPSBjKG1jcmU2JG92ZXJhbGxbIkFjY3VyYWN5Il0sIG1jcnA2JG92ZXJhbGxbIkFjY3VyYWN5Il0pCikKCnJvd25hbWVzKHJlc3VsdGFkb3MpIDwtIGMoIkV4YWN0aXR1ZCBkZWwgRW50cmVuYW1pZW50byIsICJFeGFjdGl0dWQgZGUgbGEgUHJ1ZWJhIikKcmVzdWx0YWRvcwpgYGAKIyA8c3BhbiBzdHlsZSA9ImNvbG9yOmJsdWUiPkNvbmNsdXNpw7NuPC9zcGFuPgpFbCBtb2RlbG8gY29uIG1lam9yIGRlc2VtcGXDsW8gcGFyYSBwcmVkZWNpciBzaSB1biBwYWNpZW50ZSBwcmVzZW50YSB1bmEgZW5mZXJtZWRhZCBjYXJkw61hY2EgKHRhcmdldCkgZXMgUmFuZG9tIEZvcmVzdCwgYWwgYWxjYW56YXIgdW4gMTAwJSBkZSBleGFjdGl0dWQgdGFudG8gZW4gZWwgY29uanVudG8gZGUgZW50cmVuYW1pZW50byBjb21vIGVuIGVsIGRlIHBydWViYSwgZGVtb3N0cmFuZG8gcXVlIGxvcyBwYXRyb25lcyBubyBsaW5lYWxlcyBlbnRyZSBsYXMgdmFyaWFibGVzIG3DqWRpY2FzIChlZGFkLCB0aXBvIGRlIGRvbG9yIGRlIHBlY2hvLCBmcmVjdWVuY2lhIGNhcmTDrWFjYSBtw6F4aW1hLCBldGMuKQ==