Teoría

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

Instalar paquetes y llamar librerías

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

Crear la Base de Datos

df = read_excel(file.choose())

Entender la Base de Datos

df$target = as.factor(df$target)
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   0:499  
##  1st Qu.:2.000   1:526  
##  Median :2.000          
##  Mean   :2.324          
##  3rd Qu.:3.000          
##  Max.   :3.000
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  : Factor w/ 2 levels "0","1": 1 1 1 1 1 2 1 1 1 1 ...
#create_report(df)
plot_missing(df)

plot_histogram(df)

plot_correlation(df)

Nota: En modelos de clasificación, la variable que queremos predecir debe tener formato de 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 utilizados para modelar aprendizaje automático son: * SVM: Support Vector Machine hay varios subtipos: Lineal (svmLinear), Radial (svmRadial), Polinómico (svmPoly), etc. * Árbol de Decisión: rpart * Redes Neuronales: nnet * Random Forest: rf

Modelo 1. SVM Lineal

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

resultado_entrenamiento1 = predict(modelo1,entrenamiento)
resultado_prueba1 = predict(modelo1,prueba)

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               
## 
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. SVM Radial

modelo2 = train(target~., data=entrenamiento,
                method="svmRadial", # Cambiar
                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)

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          
## 
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. SVM Polinómico

modelo3 = train(target~., data=entrenamiento,
                method="svmPoly", # Cambiar
                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)

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               
## 
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", # Cambiar
                preProcess = c("scale","center"),
                trControl = trainControl(method="cv", number=10),
                tuneLength = 10 # Cambiar
                )

resultado_entrenamiento4 = predict(modelo4,entrenamiento)
resultado_prueba4 = predict(modelo4,prueba)

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              
## 
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 Forest

modelo5 = train(target~., data=entrenamiento,
                method="rf", # Cambiar
                preProcess = c("scale","center"),
                trControl = trainControl(method="cv", number=10),
                tuneLength = 10 # Cambiar
                )

resultado_entrenamiento5 = predict(modelo5,entrenamiento)
resultado_prueba5 = predict(modelo5,prueba)

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          
## 
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", # Cambiar
                preProcess = c("scale","center"),
                trControl = trainControl(method="cv", number=10))
## # weights:  16
## initial  value 510.881995 
## iter  10 value 286.066804
## iter  20 value 258.638557
## iter  30 value 247.484348
## iter  40 value 246.944475
## iter  50 value 246.932587
## iter  60 value 246.929361
## iter  70 value 246.924032
## iter  80 value 246.922315
## iter  90 value 246.920972
## iter 100 value 246.918925
## final  value 246.918925 
## stopped after 100 iterations
## # weights:  46
## initial  value 546.447273 
## iter  10 value 253.501016
## iter  20 value 209.301283
## iter  30 value 192.463108
## iter  40 value 177.621101
## iter  50 value 166.318632
## iter  60 value 152.102490
## iter  70 value 131.892124
## iter  80 value 124.359822
## iter  90 value 123.883940
## iter 100 value 123.832599
## final  value 123.832599 
## stopped after 100 iterations
## # weights:  76
## initial  value 578.728001 
## iter  10 value 227.812649
## iter  20 value 152.642030
## iter  30 value 122.362142
## iter  40 value 114.574189
## iter  50 value 103.225927
## iter  60 value 99.597675
## iter  70 value 99.114044
## iter  80 value 99.049282
## iter  90 value 99.037323
## iter 100 value 99.036736
## final  value 99.036736 
## stopped after 100 iterations
## # weights:  16
## initial  value 517.640916 
## iter  10 value 293.031172
## iter  20 value 274.937751
## iter  30 value 273.581816
## iter  40 value 272.727901
## iter  50 value 272.011599
## iter  60 value 271.539253
## iter  70 value 271.473737
## iter  80 value 271.473669
## final  value 271.473657 
## converged
## # weights:  46
## initial  value 555.488552 
## iter  10 value 283.867731
## iter  20 value 227.243070
## iter  30 value 214.226246
## iter  40 value 211.411099
## iter  50 value 202.637416
## iter  60 value 199.842827
## iter  70 value 199.197299
## iter  80 value 199.171990
## final  value 199.171838 
## converged
## # weights:  76
## initial  value 520.444458 
## iter  10 value 229.289297
## iter  20 value 164.470385
## iter  30 value 148.732368
## iter  40 value 140.717631
## iter  50 value 137.072341
## iter  60 value 135.172266
## iter  70 value 132.779257
## iter  80 value 128.147686
## iter  90 value 127.345678
## iter 100 value 127.064417
## final  value 127.064417 
## stopped after 100 iterations
## # weights:  16
## initial  value 561.297629 
## iter  10 value 284.095589
## iter  20 value 260.885547
## iter  30 value 254.610549
## iter  40 value 249.480956
## iter  50 value 248.650261
## iter  60 value 248.591818
## iter  70 value 248.575751
## iter  80 value 248.559181
## iter  90 value 248.503540
## iter 100 value 248.447914
## final  value 248.447914 
## stopped after 100 iterations
## # weights:  46
## initial  value 526.411433 
## iter  10 value 274.774702
## iter  20 value 255.090516
## iter  30 value 234.582543
## iter  40 value 204.088195
## iter  50 value 192.898083
## iter  60 value 191.627115
## iter  70 value 190.001687
## iter  80 value 186.773961
## iter  90 value 178.967202
## iter 100 value 177.642819
## final  value 177.642819 
## stopped after 100 iterations
## # weights:  76
## initial  value 638.618986 
## iter  10 value 269.081216
## iter  20 value 196.784445
## iter  30 value 133.598616
## iter  40 value 105.126131
## iter  50 value 90.299126
## iter  60 value 80.760982
## iter  70 value 72.431196
## iter  80 value 71.290867
## iter  90 value 66.403392
## iter 100 value 65.874389
## final  value 65.874389 
## stopped after 100 iterations
## # weights:  16
## initial  value 502.264796 
## iter  10 value 326.540422
## iter  20 value 272.576209
## iter  30 value 261.653326
## iter  40 value 258.865074
## iter  50 value 251.432258
## iter  60 value 243.655206
## iter  70 value 240.307407
## final  value 240.304562 
## converged
## # weights:  46
## initial  value 535.194005 
## iter  10 value 244.224715
## iter  20 value 204.404151
## iter  30 value 192.300760
## iter  40 value 181.897485
## iter  50 value 174.474443
## iter  60 value 170.453503
## iter  70 value 166.373645
## iter  80 value 166.310667
## iter  90 value 166.297946
## iter 100 value 166.268450
## final  value 166.268450 
## stopped after 100 iterations
## # weights:  76
## initial  value 558.366128 
## iter  10 value 245.237914
## iter  20 value 167.478731
## iter  30 value 119.463397
## iter  40 value 105.585059
## iter  50 value 98.290713
## iter  60 value 97.131641
## iter  70 value 96.112121
## iter  80 value 95.742024
## iter  90 value 95.623233
## iter 100 value 95.469849
## final  value 95.469849 
## stopped after 100 iterations
## # weights:  16
## initial  value 545.531494 
## iter  10 value 297.836780
## iter  20 value 266.348057
## iter  30 value 259.840955
## iter  40 value 259.142031
## iter  50 value 259.046891
## final  value 259.043061 
## converged
## # weights:  46
## initial  value 508.404506 
## iter  10 value 242.638122
## iter  20 value 217.148214
## iter  30 value 194.768413
## iter  40 value 185.268534
## iter  50 value 183.363644
## iter  60 value 180.647740
## iter  70 value 180.440458
## iter  80 value 178.377895
## iter  90 value 176.898338
## iter 100 value 176.896343
## final  value 176.896343 
## stopped after 100 iterations
## # weights:  76
## initial  value 512.052364 
## iter  10 value 275.399676
## iter  20 value 223.271920
## iter  30 value 182.673453
## iter  40 value 158.148202
## iter  50 value 145.934625
## iter  60 value 140.735768
## iter  70 value 138.441669
## iter  80 value 137.587290
## iter  90 value 137.155303
## iter 100 value 136.929255
## final  value 136.929255 
## stopped after 100 iterations
## # weights:  16
## initial  value 520.145796 
## iter  10 value 283.956906
## iter  20 value 254.693912
## iter  30 value 249.930489
## iter  40 value 241.075472
## iter  50 value 240.652654
## iter  60 value 240.635925
## iter  70 value 240.633176
## iter  80 value 240.632609
## iter  90 value 240.629475
## iter 100 value 240.623286
## final  value 240.623286 
## stopped after 100 iterations
## # weights:  46
## initial  value 542.865573 
## iter  10 value 285.735606
## iter  20 value 230.191091
## iter  30 value 204.150683
## iter  40 value 192.461876
## iter  50 value 181.835431
## iter  60 value 168.259387
## iter  70 value 167.372542
## iter  80 value 167.258423
## iter  90 value 167.108058
## iter 100 value 165.735257
## final  value 165.735257 
## stopped after 100 iterations
## # weights:  76
## initial  value 544.445288 
## iter  10 value 248.115581
## iter  20 value 179.113237
## iter  30 value 120.598036
## iter  40 value 84.792066
## iter  50 value 73.116297
## iter  60 value 70.837860
## iter  70 value 68.991365
## iter  80 value 67.405522
## iter  90 value 67.181165
## iter 100 value 66.870911
## final  value 66.870911 
## stopped after 100 iterations
## # weights:  16
## initial  value 531.202308 
## iter  10 value 281.474441
## iter  20 value 259.810162
## iter  30 value 256.873261
## iter  40 value 251.727058
## iter  50 value 246.133440
## iter  60 value 224.922612
## final  value 224.258076 
## converged
## # weights:  46
## initial  value 512.403451 
## iter  10 value 276.132802
## iter  20 value 245.072616
## iter  30 value 209.537733
## iter  40 value 180.477119
## iter  50 value 164.986379
## iter  60 value 156.663490
## iter  70 value 154.938066
## iter  80 value 152.819562
## iter  90 value 149.272116
## iter 100 value 143.008002
## final  value 143.008002 
## stopped after 100 iterations
## # weights:  76
## initial  value 537.395105 
## iter  10 value 226.804611
## iter  20 value 127.170411
## iter  30 value 80.741273
## iter  40 value 66.215581
## iter  50 value 64.150023
## iter  60 value 64.078792
## iter  70 value 64.070896
## iter  80 value 64.070091
## iter  90 value 64.069785
## final  value 64.069755 
## converged
## # weights:  16
## initial  value 497.638924 
## iter  10 value 297.309617
## iter  20 value 271.815959
## iter  30 value 266.623275
## iter  40 value 262.982740
## iter  50 value 262.219341
## final  value 262.202266 
## converged
## # weights:  46
## initial  value 522.678751 
## iter  10 value 260.092659
## iter  20 value 217.031878
## iter  30 value 195.502700
## iter  40 value 192.130119
## iter  50 value 189.581482
## iter  60 value 185.361666
## iter  70 value 184.293131
## iter  80 value 183.863576
## iter  90 value 183.660230
## final  value 183.659842 
## converged
## # weights:  76
## initial  value 521.192764 
## iter  10 value 250.254983
## iter  20 value 201.924222
## iter  30 value 178.792616
## iter  40 value 168.455681
## iter  50 value 159.612525
## iter  60 value 156.500410
## iter  70 value 154.539770
## iter  80 value 151.038470
## iter  90 value 147.386407
## iter 100 value 146.928910
## final  value 146.928910 
## stopped after 100 iterations
## # weights:  16
## initial  value 576.406040 
## iter  10 value 262.017951
## iter  20 value 255.866854
## iter  30 value 241.763538
## iter  40 value 241.604385
## iter  50 value 241.499528
## iter  60 value 241.483626
## iter  70 value 241.458206
## iter  80 value 241.452748
## iter  90 value 241.451823
## iter 100 value 241.447568
## final  value 241.447568 
## stopped after 100 iterations
## # weights:  46
## initial  value 521.279657 
## iter  10 value 245.659749
## iter  20 value 202.295641
## iter  30 value 174.791008
## iter  40 value 162.464536
## iter  50 value 156.997698
## iter  60 value 152.827955
## iter  70 value 151.805811
## iter  80 value 151.282400
## iter  90 value 151.213635
## iter 100 value 151.135072
## final  value 151.135072 
## stopped after 100 iterations
## # weights:  76
## initial  value 508.240677 
## iter  10 value 207.025253
## iter  20 value 152.388126
## iter  30 value 125.822550
## iter  40 value 116.208248
## iter  50 value 114.022716
## iter  60 value 113.823568
## iter  70 value 113.595018
## iter  80 value 112.653169
## iter  90 value 112.548232
## iter 100 value 112.448583
## final  value 112.448583 
## stopped after 100 iterations
## # weights:  16
## initial  value 514.848266 
## iter  10 value 293.810938
## iter  20 value 267.931028
## iter  30 value 264.414466
## final  value 264.387099 
## converged
## # weights:  46
## initial  value 514.031387 
## iter  10 value 234.846187
## iter  20 value 203.730812
## iter  30 value 171.035408
## iter  40 value 151.392243
## iter  50 value 148.362500
## iter  60 value 148.311692
## iter  70 value 148.309265
## final  value 148.309227 
## converged
## # weights:  76
## initial  value 523.961654 
## iter  10 value 213.712720
## iter  20 value 156.030210
## iter  30 value 122.783538
## iter  40 value 99.633081
## iter  50 value 88.142365
## iter  60 value 86.356773
## iter  70 value 85.680218
## iter  80 value 85.605642
## iter  90 value 85.532232
## iter 100 value 85.494163
## final  value 85.494163 
## stopped after 100 iterations
## # weights:  16
## initial  value 535.066444 
## iter  10 value 318.853987
## iter  20 value 280.449851
## iter  30 value 271.459717
## iter  40 value 268.716382
## iter  50 value 268.615404
## final  value 268.596763 
## converged
## # weights:  46
## initial  value 614.690691 
## iter  10 value 293.219180
## iter  20 value 265.652639
## iter  30 value 247.338822
## iter  40 value 223.347456
## iter  50 value 216.191202
## iter  60 value 212.149695
## iter  70 value 205.193419
## iter  80 value 198.933908
## iter  90 value 198.476118
## iter 100 value 198.457116
## final  value 198.457116 
## stopped after 100 iterations
## # weights:  76
## initial  value 554.962459 
## iter  10 value 260.640393
## iter  20 value 204.535850
## iter  30 value 174.867993
## iter  40 value 161.782633
## iter  50 value 149.351413
## iter  60 value 140.972802
## iter  70 value 135.994284
## iter  80 value 133.657298
## iter  90 value 133.017435
## iter 100 value 132.469636
## final  value 132.469636 
## stopped after 100 iterations
## # weights:  16
## initial  value 540.604629 
## iter  10 value 271.599996
## iter  20 value 264.906331
## iter  30 value 263.166802
## iter  40 value 262.495052
## iter  50 value 262.446020
## iter  60 value 262.226180
## iter  70 value 262.191530
## iter  80 value 262.182386
## iter  90 value 262.172410
## iter 100 value 262.166767
## final  value 262.166767 
## stopped after 100 iterations
## # weights:  46
## initial  value 539.887633 
## iter  10 value 232.994944
## iter  20 value 196.918742
## iter  30 value 188.283628
## iter  40 value 172.759221
## iter  50 value 163.467064
## iter  60 value 162.489892
## iter  70 value 161.658652
## iter  80 value 161.239738
## iter  90 value 161.173858
## iter 100 value 160.786069
## final  value 160.786069 
## stopped after 100 iterations
## # weights:  76
## initial  value 581.409801 
## iter  10 value 238.475160
## iter  20 value 196.544519
## iter  30 value 132.722604
## iter  40 value 83.354733
## iter  50 value 65.863739
## iter  60 value 59.537392
## iter  70 value 57.535366
## iter  80 value 56.106232
## iter  90 value 54.850270
## iter 100 value 54.234719
## final  value 54.234719 
## stopped after 100 iterations
## # weights:  16
## initial  value 597.975250 
## iter  10 value 357.257754
## iter  20 value 330.858914
## iter  30 value 317.015919
## iter  40 value 315.207605
## iter  50 value 311.556509
## iter  60 value 302.339048
## final  value 302.309107 
## converged
## # weights:  46
## initial  value 487.766910 
## iter  10 value 242.021354
## iter  20 value 206.268010
## iter  30 value 190.127344
## iter  40 value 175.125492
## iter  50 value 167.216822
## iter  60 value 166.543603
## iter  70 value 166.461745
## iter  80 value 166.459443
## iter  90 value 166.457182
## iter 100 value 166.455504
## final  value 166.455504 
## stopped after 100 iterations
## # weights:  76
## initial  value 534.085687 
## iter  10 value 212.058080
## iter  20 value 136.218296
## iter  30 value 114.345659
## iter  40 value 99.424595
## iter  50 value 90.742452
## iter  60 value 87.358494
## iter  70 value 86.767652
## iter  80 value 86.730019
## iter  90 value 86.726828
## iter 100 value 86.726502
## final  value 86.726502 
## stopped after 100 iterations
## # weights:  16
## initial  value 518.779141 
## iter  10 value 272.564520
## iter  20 value 266.793293
## iter  30 value 266.072567
## final  value 266.072528 
## converged
## # weights:  46
## initial  value 525.437427 
## iter  10 value 299.934120
## iter  20 value 229.756284
## iter  30 value 206.430729
## iter  40 value 196.719070
## iter  50 value 194.696764
## iter  60 value 193.984114
## iter  70 value 193.686441
## iter  80 value 193.666115
## iter  90 value 193.579117
## final  value 193.574709 
## converged
## # weights:  76
## initial  value 571.184755 
## iter  10 value 243.185678
## iter  20 value 200.444327
## iter  30 value 172.412892
## iter  40 value 156.643462
## iter  50 value 148.705232
## iter  60 value 144.513149
## iter  70 value 141.303476
## iter  80 value 140.456837
## iter  90 value 138.860324
## iter 100 value 137.567327
## final  value 137.567327 
## stopped after 100 iterations
## # weights:  16
## initial  value 511.824937 
## iter  10 value 286.271427
## iter  20 value 253.933038
## iter  30 value 250.843038
## iter  40 value 247.766515
## iter  50 value 247.596726
## iter  60 value 247.450696
## iter  70 value 247.403540
## iter  80 value 247.367603
## iter  90 value 247.304326
## iter 100 value 247.220816
## final  value 247.220816 
## stopped after 100 iterations
## # weights:  46
## initial  value 656.606706 
## iter  10 value 250.153249
## iter  20 value 221.212317
## iter  30 value 200.311418
## iter  40 value 187.324427
## iter  50 value 172.520469
## iter  60 value 169.792632
## iter  70 value 169.425590
## iter  80 value 169.287685
## iter  90 value 169.166578
## iter 100 value 168.971533
## final  value 168.971533 
## stopped after 100 iterations
## # weights:  76
## initial  value 544.831366 
## iter  10 value 242.565245
## iter  20 value 136.037487
## iter  30 value 99.240611
## iter  40 value 92.793144
## iter  50 value 91.104020
## iter  60 value 85.072196
## iter  70 value 84.094739
## iter  80 value 83.481275
## iter  90 value 82.985194
## iter 100 value 82.348632
## final  value 82.348632 
## stopped after 100 iterations
## # weights:  16
## initial  value 513.703169 
## iter  10 value 346.208213
## iter  20 value 260.367470
## iter  30 value 253.689507
## iter  40 value 252.729526
## iter  50 value 244.665953
## iter  60 value 240.477461
## final  value 240.467479 
## converged
## # weights:  46
## initial  value 525.262472 
## iter  10 value 261.030478
## iter  20 value 212.305518
## iter  30 value 174.534056
## iter  40 value 156.280782
## iter  50 value 145.915226
## iter  60 value 143.945283
## iter  70 value 142.813525
## iter  80 value 141.985019
## iter  90 value 141.556759
## iter 100 value 141.396691
## final  value 141.396691 
## stopped after 100 iterations
## # weights:  76
## initial  value 504.709516 
## iter  10 value 242.014366
## iter  20 value 182.918762
## iter  30 value 128.168376
## iter  40 value 101.224285
## iter  50 value 96.585067
## iter  60 value 92.694428
## iter  70 value 91.844336
## iter  80 value 90.080380
## iter  90 value 83.018138
## iter 100 value 82.602548
## final  value 82.602548 
## stopped after 100 iterations
## # weights:  16
## initial  value 505.829998 
## iter  10 value 282.215827
## iter  20 value 269.890956
## iter  30 value 266.574994
## iter  40 value 265.806190
## iter  50 value 264.344408
## iter  60 value 263.976451
## iter  60 value 263.976449
## iter  60 value 263.976449
## final  value 263.976449 
## converged
## # weights:  46
## initial  value 539.864862 
## iter  10 value 255.494584
## iter  20 value 218.071763
## iter  30 value 207.786297
## iter  40 value 187.732913
## iter  50 value 167.929651
## iter  60 value 162.210629
## iter  70 value 161.103410
## iter  80 value 160.971822
## iter  90 value 160.963263
## iter  90 value 160.963261
## iter  90 value 160.963261
## final  value 160.963261 
## converged
## # weights:  76
## initial  value 484.016739 
## iter  10 value 219.044708
## iter  20 value 165.648933
## iter  30 value 141.703937
## iter  40 value 122.035379
## iter  50 value 114.877639
## iter  60 value 109.593410
## iter  70 value 107.274121
## iter  80 value 106.551598
## iter  90 value 106.354106
## iter 100 value 106.327326
## final  value 106.327326 
## stopped after 100 iterations
## # weights:  16
## initial  value 494.180334 
## iter  10 value 335.449829
## iter  20 value 270.792035
## iter  30 value 255.721745
## iter  40 value 254.131959
## iter  50 value 252.241135
## iter  60 value 251.524636
## iter  70 value 251.413865
## iter  80 value 251.391047
## iter  90 value 250.979463
## final  value 250.975891 
## converged
## # weights:  46
## initial  value 610.911827 
## iter  10 value 247.789738
## iter  20 value 218.275710
## iter  30 value 192.710030
## iter  40 value 173.576041
## iter  50 value 149.171574
## iter  60 value 136.913227
## iter  70 value 134.887404
## iter  80 value 133.946146
## iter  90 value 133.211687
## iter 100 value 131.294552
## final  value 131.294552 
## stopped after 100 iterations
## # weights:  76
## initial  value 541.633245 
## iter  10 value 205.978760
## iter  20 value 114.062797
## iter  30 value 65.354388
## iter  40 value 57.555214
## iter  50 value 57.170177
## iter  60 value 56.972322
## iter  70 value 56.819552
## iter  80 value 56.774301
## iter  90 value 56.732192
## iter 100 value 56.692789
## final  value 56.692789 
## stopped after 100 iterations
## # weights:  16
## initial  value 512.411701 
## iter  10 value 363.237472
## iter  20 value 274.939005
## iter  30 value 261.469834
## iter  40 value 260.850976
## iter  50 value 258.888839
## iter  60 value 254.514892
## iter  70 value 241.332102
## iter  80 value 239.758079
## iter  90 value 238.709406
## iter 100 value 237.911307
## final  value 237.911307 
## stopped after 100 iterations
## # weights:  46
## initial  value 523.221203 
## iter  10 value 257.795489
## iter  20 value 191.265728
## iter  30 value 161.568018
## iter  40 value 147.870214
## iter  50 value 137.358427
## iter  60 value 134.029196
## iter  70 value 133.637720
## iter  80 value 133.098184
## iter  90 value 132.996311
## iter 100 value 132.908296
## final  value 132.908296 
## stopped after 100 iterations
## # weights:  76
## initial  value 537.352356 
## iter  10 value 244.227908
## iter  20 value 169.533555
## iter  30 value 122.128747
## iter  40 value 100.875311
## iter  50 value 87.793309
## iter  60 value 82.551529
## iter  70 value 81.368555
## iter  80 value 81.209543
## iter  90 value 81.169054
## iter 100 value 81.150434
## final  value 81.150434 
## stopped after 100 iterations
## # weights:  16
## initial  value 544.350766 
## iter  10 value 296.604431
## iter  20 value 273.856477
## iter  30 value 269.340449
## iter  40 value 267.778764
## iter  50 value 266.653584
## iter  60 value 266.224987
## iter  60 value 266.224986
## iter  60 value 266.224986
## final  value 266.224986 
## converged
## # weights:  46
## initial  value 553.341773 
## iter  10 value 265.871527
## iter  20 value 235.496099
## iter  30 value 209.670482
## iter  40 value 205.291017
## iter  50 value 204.728672
## iter  60 value 204.666218
## iter  70 value 204.657175
## final  value 204.656802 
## converged
## # weights:  76
## initial  value 532.326576 
## iter  10 value 238.547362
## iter  20 value 168.688194
## iter  30 value 154.840399
## iter  40 value 136.095853
## iter  50 value 126.220045
## iter  60 value 122.611827
## iter  70 value 119.941329
## iter  80 value 119.093220
## iter  90 value 118.748307
## iter 100 value 118.718341
## final  value 118.718341 
## stopped after 100 iterations
## # weights:  16
## initial  value 504.135256 
## iter  10 value 287.021114
## iter  20 value 269.351941
## iter  30 value 261.963776
## iter  40 value 261.751714
## iter  50 value 261.710209
## iter  60 value 261.516114
## iter  70 value 261.495954
## final  value 261.495737 
## converged
## # weights:  46
## initial  value 540.271907 
## iter  10 value 281.312706
## iter  20 value 248.059672
## iter  30 value 230.485562
## iter  40 value 212.642449
## iter  50 value 200.122888
## iter  60 value 190.541956
## iter  70 value 186.318424
## iter  80 value 184.469188
## iter  90 value 181.970083
## iter 100 value 180.757744
## final  value 180.757744 
## stopped after 100 iterations
## # weights:  76
## initial  value 523.697093 
## iter  10 value 229.751428
## iter  20 value 130.540761
## iter  30 value 89.785078
## iter  40 value 82.499313
## iter  50 value 80.145004
## iter  60 value 78.208280
## iter  70 value 77.465692
## iter  80 value 76.721052
## iter  90 value 75.002012
## iter 100 value 73.251313
## final  value 73.251313 
## stopped after 100 iterations
## # weights:  16
## initial  value 563.954725 
## iter  10 value 269.216446
## iter  20 value 261.051286
## iter  30 value 260.153708
## iter  40 value 259.145607
## iter  50 value 257.365051
## iter  60 value 255.260213
## iter  70 value 254.960413
## iter  80 value 254.776532
## iter  90 value 254.228029
## iter 100 value 254.127811
## final  value 254.127811 
## stopped after 100 iterations
## # weights:  46
## initial  value 556.439828 
## iter  10 value 239.862092
## iter  20 value 205.467000
## iter  30 value 178.070790
## iter  40 value 153.750876
## iter  50 value 140.943616
## iter  60 value 127.749591
## iter  70 value 124.990868
## iter  80 value 121.219135
## iter  90 value 118.157803
## iter 100 value 116.466620
## final  value 116.466620 
## stopped after 100 iterations
## # weights:  76
## initial  value 580.380336 
## iter  10 value 244.035540
## iter  20 value 168.306168
## iter  30 value 93.022863
## iter  40 value 56.577624
## iter  50 value 45.852548
## iter  60 value 43.959042
## iter  70 value 43.374091
## iter  80 value 42.975097
## iter  90 value 42.624347
## iter 100 value 42.521292
## final  value 42.521292 
## stopped after 100 iterations
## # weights:  16
## initial  value 510.351384 
## iter  10 value 325.527731
## iter  20 value 273.156509
## iter  30 value 265.287982
## iter  40 value 263.695842
## iter  50 value 262.287729
## final  value 262.168952 
## converged
## # weights:  46
## initial  value 513.695933 
## iter  10 value 247.679897
## iter  20 value 210.501891
## iter  30 value 194.652812
## iter  40 value 188.918466
## iter  50 value 187.593219
## iter  60 value 186.884374
## iter  70 value 185.410017
## iter  80 value 185.243685
## final  value 185.243664 
## converged
## # weights:  76
## initial  value 523.833371 
## iter  10 value 284.856055
## iter  20 value 235.241051
## iter  30 value 208.496036
## iter  40 value 192.957167
## iter  50 value 187.623374
## iter  60 value 184.448486
## iter  70 value 183.547287
## iter  80 value 183.370688
## iter  90 value 183.273070
## iter 100 value 183.240740
## final  value 183.240740 
## stopped after 100 iterations
## # weights:  16
## initial  value 525.744139 
## iter  10 value 313.543157
## iter  20 value 271.711106
## iter  30 value 262.954494
## iter  40 value 259.495129
## iter  50 value 249.383666
## iter  60 value 245.723171
## iter  70 value 245.446988
## iter  80 value 245.347806
## iter  90 value 245.313940
## iter 100 value 245.313083
## final  value 245.313083 
## stopped after 100 iterations
## # weights:  46
## initial  value 483.501058 
## iter  10 value 233.731622
## iter  20 value 184.894959
## iter  30 value 161.762216
## iter  40 value 152.031840
## iter  50 value 149.433468
## iter  60 value 148.828634
## iter  70 value 148.264604
## iter  80 value 147.978098
## iter  90 value 147.820764
## iter 100 value 147.640457
## final  value 147.640457 
## stopped after 100 iterations
## # weights:  76
## initial  value 523.131471 
## iter  10 value 241.451241
## iter  20 value 182.405077
## iter  30 value 138.901662
## iter  40 value 104.449354
## iter  50 value 95.675981
## iter  60 value 92.247430
## iter  70 value 91.677873
## iter  80 value 91.402268
## iter  90 value 91.044322
## iter 100 value 90.435384
## final  value 90.435384 
## stopped after 100 iterations
## # weights:  16
## initial  value 526.911982 
## iter  10 value 296.507978
## iter  20 value 259.145126
## iter  30 value 254.637805
## iter  40 value 253.355283
## iter  50 value 249.608036
## iter  60 value 232.885329
## iter  70 value 231.215668
## iter  80 value 231.211229
## iter  90 value 231.207826
## final  value 231.207269 
## converged
## # weights:  46
## initial  value 546.001078 
## iter  10 value 269.948107
## iter  20 value 214.827134
## iter  30 value 181.230537
## iter  40 value 166.123948
## iter  50 value 143.687397
## iter  60 value 127.838994
## iter  70 value 123.425458
## iter  80 value 122.265491
## iter  90 value 122.137540
## iter 100 value 121.933049
## final  value 121.933049 
## stopped after 100 iterations
## # weights:  76
## initial  value 542.321798 
## iter  10 value 225.763617
## iter  20 value 137.061947
## iter  30 value 75.256744
## iter  40 value 54.233112
## iter  50 value 45.056488
## iter  60 value 43.137094
## iter  70 value 42.640066
## iter  80 value 42.508375
## iter  90 value 42.400593
## iter 100 value 42.365866
## final  value 42.365866 
## stopped after 100 iterations
## # weights:  16
## initial  value 519.870084 
## iter  10 value 316.840797
## iter  20 value 263.120313
## iter  30 value 258.995950
## final  value 258.987141 
## converged
## # weights:  46
## initial  value 477.309863 
## iter  10 value 236.412202
## iter  20 value 214.615498
## iter  30 value 196.767186
## iter  40 value 183.089304
## iter  50 value 178.094699
## iter  60 value 173.726807
## iter  70 value 173.584824
## final  value 173.583202 
## converged
## # weights:  76
## initial  value 507.573439 
## iter  10 value 228.331141
## iter  20 value 189.915605
## iter  30 value 177.041681
## iter  40 value 163.790842
## iter  50 value 160.714798
## iter  60 value 158.455872
## iter  70 value 152.185639
## iter  80 value 150.333849
## iter  90 value 149.748341
## iter 100 value 147.352747
## final  value 147.352747 
## stopped after 100 iterations
## # weights:  16
## initial  value 519.264313 
## iter  10 value 303.700228
## iter  20 value 259.549445
## iter  30 value 257.603268
## iter  40 value 257.205680
## iter  50 value 257.121537
## iter  60 value 256.942802
## iter  70 value 256.922670
## iter  80 value 256.921432
## iter  90 value 256.920698
## final  value 256.920655 
## converged
## # weights:  46
## initial  value 535.488332 
## iter  10 value 241.671387
## iter  20 value 211.529483
## iter  30 value 167.924206
## iter  40 value 138.984229
## iter  50 value 121.724731
## iter  60 value 116.664238
## iter  70 value 116.304458
## iter  80 value 115.584533
## iter  90 value 115.009003
## iter 100 value 114.726704
## final  value 114.726704 
## stopped after 100 iterations
## # weights:  76
## initial  value 536.202697 
## iter  10 value 278.870403
## iter  20 value 213.033708
## iter  30 value 167.041537
## iter  40 value 139.327105
## iter  50 value 123.140594
## iter  60 value 114.628487
## iter  70 value 111.591552
## iter  80 value 106.095404
## iter  90 value 102.486301
## iter 100 value 100.763596
## final  value 100.763596 
## stopped after 100 iterations
## # weights:  16
## initial  value 521.249811 
## iter  10 value 271.698621
## iter  20 value 270.560260
## iter  30 value 270.105766
## iter  40 value 268.828702
## iter  50 value 264.749425
## iter  60 value 263.522104
## iter  70 value 263.440542
## iter  80 value 263.270812
## iter  90 value 263.138668
## iter 100 value 263.133265
## final  value 263.133265 
## stopped after 100 iterations
## # weights:  46
## initial  value 542.949407 
## iter  10 value 274.660939
## iter  20 value 221.785328
## iter  30 value 207.678994
## iter  40 value 197.215785
## iter  50 value 191.184114
## iter  60 value 190.890986
## iter  70 value 190.886003
## iter  80 value 190.885603
## final  value 190.885600 
## converged
## # weights:  76
## initial  value 501.230955 
## iter  10 value 231.336380
## iter  20 value 153.322861
## iter  30 value 92.116870
## iter  40 value 73.132748
## iter  50 value 69.528435
## iter  60 value 68.238206
## iter  70 value 67.485303
## iter  80 value 67.007727
## iter  90 value 66.910416
## iter 100 value 66.847981
## final  value 66.847981 
## stopped after 100 iterations
## # weights:  16
## initial  value 520.022611 
## iter  10 value 329.516322
## iter  20 value 300.577369
## iter  30 value 289.931678
## iter  40 value 279.455562
## iter  50 value 274.735098
## iter  60 value 272.297614
## iter  70 value 271.980780
## iter  80 value 271.980364
## final  value 271.980177 
## converged
## # weights:  46
## initial  value 508.934699 
## iter  10 value 262.298715
## iter  20 value 216.183438
## iter  30 value 200.155906
## iter  40 value 189.818886
## iter  50 value 187.685511
## iter  60 value 186.837441
## iter  70 value 186.710956
## final  value 186.710863 
## converged
## # weights:  76
## initial  value 552.384444 
## iter  10 value 233.962533
## iter  20 value 194.972423
## iter  30 value 159.308527
## iter  40 value 142.620052
## iter  50 value 136.641654
## iter  60 value 131.051580
## iter  70 value 126.283360
## iter  80 value 124.240656
## iter  90 value 121.446316
## iter 100 value 117.612138
## final  value 117.612138 
## stopped after 100 iterations
## # weights:  16
## initial  value 607.130977 
## iter  10 value 478.135226
## iter  20 value 402.817310
## iter  30 value 384.833138
## iter  40 value 377.851432
## iter  50 value 335.410918
## iter  60 value 313.616554
## iter  70 value 307.869721
## iter  80 value 298.821150
## iter  90 value 295.037167
## iter 100 value 294.352411
## final  value 294.352411 
## stopped after 100 iterations
## # weights:  46
## initial  value 572.424786 
## iter  10 value 245.197991
## iter  20 value 204.050773
## iter  30 value 188.492887
## iter  40 value 168.543308
## iter  50 value 152.345383
## iter  60 value 148.891329
## iter  70 value 148.293016
## iter  80 value 147.171657
## iter  90 value 146.909624
## iter 100 value 146.765242
## final  value 146.765242 
## stopped after 100 iterations
## # weights:  76
## initial  value 479.008375 
## iter  10 value 232.850509
## iter  20 value 157.325265
## iter  30 value 112.019487
## iter  40 value 89.891438
## iter  50 value 86.290548
## iter  60 value 85.042369
## iter  70 value 84.364300
## iter  80 value 83.653906
## iter  90 value 83.032863
## iter 100 value 78.226855
## final  value 78.226855 
## stopped after 100 iterations
## # weights:  76
## initial  value 651.859869 
## iter  10 value 248.434089
## iter  20 value 168.225953
## iter  30 value 147.774764
## iter  40 value 137.916475
## iter  50 value 131.882683
## iter  60 value 130.973669
## iter  70 value 129.150579
## iter  80 value 129.102816
## iter  90 value 129.078521
## iter 100 value 129.078086
## final  value 129.078086 
## stopped after 100 iterations
resultado_entrenamiento6 = predict(modelo6,entrenamiento)
resultado_prueba6 = predict(modelo6,prueba)

mcre6 = confusionMatrix(resultado_entrenamiento6,entrenamiento$target)
mcre6
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0 354  10
##          1  46 411
##                                           
##                Accuracy : 0.9318          
##                  95% CI : (0.9123, 0.9481)
##     No Information Rate : 0.5128          
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.8632          
##                                           
##  Mcnemar's Test P-Value : 2.91e-06        
##                                           
##             Sensitivity : 0.8850          
##             Specificity : 0.9762          
##          Pos Pred Value : 0.9725          
##          Neg Pred Value : 0.8993          
##              Prevalence : 0.4872          
##          Detection Rate : 0.4312          
##    Detection Prevalence : 0.4434          
##       Balanced Accuracy : 0.9306          
##                                           
##        'Positive' Class : 0               
## 
mcrp6 = confusionMatrix(resultado_prueba6,prueba$target)
mcrp6
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0  83   3
##          1  16 102
##                                          
##                Accuracy : 0.9069         
##                  95% CI : (0.8584, 0.943)
##     No Information Rate : 0.5147         
##     P-Value [Acc > NIR] : < 2.2e-16      
##                                          
##                   Kappa : 0.8129         
##                                          
##  Mcnemar's Test P-Value : 0.005905       
##                                          
##             Sensitivity : 0.8384         
##             Specificity : 0.9714         
##          Pos Pred Value : 0.9651         
##          Neg Pred Value : 0.8644         
##              Prevalence : 0.4853         
##          Detection Rate : 0.4069         
##    Detection Prevalence : 0.4216         
##       Balanced Accuracy : 0.9049         
##                                          
##        'Positive' Class : 0              
## 

Tabla de Resultados

resultados = data.frame(
  "smvLinear" = c(mcre1$overall["Accuracy"], mcrp1$overall["Accuracy"]),
  "smvRadial" = c(mcre2$overall["Accuracy"], mcrp2$overall["Accuracy"]),
  "smvPoly" = 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
##                             smvLinear smvRadial   smvPoly     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.9317905
## Exactitud de la Prueba      0.9068627

Conclusión

En conclusión, se recomienda usar el modelo SVM Radial o el de Random Forest ya que obtuvimos la mayor exactitud en el conjunto de prueba, con un 100%, por lo tanto, ambos presentan el mejor desempeño para la clasificación de enfermedad cardiaca.

LS0tDQp0aXRsZTogIkNhcmV0IC0gSGVhcnQiDQphdXRob3I6ICJNYXLDrWEgRmVybmFuZGEgU2FuIFJvbcOhbiBPcm96Y28gLSBBMDE0MjQ2OTEiDQpkYXRlOiAiMjYvMDgvMjAyNiINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KICAgIHRoZW1lOiBzYW5kc3RvbmUNCi0tLQ0KIVtdKGh0dHBzOi8vbWVkaWEyLmdpcGh5LmNvbS9tZWRpYS92MS5ZMmxrUFRaak1EbGlPVFV5Y0cwMGVESTVhRGh5YUdKcVkzVmtNREJ3WkhGMU5qWnpiR28wYW1Nd05uUm1ZVFV4TkhCa2JpWmxjRDEyTVY5bmFXWnpYM05sWVhKamFDWmpkRDFuL2J1UEhhTnZnaU5kQ0dQbnJiRy8yMDB3LmdpZikNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj5UZW9yw61hIDwvc3Bhbj4NCkVsIHBhcXVldGUgKipDQVJFVCoqIChDbGFzc2lmaWNhdGlvbiBhbmQgUmVncmVzc2lvbiBUcmFpbmluZykgZXMgdW4gcGFxdWV0ZSBpbnRlZ3JhbCBjb24gdW5hIGFtcGxpYSB2YXJpZWRhZCBkZSBhbGdvcml0bW9zIHBhcmEgZWwgYXByZW5kaXphamUgYXV0b23DoXRpY28uDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+SW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hcyA8L3NwYW4+DQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KI2luc3RhbGwucGFja2FnZXMoImNhcmV0IikNCmxpYnJhcnkoImNhcmV0IikNCiNpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikNCmxpYnJhcnkoImdncGxvdDIiKQ0KI2luc3RhbGwucGFja2FnZXMoImxhdHRpY2UiKQ0KbGlicmFyeSgibGF0dGljZSIpDQojaW5zdGFsbC5wYWNrYWdlcygicmVhZHhsIikNCmxpYnJhcnkoInJlYWR4bCIpDQojaW5zdGFsbC5wYWNrYWdlcygiRGF0YUV4cGxvcmVyIikNCmxpYnJhcnkoIkRhdGFFeHBsb3JlciIpDQojaW5zdGFsbC5wYWNrYWdlcygia2VybmxhYiIpDQpsaWJyYXJ5KCJrZXJubGFiIikNCiNpbnN0YWxsLnBhY2thZ2VzKCJyYW5kb21Gb3Jlc3QiKQ0KbGlicmFyeSgicmFuZG9tRm9yZXN0IikNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPkNyZWFyIGxhIEJhc2UgZGUgRGF0b3MgPC9zcGFuPg0KYGBge3J9DQpkZiA9IHJlYWRfZXhjZWwoZmlsZS5jaG9vc2UoKSkNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPkVudGVuZGVyIGxhIEJhc2UgZGUgRGF0b3MgPC9zcGFuPg0KYGBge3J9DQpkZiR0YXJnZXQgPSBhcy5mYWN0b3IoZGYkdGFyZ2V0KQ0Kc3VtbWFyeShkZikNCnN0cihkZikNCiNjcmVhdGVfcmVwb3J0KGRmKQ0KcGxvdF9taXNzaW5nKGRmKQ0KcGxvdF9oaXN0b2dyYW0oZGYpDQpwbG90X2NvcnJlbGF0aW9uKGRmKQ0KYGBgDQoqKk5vdGEqKjogRW4gbW9kZWxvcyBkZSBjbGFzaWZpY2FjacOzbiwgbGEgdmFyaWFibGUgcXVlIHF1ZXJlbW9zIHByZWRlY2lyIGRlYmUgdGVuZXIgZm9ybWF0byBkZSBGYWN0b3INCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj5QYXJ0aXIgbGEgQmFzZSBkZSBEYXRvcyA8L3NwYW4+DQpgYGB7cn0NCiMgTm9ybWFsbWVudGUgODAtMjAgbyA3MC0zMA0Kc2V0LnNlZWQoMTIzKQ0KcmVuZ2xvbmVzX2VudHJlbmFtaWVudG8gPSBjcmVhdGVEYXRhUGFydGl0aW9uKGRmJHRhcmdldCwgcD0wLjgsIGxpc3Q9RkFMU0UpDQplbnRyZW5hbWllbnRvID0gZGZbcmVuZ2xvbmVzX2VudHJlbmFtaWVudG8sIF0NCnBydWViYSA9IGRmWy1yZW5nbG9uZXNfZW50cmVuYW1pZW50bywgXQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+RGlzdGludG9zIHRpcG9zIGRlIE3DqXRvZG9zIHBhcmEgTW9kZWxhciA8L3NwYW4+DQpMb3MgbcOpdG9kb3MgbcOhcyB1dGlsaXphZG9zIHBhcmEgbW9kZWxhciBhcHJlbmRpemFqZSBhdXRvbcOhdGljbyBzb246DQoqICoqU1ZNKio6IFN1cHBvcnQgVmVjdG9yIE1hY2hpbmUgaGF5IHZhcmlvcyBzdWJ0aXBvczogTGluZWFsIChzdm1MaW5lYXIpLCBSYWRpYWwgKHN2bVJhZGlhbCksIFBvbGluw7NtaWNvIChzdm1Qb2x5KSwgZXRjLg0KKiAqKsOBcmJvbCBkZSBEZWNpc2nDs24qKjogcnBhcnQNCiogKipSZWRlcyBOZXVyb25hbGVzKio6IG5uZXQNCiogKipSYW5kb20gRm9yZXN0Kio6IHJmDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+TW9kZWxvIDEuIFNWTSBMaW5lYWwgPC9zcGFuPg0KYGBge3J9DQptb2RlbG8xID0gdHJhaW4odGFyZ2V0fi4sIGRhdGE9ZW50cmVuYW1pZW50bywNCiAgICAgICAgICAgICAgICBtZXRob2Q9InN2bUxpbmVhciIsICMgQ2FtYmlhcg0KICAgICAgICAgICAgICAgIHByZVByb2Nlc3MgPSBjKCJzY2FsZSIsImNlbnRlciIpLA0KICAgICAgICAgICAgICAgIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2Q9ImN2IiwgbnVtYmVyPTEwKSwNCiAgICAgICAgICAgICAgICB0dW5lR3JpZCA9IGRhdGEuZnJhbWUoQz0xKSAjIENhbWJpYXINCiAgICAgICAgICAgICAgICApDQoNCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvMSA9IHByZWRpY3QobW9kZWxvMSxlbnRyZW5hbWllbnRvKQ0KcmVzdWx0YWRvX3BydWViYTEgPSBwcmVkaWN0KG1vZGVsbzEscHJ1ZWJhKQ0KDQptY3JlMSA9IGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzEsZW50cmVuYW1pZW50byR0YXJnZXQpDQptY3JlMQ0KDQptY3JwMSA9IGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhMSxwcnVlYmEkdGFyZ2V0KQ0KbWNycDENCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPk1vZGVsbyAyLiBTVk0gUmFkaWFsIDwvc3Bhbj4NCmBgYHtyfQ0KbW9kZWxvMiA9IHRyYWluKHRhcmdldH4uLCBkYXRhPWVudHJlbmFtaWVudG8sDQogICAgICAgICAgICAgICAgbWV0aG9kPSJzdm1SYWRpYWwiLCAjIENhbWJpYXINCiAgICAgICAgICAgICAgICBwcmVQcm9jZXNzID0gYygic2NhbGUiLCJjZW50ZXIiKSwNCiAgICAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kPSJjdiIsIG51bWJlcj0xMCksDQogICAgICAgICAgICAgICAgdHVuZUdyaWQgPSBkYXRhLmZyYW1lKHNpZ21hPTEsIEM9MSkgIyBDYW1iaWFyDQogICAgICAgICAgICAgICAgKQ0KDQpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzIgPSBwcmVkaWN0KG1vZGVsbzIsZW50cmVuYW1pZW50bykNCnJlc3VsdGFkb19wcnVlYmEyID0gcHJlZGljdChtb2RlbG8yLHBydWViYSkNCg0KbWNyZTIgPSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG8yLGVudHJlbmFtaWVudG8kdGFyZ2V0KQ0KbWNyZTINCg0KbWNycDIgPSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTIscHJ1ZWJhJHRhcmdldCkNCm1jcnAyDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj5Nb2RlbG8gMy4gU1ZNIFBvbGluw7NtaWNvIDwvc3Bhbj4NCmBgYHtyfQ0KbW9kZWxvMyA9IHRyYWluKHRhcmdldH4uLCBkYXRhPWVudHJlbmFtaWVudG8sDQogICAgICAgICAgICAgICAgbWV0aG9kPSJzdm1Qb2x5IiwgIyBDYW1iaWFyDQogICAgICAgICAgICAgICAgcHJlUHJvY2VzcyA9IGMoInNjYWxlIiwiY2VudGVyIiksDQogICAgICAgICAgICAgICAgdHJDb250cm9sID0gdHJhaW5Db250cm9sKG1ldGhvZD0iY3YiLCBudW1iZXI9MTApLA0KICAgICAgICAgICAgICAgIHR1bmVHcmlkID0gZGF0YS5mcmFtZShkZWdyZWU9MSwgc2NhbGU9MSwgQz0xKSAjIENhbWJpYXINCiAgICAgICAgICAgICAgICApDQoNCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvMyA9IHByZWRpY3QobW9kZWxvMyxlbnRyZW5hbWllbnRvKQ0KcmVzdWx0YWRvX3BydWViYTMgPSBwcmVkaWN0KG1vZGVsbzMscHJ1ZWJhKQ0KDQptY3JlMyA9IGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzMsZW50cmVuYW1pZW50byR0YXJnZXQpDQptY3JlMw0KDQptY3JwMyA9IGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhMyxwcnVlYmEkdGFyZ2V0KQ0KbWNycDMNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPk1vZGVsbyA0LiDDgXJib2wgZGUgRGVjaXNpw7NuIDwvc3Bhbj4NCmBgYHtyfQ0KbW9kZWxvNCA9IHRyYWluKHRhcmdldH4uLCBkYXRhPWVudHJlbmFtaWVudG8sDQogICAgICAgICAgICAgICAgbWV0aG9kPSJycGFydCIsICMgQ2FtYmlhcg0KICAgICAgICAgICAgICAgIHByZVByb2Nlc3MgPSBjKCJzY2FsZSIsImNlbnRlciIpLA0KICAgICAgICAgICAgICAgIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2Q9ImN2IiwgbnVtYmVyPTEwKSwNCiAgICAgICAgICAgICAgICB0dW5lTGVuZ3RoID0gMTAgIyBDYW1iaWFyDQogICAgICAgICAgICAgICAgKQ0KDQpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzQgPSBwcmVkaWN0KG1vZGVsbzQsZW50cmVuYW1pZW50bykNCnJlc3VsdGFkb19wcnVlYmE0ID0gcHJlZGljdChtb2RlbG80LHBydWViYSkNCg0KbWNyZTQgPSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG80LGVudHJlbmFtaWVudG8kdGFyZ2V0KQ0KbWNyZTQNCg0KbWNycDQgPSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTQscHJ1ZWJhJHRhcmdldCkNCm1jcnA0DQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj5Nb2RlbG8gNS4gUmFuZG9tIEZvcmVzdCA8L3NwYW4+DQpgYGB7cn0NCm1vZGVsbzUgPSB0cmFpbih0YXJnZXR+LiwgZGF0YT1lbnRyZW5hbWllbnRvLA0KICAgICAgICAgICAgICAgIG1ldGhvZD0icmYiLCAjIENhbWJpYXINCiAgICAgICAgICAgICAgICBwcmVQcm9jZXNzID0gYygic2NhbGUiLCJjZW50ZXIiKSwNCiAgICAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kPSJjdiIsIG51bWJlcj0xMCksDQogICAgICAgICAgICAgICAgdHVuZUxlbmd0aCA9IDEwICMgQ2FtYmlhcg0KICAgICAgICAgICAgICAgICkNCg0KcmVzdWx0YWRvX2VudHJlbmFtaWVudG81ID0gcHJlZGljdChtb2RlbG81LGVudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhNSA9IHByZWRpY3QobW9kZWxvNSxwcnVlYmEpDQoNCm1jcmU1ID0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvNSxlbnRyZW5hbWllbnRvJHRhcmdldCkNCm1jcmU1DQoNCm1jcnA1ID0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmE1LHBydWViYSR0YXJnZXQpDQptY3JwNQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+TW9kZWxvIDYuIFJlZGVzIE5ldXJvbmFsZXMgPC9zcGFuPg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCm1vZGVsbzYgPSB0cmFpbih0YXJnZXR+LiwgZGF0YT1lbnRyZW5hbWllbnRvLA0KICAgICAgICAgICAgICAgIG1ldGhvZD0ibm5ldCIsICMgQ2FtYmlhcg0KICAgICAgICAgICAgICAgIHByZVByb2Nlc3MgPSBjKCJzY2FsZSIsImNlbnRlciIpLA0KICAgICAgICAgICAgICAgIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2Q9ImN2IiwgbnVtYmVyPTEwKSkNCg0KcmVzdWx0YWRvX2VudHJlbmFtaWVudG82ID0gcHJlZGljdChtb2RlbG82LGVudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhNiA9IHByZWRpY3QobW9kZWxvNixwcnVlYmEpDQoNCm1jcmU2ID0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvNixlbnRyZW5hbWllbnRvJHRhcmdldCkNCm1jcmU2DQoNCm1jcnA2ID0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmE2LHBydWViYSR0YXJnZXQpDQptY3JwNg0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+VGFibGEgZGUgUmVzdWx0YWRvcyA8L3NwYW4+DQpgYGB7cn0NCnJlc3VsdGFkb3MgPSBkYXRhLmZyYW1lKA0KICAic212TGluZWFyIiA9IGMobWNyZTEkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDEkb3ZlcmFsbFsiQWNjdXJhY3kiXSksDQogICJzbXZSYWRpYWwiID0gYyhtY3JlMiRvdmVyYWxsWyJBY2N1cmFjeSJdLCBtY3JwMiRvdmVyYWxsWyJBY2N1cmFjeSJdKSwNCiAgInNtdlBvbHkiID0gYyhtY3JlMyRvdmVyYWxsWyJBY2N1cmFjeSJdLCBtY3JwMyRvdmVyYWxsWyJBY2N1cmFjeSJdKSwNCiAgInJwYXJ0IiA9IGMobWNyZTQkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDQkb3ZlcmFsbFsiQWNjdXJhY3kiXSksDQogICJyZiIgPSBjKG1jcmU1JG92ZXJhbGxbIkFjY3VyYWN5Il0sIG1jcnA1JG92ZXJhbGxbIkFjY3VyYWN5Il0pLA0KICAibm5ldCIgPSBjKG1jcmU2JG92ZXJhbGxbIkFjY3VyYWN5Il0sIG1jcnA2JG92ZXJhbGxbIkFjY3VyYWN5Il0pDQopDQpyb3duYW1lcyhyZXN1bHRhZG9zKSA9IGMoIkV4YWN0aXR1ZCBkZWwgRW50cmVuYW1pZW50byIsICJFeGFjdGl0dWQgZGUgbGEgUHJ1ZWJhIikNCnJlc3VsdGFkb3MNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPkNvbmNsdXNpw7NuIDwvc3Bhbj4NCkVuIGNvbmNsdXNpw7NuLCBzZSByZWNvbWllbmRhIHVzYXIgZWwgbW9kZWxvIFNWTSBSYWRpYWwgbyBlbCBkZSBSYW5kb20gRm9yZXN0IHlhIHF1ZSBvYnR1dmltb3MgbGEgbWF5b3IgZXhhY3RpdHVkIGVuIGVsIGNvbmp1bnRvIGRlIHBydWViYSwgY29uIHVuIDEwMCUsIHBvciBsbyB0YW50bywgYW1ib3MgcHJlc2VudGFuIGVsIG1lam9yIGRlc2VtcGXDsW8gcGFyYSBsYSBjbGFzaWZpY2FjacOzbiBkZSBlbmZlcm1lZGFkIGNhcmRpYWNhLg==