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") #Modelos de Aprendizaje Automático
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
#install.packages("tidyverse") #Manipulación de datos
library(tidyverse) 
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.1     ✔ readr     2.2.0
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ lubridate 1.9.5     ✔ tibble    3.3.1
## ✔ purrr     1.2.2     ✔ tidyr     1.3.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ✖ purrr::lift()   masks caret::lift()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
#install.packages("pROC") #Cálculo del área bajo la curva
#library(pROC)
#install.packages("ggplot2") #Gráficas
library(ggplot2)
#install.packages("lattice") #Crear gráficos
library(lattice)
#install.packages("datasets") #Usar bases de datos precargadas
library(datasets)
#install.packages("DataExplorer") #Análisis Descriptivo
library(DataExplorer)
#install.packages("kernlab") #
library(kernlab)
## 
## Attaching package: 'kernlab'
## 
## The following object is masked from 'package:purrr':
## 
##     cross
## 
## The following object is masked from 'package:ggplot2':
## 
##     alpha
#install.packages("randomForest") #Árbol de decisiones
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:dplyr':
## 
##     combine
## 
## The following object is masked from 'package:ggplot2':
## 
##     margin
#install.packages("readxl") # Leer Excel
library(readxl)

Cargar la base de datos

df <-read_xlsx("/Users/dayranoelya/Downloads/heart.xlsx")

Entender 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(df)
plot_missing(df)

plot_histogram(df)

plot_correlation(df)

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 ...

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 o Máquina de Vectores de Soporte. Hay varios subtipos: Lineal (svmLinear), Radial (svmRadial), Polinómico (svnPoly), etc.
  • Árbol de Decisión: rpart
  • Reders Neuronales: nnet
  • Random Forest o Bosques Aleatorios: rf

Modelo 1. SVM Lineal

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

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

resultado_entrenamiento1 <- predict(modelo1,entrenamiento)
resultado_prueba1 <- predict(modelo1,prueba)

#Matriz de Confusión
#Es una tabla de evaluación 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 315  40
##          1  89 376
##                                           
##                Accuracy : 0.8427          
##                  95% CI : (0.8159, 0.8669)
##     No Information Rate : 0.5073          
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.6847          
##                                           
##  Mcnemar's Test P-Value : 2.377e-05       
##                                           
##             Sensitivity : 0.7797          
##             Specificity : 0.9038          
##          Pos Pred Value : 0.8873          
##          Neg Pred Value : 0.8086          
##              Prevalence : 0.4927          
##          Detection Rate : 0.3841          
##    Detection Prevalence : 0.4329          
##       Balanced Accuracy : 0.8418          
##                                           
##        'Positive' Class : 0               
## 
#Matriz de Confusión del Resultado de la Prueba
mcrp1 <- confusionMatrix(resultado_prueba1, prueba$target)
mcrp1
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0  74   7
##          1  21 103
##                                           
##                Accuracy : 0.8634          
##                  95% CI : (0.8087, 0.9073)
##     No Information Rate : 0.5366          
##     P-Value [Acc > NIR] : < 2e-16         
##                                           
##                   Kappa : 0.7226          
##                                           
##  Mcnemar's Test P-Value : 0.01402         
##                                           
##             Sensitivity : 0.7789          
##             Specificity : 0.9364          
##          Pos Pred Value : 0.9136          
##          Neg Pred Value : 0.8306          
##              Prevalence : 0.4634          
##          Detection Rate : 0.3610          
##    Detection Prevalence : 0.3951          
##       Balanced Accuracy : 0.8577          
##                                           
##        '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),
                 tuneGride = data.frame(sigma=1,C=1) #Cambiar
                 )

resultado_entrenamiento2 <- predict(modelo2,entrenamiento)
resultado_prueba2 <- predict(modelo2,prueba)

#Matriz de Confusión
#Es una tabla de evaluación 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 356  26
##          1  48 390
##                                          
##                Accuracy : 0.9098         
##                  95% CI : (0.888, 0.9285)
##     No Information Rate : 0.5073         
##     P-Value [Acc > NIR] : < 2e-16        
##                                          
##                   Kappa : 0.8193         
##                                          
##  Mcnemar's Test P-Value : 0.01464        
##                                          
##             Sensitivity : 0.8812         
##             Specificity : 0.9375         
##          Pos Pred Value : 0.9319         
##          Neg Pred Value : 0.8904         
##              Prevalence : 0.4927         
##          Detection Rate : 0.4341         
##    Detection Prevalence : 0.4659         
##       Balanced Accuracy : 0.9093         
##                                          
##        'Positive' Class : 0              
## 
#Matriz de Confusión del Resultado de la Prueba
mcrp2 <- confusionMatrix(resultado_prueba2, prueba$target)
mcrp2
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0  87   8
##          1   8 102
##                                           
##                Accuracy : 0.922           
##                  95% CI : (0.8763, 0.9547)
##     No Information Rate : 0.5366          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.8431          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9158          
##             Specificity : 0.9273          
##          Pos Pred Value : 0.9158          
##          Neg Pred Value : 0.9273          
##              Prevalence : 0.4634          
##          Detection Rate : 0.4244          
##    Detection Prevalence : 0.4634          
##       Balanced Accuracy : 0.9215          
##                                           
##        '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),
                 tuneGride = data.frame(degree=1,sigma=1,C=1) #Cambiar
                 )

resultado_entrenamiento3 <- predict(modelo3,entrenamiento)
resultado_prueba3 <- predict(modelo3,prueba)

#Matriz de Confusión
#Es una tabla de evaluación 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 399   1
##          1   5 415
##                                           
##                Accuracy : 0.9927          
##                  95% CI : (0.9841, 0.9973)
##     No Information Rate : 0.5073          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9854          
##                                           
##  Mcnemar's Test P-Value : 0.2207          
##                                           
##             Sensitivity : 0.9876          
##             Specificity : 0.9976          
##          Pos Pred Value : 0.9975          
##          Neg Pred Value : 0.9881          
##              Prevalence : 0.4927          
##          Detection Rate : 0.4866          
##    Detection Prevalence : 0.4878          
##       Balanced Accuracy : 0.9926          
##                                           
##        'Positive' Class : 0               
## 
#Matriz de Confusión del Resultado de la Prueba
mcrp3 <- confusionMatrix(resultado_prueba3, prueba$target)
mcrp3
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0  92   5
##          1   3 105
##                                          
##                Accuracy : 0.961          
##                  95% CI : (0.9246, 0.983)
##     No Information Rate : 0.5366         
##     P-Value [Acc > NIR] : <2e-16         
##                                          
##                   Kappa : 0.9216         
##                                          
##  Mcnemar's Test P-Value : 0.7237         
##                                          
##             Sensitivity : 0.9684         
##             Specificity : 0.9545         
##          Pos Pred Value : 0.9485         
##          Neg Pred Value : 0.9722         
##              Prevalence : 0.4634         
##          Detection Rate : 0.4488         
##    Detection Prevalence : 0.4732         
##       Balanced Accuracy : 0.9615         
##                                          
##        '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)

#Matriz de Confusión
#Es una tabla de evaluación 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 350  29
##          1  54 387
##                                           
##                Accuracy : 0.8988          
##                  95% CI : (0.8761, 0.9186)
##     No Information Rate : 0.5073          
##     P-Value [Acc > NIR] : < 2e-16         
##                                           
##                   Kappa : 0.7973          
##                                           
##  Mcnemar's Test P-Value : 0.00843         
##                                           
##             Sensitivity : 0.8663          
##             Specificity : 0.9303          
##          Pos Pred Value : 0.9235          
##          Neg Pred Value : 0.8776          
##              Prevalence : 0.4927          
##          Detection Rate : 0.4268          
##    Detection Prevalence : 0.4622          
##       Balanced Accuracy : 0.8983          
##                                           
##        'Positive' Class : 0               
## 
#Matriz de Confusión del Resultado de la Prueba
mcrp4 <- confusionMatrix(resultado_prueba4, prueba$target)
mcrp4
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  0  1
##          0 84 13
##          1 11 97
##                                           
##                Accuracy : 0.8829          
##                  95% CI : (0.8308, 0.9235)
##     No Information Rate : 0.5366          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.7649          
##                                           
##  Mcnemar's Test P-Value : 0.8383          
##                                           
##             Sensitivity : 0.8842          
##             Specificity : 0.8818          
##          Pos Pred Value : 0.8660          
##          Neg Pred Value : 0.8981          
##              Prevalence : 0.4634          
##          Detection Rate : 0.4098          
##    Detection Prevalence : 0.4732          
##       Balanced Accuracy : 0.8830          
##                                           
##        'Positive' Class : 0               
## 

Modelo 5. Bosques Aleatorios

modelo5 <- train(target~., data=entrenamiento,
                 method="rf", #Cambiar
                 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
#Es una tabla de evaluación 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 404   0
##          1   0 416
##                                      
##                Accuracy : 1          
##                  95% CI : (0.9955, 1)
##     No Information Rate : 0.5073     
##     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.4927     
##          Detection Rate : 0.4927     
##    Detection Prevalence : 0.4927     
##       Balanced Accuracy : 1.0000     
##                                      
##        'Positive' Class : 0          
## 
#Matriz de Confusión del Resultado de la Prueba
mcrp5 <- confusionMatrix(resultado_prueba5, prueba$target)
mcrp5
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0  95   0
##          1   0 110
##                                      
##                Accuracy : 1          
##                  95% CI : (0.9822, 1)
##     No Information Rate : 0.5366     
##     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.4634     
##          Detection Rate : 0.4634     
##    Detection Prevalence : 0.4634     
##       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)
                 #Cambiar
                 )
## # weights:  16
## initial  value 544.610093 
## iter  10 value 358.618810
## iter  20 value 299.326028
## iter  30 value 291.810733
## iter  40 value 282.694112
## iter  50 value 277.655210
## iter  60 value 264.910593
## final  value 264.711433 
## converged
## # weights:  46
## initial  value 548.448186 
## iter  10 value 247.834795
## iter  20 value 194.072794
## iter  30 value 164.003289
## iter  40 value 145.167139
## iter  50 value 138.313778
## iter  60 value 137.888908
## iter  70 value 137.876417
## iter  80 value 137.575070
## iter  90 value 137.574292
## final  value 137.574209 
## converged
## # weights:  76
## initial  value 561.243573 
## iter  10 value 237.423708
## iter  20 value 152.337313
## iter  30 value 126.903124
## iter  40 value 110.017376
## iter  50 value 102.838597
## iter  60 value 100.596838
## iter  70 value 100.530590
## iter  80 value 100.528791
## iter  90 value 100.528365
## final  value 100.527918 
## converged
## # weights:  16
## initial  value 527.437076 
## iter  10 value 337.250714
## iter  20 value 289.129067
## iter  30 value 286.457836
## iter  40 value 285.863968
## iter  50 value 282.559129
## iter  60 value 282.114012
## iter  70 value 282.108478
## iter  80 value 282.067977
## final  value 282.034838 
## converged
## # weights:  46
## initial  value 557.728177 
## iter  10 value 267.793321
## iter  20 value 218.033061
## iter  30 value 199.843547
## iter  40 value 190.872258
## iter  50 value 188.259268
## iter  60 value 186.055363
## iter  70 value 181.977686
## iter  80 value 179.625611
## iter  90 value 179.102378
## iter 100 value 179.067799
## final  value 179.067799 
## stopped after 100 iterations
## # weights:  76
## initial  value 509.051097 
## iter  10 value 236.754690
## iter  20 value 193.731116
## iter  30 value 159.490169
## iter  40 value 140.343452
## iter  50 value 133.432168
## iter  60 value 128.183723
## iter  70 value 123.615575
## iter  80 value 116.581909
## iter  90 value 115.438922
## iter 100 value 115.143653
## final  value 115.143653 
## stopped after 100 iterations
## # weights:  16
## initial  value 533.190876 
## iter  10 value 318.262183
## iter  20 value 276.813431
## iter  30 value 270.816903
## iter  40 value 260.541415
## iter  50 value 259.823521
## iter  60 value 259.244600
## iter  70 value 259.012949
## iter  80 value 259.004148
## iter  90 value 258.988635
## iter 100 value 258.984544
## final  value 258.984544 
## stopped after 100 iterations
## # weights:  46
## initial  value 534.468629 
## iter  10 value 305.283072
## iter  20 value 217.359168
## iter  30 value 185.635498
## iter  40 value 176.339763
## iter  50 value 175.708729
## iter  60 value 175.580554
## iter  70 value 175.522913
## iter  80 value 174.668463
## iter  90 value 173.014161
## iter 100 value 171.995113
## final  value 171.995113 
## stopped after 100 iterations
## # weights:  76
## initial  value 569.388407 
## iter  10 value 224.318443
## iter  20 value 143.785445
## iter  30 value 105.939852
## iter  40 value 97.129813
## iter  50 value 95.016947
## iter  60 value 89.950141
## iter  70 value 88.664691
## iter  80 value 88.241674
## iter  90 value 88.024418
## iter 100 value 87.884560
## final  value 87.884560 
## stopped after 100 iterations
## # weights:  16
## initial  value 511.367256 
## iter  10 value 311.541071
## iter  20 value 273.378876
## iter  30 value 264.962996
## iter  40 value 259.346730
## iter  50 value 256.253996
## iter  60 value 250.514872
## final  value 250.252789 
## converged
## # weights:  46
## initial  value 513.197966 
## iter  10 value 272.628511
## iter  20 value 195.516356
## iter  30 value 170.911004
## iter  40 value 158.194976
## iter  50 value 153.637689
## iter  60 value 153.598932
## iter  70 value 153.594607
## iter  80 value 153.594117
## final  value 153.593763 
## converged
## # weights:  76
## initial  value 535.680405 
## iter  10 value 225.916527
## iter  20 value 137.571566
## iter  30 value 104.385187
## iter  40 value 87.187437
## iter  50 value 78.470376
## iter  60 value 73.315381
## iter  70 value 67.752350
## iter  80 value 65.381941
## iter  90 value 65.132652
## iter 100 value 65.042485
## final  value 65.042485 
## stopped after 100 iterations
## # weights:  16
## initial  value 512.985910 
## iter  10 value 311.079696
## iter  20 value 278.262766
## iter  30 value 275.001181
## iter  40 value 270.059667
## iter  50 value 269.122643
## final  value 268.989207 
## converged
## # weights:  46
## initial  value 544.740309 
## iter  10 value 225.840799
## iter  20 value 199.084873
## iter  30 value 188.452239
## iter  40 value 182.817778
## iter  50 value 175.829607
## iter  60 value 171.976904
## iter  70 value 167.856670
## iter  80 value 165.572861
## iter  90 value 164.960552
## iter 100 value 164.722727
## final  value 164.722727 
## stopped after 100 iterations
## # weights:  76
## initial  value 510.346417 
## iter  10 value 223.264617
## iter  20 value 179.996044
## iter  30 value 154.943561
## iter  40 value 140.634593
## iter  50 value 136.788482
## iter  60 value 131.899555
## iter  70 value 129.456680
## iter  80 value 128.077386
## iter  90 value 124.438171
## iter 100 value 122.072537
## final  value 122.072537 
## stopped after 100 iterations
## # weights:  16
## initial  value 534.705555 
## iter  10 value 325.716570
## iter  20 value 263.399352
## iter  30 value 252.619598
## iter  40 value 251.260564
## iter  50 value 248.590500
## iter  60 value 237.068054
## iter  70 value 236.519650
## iter  80 value 236.400502
## final  value 236.400497 
## converged
## # weights:  46
## initial  value 632.389251 
## iter  10 value 224.157054
## iter  20 value 198.052741
## iter  30 value 176.329720
## iter  40 value 162.245417
## iter  50 value 158.051097
## iter  60 value 157.676797
## iter  70 value 157.427340
## iter  80 value 156.673926
## iter  90 value 156.311284
## iter 100 value 155.929190
## final  value 155.929190 
## stopped after 100 iterations
## # weights:  76
## initial  value 561.289321 
## iter  10 value 233.363562
## iter  20 value 163.013119
## iter  30 value 127.286076
## iter  40 value 104.109553
## iter  50 value 92.889056
## iter  60 value 77.344596
## iter  70 value 70.433736
## iter  80 value 65.263506
## iter  90 value 63.563702
## iter 100 value 63.147622
## final  value 63.147622 
## stopped after 100 iterations
## # weights:  16
## initial  value 546.522982 
## iter  10 value 317.651568
## iter  20 value 264.633792
## iter  30 value 258.556536
## iter  40 value 256.511964
## final  value 256.507844 
## converged
## # weights:  46
## initial  value 538.881187 
## iter  10 value 268.881594
## iter  20 value 219.200270
## iter  30 value 190.976889
## iter  40 value 176.024943
## iter  50 value 170.367011
## iter  60 value 169.659686
## final  value 169.659554 
## converged
## # weights:  76
## initial  value 547.803081 
## iter  10 value 260.216875
## iter  20 value 182.175907
## iter  30 value 153.818655
## iter  40 value 134.255881
## iter  50 value 121.721681
## iter  60 value 114.362747
## iter  70 value 108.383272
## iter  80 value 105.759782
## iter  90 value 101.900290
## iter 100 value 99.064680
## final  value 99.064680 
## stopped after 100 iterations
## # weights:  16
## initial  value 519.347837 
## iter  10 value 339.195994
## iter  20 value 284.797520
## iter  30 value 278.870820
## iter  40 value 275.590380
## iter  50 value 275.513500
## final  value 275.512555 
## converged
## # weights:  46
## initial  value 614.586920 
## iter  10 value 299.372948
## iter  20 value 239.373127
## iter  30 value 221.686108
## iter  40 value 215.506620
## iter  50 value 213.107944
## iter  60 value 212.772560
## iter  70 value 212.716158
## iter  80 value 212.716050
## iter  90 value 212.715021
## iter 100 value 212.708992
## final  value 212.708992 
## stopped after 100 iterations
## # weights:  76
## initial  value 581.226153 
## iter  10 value 264.948955
## iter  20 value 199.902558
## iter  30 value 166.640290
## iter  40 value 152.867688
## iter  50 value 142.658735
## iter  60 value 135.656181
## iter  70 value 134.061238
## iter  80 value 133.248955
## iter  90 value 133.146418
## iter 100 value 133.144857
## final  value 133.144857 
## stopped after 100 iterations
## # weights:  16
## initial  value 530.289728 
## iter  10 value 335.369892
## iter  20 value 285.825726
## iter  30 value 272.168642
## iter  40 value 263.649392
## iter  50 value 261.816327
## iter  60 value 251.731422
## iter  70 value 250.909631
## iter  80 value 250.610339
## iter  90 value 250.583448
## iter 100 value 250.550572
## final  value 250.550572 
## stopped after 100 iterations
## # weights:  46
## initial  value 542.862849 
## iter  10 value 247.993690
## iter  20 value 196.545269
## iter  30 value 171.731315
## iter  40 value 163.737086
## iter  50 value 159.808591
## iter  60 value 159.343272
## iter  70 value 159.140955
## iter  80 value 159.097123
## iter  90 value 159.035392
## iter 100 value 158.937617
## final  value 158.937617 
## stopped after 100 iterations
## # weights:  76
## initial  value 520.232577 
## iter  10 value 239.136450
## iter  20 value 166.257242
## iter  30 value 130.750713
## iter  40 value 108.363041
## iter  50 value 91.370090
## iter  60 value 79.737836
## iter  70 value 75.454893
## iter  80 value 74.882170
## iter  90 value 74.438385
## iter 100 value 74.088691
## final  value 74.088691 
## stopped after 100 iterations
## # weights:  16
## initial  value 517.189989 
## iter  10 value 276.772010
## iter  20 value 271.731820
## iter  30 value 263.503626
## iter  40 value 253.182514
## iter  50 value 246.807006
## final  value 246.798920 
## converged
## # weights:  46
## initial  value 560.024670 
## iter  10 value 268.628367
## iter  20 value 213.375962
## iter  30 value 181.506646
## iter  40 value 172.121429
## iter  50 value 161.395773
## iter  60 value 158.652201
## iter  70 value 158.632389
## final  value 158.632181 
## converged
## # weights:  76
## initial  value 585.991475 
## iter  10 value 249.909984
## iter  20 value 178.528732
## iter  30 value 142.502628
## iter  40 value 130.555372
## iter  50 value 123.165793
## iter  60 value 119.899597
## iter  70 value 119.123592
## iter  80 value 113.129138
## iter  90 value 113.057124
## iter 100 value 113.053048
## final  value 113.053048 
## stopped after 100 iterations
## # weights:  16
## initial  value 511.906263 
## iter  10 value 280.081061
## iter  20 value 277.042191
## iter  30 value 276.613363
## final  value 276.613080 
## converged
## # weights:  46
## initial  value 551.947288 
## iter  10 value 426.382852
## iter  20 value 280.272995
## iter  30 value 257.117880
## iter  40 value 234.944985
## iter  50 value 225.064079
## iter  60 value 219.412640
## iter  70 value 211.387259
## iter  80 value 203.119715
## iter  90 value 199.165036
## iter 100 value 198.707283
## final  value 198.707283 
## stopped after 100 iterations
## # weights:  76
## initial  value 537.780137 
## iter  10 value 242.919271
## iter  20 value 188.498894
## iter  30 value 164.708292
## iter  40 value 143.070972
## iter  50 value 130.915126
## iter  60 value 127.034537
## iter  70 value 123.598755
## iter  80 value 120.528501
## iter  90 value 118.968444
## iter 100 value 117.399943
## final  value 117.399943 
## stopped after 100 iterations
## # weights:  16
## initial  value 581.951550 
## iter  10 value 281.223174
## iter  20 value 274.628381
## iter  30 value 271.533987
## iter  40 value 270.724316
## iter  50 value 270.452389
## iter  60 value 269.904440
## iter  70 value 269.792691
## iter  80 value 269.782636
## iter  90 value 269.749979
## iter 100 value 269.718948
## final  value 269.718948 
## stopped after 100 iterations
## # weights:  46
## initial  value 533.765764 
## iter  10 value 326.512665
## iter  20 value 234.008989
## iter  30 value 191.572622
## iter  40 value 167.589293
## iter  50 value 153.467125
## iter  60 value 145.016692
## iter  70 value 143.856864
## iter  80 value 143.614667
## iter  90 value 143.498332
## iter 100 value 143.467843
## final  value 143.467843 
## stopped after 100 iterations
## # weights:  76
## initial  value 569.703750 
## iter  10 value 292.195563
## iter  20 value 198.432034
## iter  30 value 145.224401
## iter  40 value 121.351828
## iter  50 value 114.723011
## iter  60 value 114.110334
## iter  70 value 112.863556
## iter  80 value 112.121157
## iter  90 value 111.814002
## iter 100 value 111.681391
## final  value 111.681391 
## stopped after 100 iterations
## # weights:  16
## initial  value 533.527117 
## iter  10 value 288.283365
## iter  20 value 271.632101
## iter  30 value 253.939013
## iter  40 value 250.608734
## iter  50 value 250.523105
## iter  60 value 250.503985
## iter  70 value 250.494029
## iter  80 value 250.493068
## final  value 250.492860 
## converged
## # weights:  46
## initial  value 538.003560 
## iter  10 value 262.734491
## iter  20 value 204.611845
## iter  30 value 161.162173
## iter  40 value 139.000482
## iter  50 value 132.181152
## iter  60 value 127.614112
## iter  70 value 126.631282
## iter  80 value 126.345066
## iter  90 value 126.182390
## iter 100 value 126.170435
## final  value 126.170435 
## stopped after 100 iterations
## # weights:  76
## initial  value 662.629693 
## iter  10 value 262.024213
## iter  20 value 143.363291
## iter  30 value 90.499931
## iter  40 value 64.440592
## iter  50 value 58.570484
## iter  60 value 55.913811
## iter  70 value 53.074077
## iter  80 value 44.664109
## iter  90 value 41.990345
## iter 100 value 37.981103
## final  value 37.981103 
## stopped after 100 iterations
## # weights:  16
## initial  value 504.068297 
## iter  10 value 329.234305
## iter  20 value 296.603555
## iter  30 value 285.164237
## iter  40 value 284.887743
## iter  50 value 284.879597
## final  value 284.878876 
## converged
## # weights:  46
## initial  value 559.579344 
## iter  10 value 312.528289
## iter  20 value 239.584894
## iter  30 value 215.033872
## iter  40 value 203.179866
## iter  50 value 202.553250
## iter  60 value 202.201702
## iter  70 value 201.858878
## iter  80 value 201.857845
## final  value 201.857831 
## converged
## # weights:  76
## initial  value 690.389357 
## iter  10 value 298.526307
## iter  20 value 245.105509
## iter  30 value 211.932550
## iter  40 value 194.473906
## iter  50 value 168.239988
## iter  60 value 162.055167
## iter  70 value 159.182271
## iter  80 value 157.429742
## iter  90 value 156.201137
## iter 100 value 155.978654
## final  value 155.978654 
## stopped after 100 iterations
## # weights:  16
## initial  value 507.050062 
## iter  10 value 278.624739
## iter  20 value 263.275709
## iter  30 value 250.989217
## iter  40 value 250.414326
## iter  50 value 250.010532
## iter  60 value 249.989491
## iter  70 value 249.969741
## iter  80 value 249.955638
## iter  90 value 249.926448
## iter 100 value 249.883953
## final  value 249.883953 
## stopped after 100 iterations
## # weights:  46
## initial  value 513.216169 
## iter  10 value 247.862840
## iter  20 value 189.778520
## iter  30 value 177.137630
## iter  40 value 172.470643
## iter  50 value 168.284288
## iter  60 value 168.126446
## iter  70 value 167.903890
## iter  80 value 167.723593
## iter  90 value 167.558938
## iter 100 value 166.682272
## final  value 166.682272 
## stopped after 100 iterations
## # weights:  76
## initial  value 514.260545 
## iter  10 value 259.842118
## iter  20 value 202.838837
## iter  30 value 148.040653
## iter  40 value 133.947319
## iter  50 value 126.033419
## iter  60 value 122.194388
## iter  70 value 121.607115
## iter  80 value 120.502680
## iter  90 value 119.860341
## iter 100 value 119.588007
## final  value 119.588007 
## stopped after 100 iterations
## # weights:  16
## initial  value 520.010711 
## iter  10 value 269.387801
## iter  20 value 261.517943
## iter  30 value 261.174973
## iter  40 value 258.510065
## iter  50 value 247.766249
## final  value 247.739754 
## converged
## # weights:  46
## initial  value 558.442364 
## iter  10 value 262.970991
## iter  20 value 224.641358
## iter  30 value 169.737321
## iter  40 value 138.538928
## iter  50 value 126.761490
## iter  60 value 121.950890
## iter  70 value 119.557565
## iter  80 value 114.678558
## iter  90 value 111.430476
## iter 100 value 110.145942
## final  value 110.145942 
## stopped after 100 iterations
## # weights:  76
## initial  value 497.363536 
## iter  10 value 213.470836
## iter  20 value 157.830527
## iter  30 value 111.908448
## iter  40 value 92.626429
## iter  50 value 87.414868
## iter  60 value 85.779128
## iter  70 value 84.875316
## iter  80 value 84.704726
## iter  90 value 84.500974
## iter 100 value 84.426047
## final  value 84.426047 
## stopped after 100 iterations
## # weights:  16
## initial  value 522.493754 
## iter  10 value 312.194554
## iter  20 value 282.555513
## iter  30 value 274.943534
## iter  40 value 273.028421
## iter  50 value 272.967574
## final  value 272.965112 
## converged
## # weights:  46
## initial  value 521.630978 
## iter  10 value 286.596926
## iter  20 value 230.310719
## iter  30 value 205.807595
## iter  40 value 189.208105
## iter  50 value 185.816347
## iter  60 value 185.658098
## iter  70 value 185.642023
## iter  80 value 185.639686
## iter  80 value 185.639685
## iter  80 value 185.639685
## final  value 185.639685 
## converged
## # weights:  76
## initial  value 529.730150 
## iter  10 value 252.418416
## iter  20 value 194.564352
## iter  30 value 174.482755
## iter  40 value 162.749514
## iter  50 value 155.195145
## iter  60 value 149.103061
## iter  70 value 147.928284
## iter  80 value 147.692990
## iter  90 value 147.654293
## iter 100 value 147.650692
## final  value 147.650692 
## stopped after 100 iterations
## # weights:  16
## initial  value 563.902518 
## iter  10 value 287.521678
## iter  20 value 265.800577
## iter  30 value 255.590968
## iter  40 value 252.554469
## iter  50 value 251.653888
## iter  60 value 251.545703
## final  value 251.374554 
## converged
## # weights:  46
## initial  value 555.996124 
## iter  10 value 245.390984
## iter  20 value 196.910017
## iter  30 value 181.043915
## iter  40 value 165.477433
## iter  50 value 155.017054
## iter  60 value 153.802627
## iter  70 value 152.555232
## iter  80 value 152.134802
## iter  90 value 151.623358
## iter 100 value 151.248986
## final  value 151.248986 
## stopped after 100 iterations
## # weights:  76
## initial  value 525.259795 
## iter  10 value 253.230227
## iter  20 value 178.945108
## iter  30 value 114.153691
## iter  40 value 96.658859
## iter  50 value 94.726314
## iter  60 value 93.292943
## iter  70 value 92.639171
## iter  80 value 92.352448
## iter  90 value 92.276104
## iter 100 value 92.210634
## final  value 92.210634 
## stopped after 100 iterations
## # weights:  16
## initial  value 520.184236 
## iter  10 value 266.062578
## iter  20 value 255.389044
## iter  30 value 238.941995
## iter  40 value 232.943275
## iter  50 value 232.740344
## iter  60 value 232.707502
## iter  70 value 232.697841
## iter  80 value 232.693786
## iter  90 value 232.689282
## iter 100 value 232.676530
## final  value 232.676530 
## stopped after 100 iterations
## # weights:  46
## initial  value 515.954357 
## iter  10 value 240.690497
## iter  20 value 194.079962
## iter  30 value 180.992860
## iter  40 value 159.444295
## iter  50 value 147.913958
## iter  60 value 146.982527
## iter  70 value 146.971057
## iter  80 value 146.969747
## final  value 146.969736 
## converged
## # weights:  76
## initial  value 527.600087 
## iter  10 value 279.301507
## iter  20 value 153.705357
## iter  30 value 117.694807
## iter  40 value 105.676788
## iter  50 value 101.111480
## iter  60 value 100.255952
## iter  70 value 99.911513
## iter  80 value 99.888363
## iter  90 value 99.855846
## iter 100 value 93.741062
## final  value 93.741062 
## stopped after 100 iterations
## # weights:  16
## initial  value 600.380622 
## iter  10 value 330.468858
## iter  20 value 272.428189
## iter  30 value 271.645064
## iter  40 value 271.640761
## iter  50 value 271.638617
## final  value 271.638447 
## converged
## # weights:  46
## initial  value 561.017956 
## iter  10 value 260.778456
## iter  20 value 236.454280
## iter  30 value 223.140220
## iter  40 value 220.950003
## iter  50 value 220.465043
## iter  60 value 220.160686
## iter  70 value 217.273535
## iter  80 value 216.222416
## iter  90 value 216.195113
## final  value 216.194793 
## converged
## # weights:  76
## initial  value 518.035748 
## iter  10 value 240.133368
## iter  20 value 174.483839
## iter  30 value 157.048848
## iter  40 value 142.793685
## iter  50 value 132.751543
## iter  60 value 126.619258
## iter  70 value 121.868328
## iter  80 value 117.930562
## iter  90 value 111.174630
## iter 100 value 110.313975
## final  value 110.313975 
## stopped after 100 iterations
## # weights:  16
## initial  value 542.145530 
## iter  10 value 285.385295
## iter  20 value 262.242113
## iter  30 value 253.848327
## iter  40 value 246.721819
## iter  50 value 246.172109
## iter  60 value 245.466698
## iter  70 value 245.453287
## iter  80 value 245.447297
## iter  90 value 245.447059
## iter 100 value 245.446642
## final  value 245.446642 
## stopped after 100 iterations
## # weights:  46
## initial  value 514.605210 
## iter  10 value 254.927418
## iter  20 value 235.783620
## iter  30 value 202.961864
## iter  40 value 185.063408
## iter  50 value 174.654352
## iter  60 value 173.022851
## iter  70 value 172.271456
## iter  80 value 171.868741
## iter  90 value 171.224953
## iter 100 value 169.371039
## final  value 169.371039 
## stopped after 100 iterations
## # weights:  76
## initial  value 558.976540 
## iter  10 value 249.267392
## iter  20 value 182.128920
## iter  30 value 151.480587
## iter  40 value 131.353027
## iter  50 value 115.336004
## iter  60 value 110.417040
## iter  70 value 103.395859
## iter  80 value 99.435353
## iter  90 value 98.320036
## iter 100 value 97.958123
## final  value 97.958123 
## stopped after 100 iterations
## # weights:  16
## initial  value 558.525549 
## iter  10 value 346.930018
## iter  20 value 272.212466
## iter  30 value 261.649322
## iter  40 value 253.906210
## iter  50 value 248.639850
## iter  60 value 226.344629
## iter  70 value 225.976383
## iter  80 value 225.975185
## final  value 225.974975 
## converged
## # weights:  46
## initial  value 516.793263 
## iter  10 value 359.507056
## iter  20 value 250.871505
## iter  30 value 205.354047
## iter  40 value 173.184422
## iter  50 value 159.233056
## iter  60 value 151.209541
## iter  70 value 146.079547
## iter  80 value 139.250818
## iter  90 value 135.028139
## iter 100 value 130.737062
## final  value 130.737062 
## stopped after 100 iterations
## # weights:  76
## initial  value 535.800686 
## iter  10 value 221.213032
## iter  20 value 132.425804
## iter  30 value 87.290785
## iter  40 value 80.464806
## iter  50 value 74.711920
## iter  60 value 69.668454
## iter  70 value 67.171038
## iter  80 value 66.465502
## iter  90 value 66.278287
## iter 100 value 65.955177
## final  value 65.955177 
## stopped after 100 iterations
## # weights:  16
## initial  value 553.166874 
## iter  10 value 273.929921
## iter  20 value 262.035843
## iter  30 value 261.398548
## final  value 261.398121 
## converged
## # weights:  46
## initial  value 550.085298 
## iter  10 value 358.269664
## iter  20 value 264.412256
## iter  30 value 237.606088
## iter  40 value 230.215777
## iter  50 value 225.159372
## iter  60 value 223.077643
## iter  70 value 221.998252
## iter  80 value 207.478242
## iter  90 value 201.337266
## iter 100 value 201.195244
## final  value 201.195244 
## stopped after 100 iterations
## # weights:  76
## initial  value 553.044902 
## iter  10 value 255.474580
## iter  20 value 198.973325
## iter  30 value 163.777824
## iter  40 value 143.740422
## iter  50 value 125.670389
## iter  60 value 116.031557
## iter  70 value 107.340406
## iter  80 value 100.032754
## iter  90 value 97.455300
## iter 100 value 96.838478
## final  value 96.838478 
## stopped after 100 iterations
## # weights:  16
## initial  value 483.431285 
## iter  10 value 285.259016
## iter  20 value 249.305139
## iter  30 value 232.722551
## iter  40 value 230.750570
## iter  50 value 230.552656
## iter  60 value 230.529007
## iter  70 value 230.485411
## iter  80 value 230.479254
## iter  90 value 230.469747
## iter 100 value 230.453879
## final  value 230.453879 
## stopped after 100 iterations
## # weights:  46
## initial  value 512.150380 
## iter  10 value 256.204941
## iter  20 value 206.350443
## iter  30 value 183.721835
## iter  40 value 173.215975
## iter  50 value 172.587972
## iter  60 value 172.327138
## iter  70 value 172.061150
## iter  80 value 171.660630
## iter  90 value 170.847407
## iter 100 value 170.497618
## final  value 170.497618 
## stopped after 100 iterations
## # weights:  76
## initial  value 627.770975 
## iter  10 value 218.142439
## iter  20 value 151.149746
## iter  30 value 110.273196
## iter  40 value 95.700785
## iter  50 value 87.821327
## iter  60 value 85.623754
## iter  70 value 84.043433
## iter  80 value 81.757341
## iter  90 value 80.577638
## iter 100 value 79.772707
## final  value 79.772707 
## stopped after 100 iterations
## # weights:  16
## initial  value 513.999502 
## iter  10 value 273.299608
## iter  20 value 255.389167
## iter  30 value 252.152809
## iter  40 value 252.025425
## final  value 252.025307 
## converged
## # weights:  46
## initial  value 493.809854 
## iter  10 value 202.788100
## iter  20 value 169.939608
## iter  30 value 149.944588
## iter  40 value 138.510747
## iter  50 value 134.480797
## iter  60 value 133.249473
## iter  70 value 132.006029
## iter  80 value 130.662389
## iter  90 value 129.382854
## iter 100 value 128.635700
## final  value 128.635700 
## stopped after 100 iterations
## # weights:  76
## initial  value 521.571179 
## iter  10 value 211.561697
## iter  20 value 120.848250
## iter  30 value 107.318581
## iter  40 value 101.766435
## iter  50 value 98.329282
## iter  60 value 96.702635
## iter  70 value 96.238847
## iter  80 value 95.561048
## iter  90 value 95.376476
## iter 100 value 95.360748
## final  value 95.360748 
## stopped after 100 iterations
## # weights:  16
## initial  value 543.054373 
## iter  10 value 325.069575
## iter  20 value 298.097016
## iter  30 value 268.527968
## iter  40 value 266.866551
## iter  50 value 266.842849
## final  value 266.837800 
## converged
## # weights:  46
## initial  value 602.171398 
## iter  10 value 292.767044
## iter  20 value 245.281856
## iter  30 value 231.612182
## iter  40 value 226.821141
## iter  50 value 225.563124
## iter  60 value 225.345637
## iter  70 value 225.113223
## final  value 225.105360 
## converged
## # weights:  76
## initial  value 548.450435 
## iter  10 value 240.646320
## iter  20 value 186.789464
## iter  30 value 164.334564
## iter  40 value 153.916035
## iter  50 value 142.384971
## iter  60 value 137.119338
## iter  70 value 135.425464
## iter  80 value 135.137217
## iter  90 value 134.896556
## iter 100 value 134.141136
## final  value 134.141136 
## stopped after 100 iterations
## # weights:  16
## initial  value 553.212700 
## iter  10 value 292.292273
## iter  20 value 257.873239
## iter  30 value 253.869766
## iter  40 value 253.025231
## iter  50 value 252.718888
## iter  60 value 252.563492
## iter  70 value 252.518524
## iter  80 value 252.515046
## iter  90 value 252.512908
## iter 100 value 252.512375
## final  value 252.512375 
## stopped after 100 iterations
## # weights:  46
## initial  value 542.799153 
## iter  10 value 277.518635
## iter  20 value 216.980149
## iter  30 value 187.939446
## iter  40 value 176.587104
## iter  50 value 163.633434
## iter  60 value 160.618779
## iter  70 value 160.127182
## iter  80 value 159.623648
## iter  90 value 158.765781
## iter 100 value 158.432302
## final  value 158.432302 
## stopped after 100 iterations
## # weights:  76
## initial  value 561.355207 
## iter  10 value 233.063725
## iter  20 value 161.828384
## iter  30 value 119.443013
## iter  40 value 99.066891
## iter  50 value 89.427533
## iter  60 value 81.607883
## iter  70 value 72.369094
## iter  80 value 61.356795
## iter  90 value 56.846039
## iter 100 value 54.537412
## final  value 54.537412 
## stopped after 100 iterations
## # weights:  16
## initial  value 508.927217 
## iter  10 value 262.293960
## iter  20 value 255.162587
## iter  30 value 238.918973
## iter  40 value 237.061213
## iter  50 value 236.990577
## iter  60 value 236.973437
## final  value 236.964288 
## converged
## # weights:  46
## initial  value 563.387822 
## iter  10 value 318.755630
## iter  20 value 264.187632
## iter  30 value 218.465508
## iter  40 value 177.680423
## iter  50 value 153.457528
## iter  60 value 138.935419
## iter  70 value 128.328654
## iter  80 value 125.019870
## iter  90 value 124.866428
## iter 100 value 124.740415
## final  value 124.740415 
## stopped after 100 iterations
## # weights:  76
## initial  value 519.040229 
## iter  10 value 226.227373
## iter  20 value 158.444309
## iter  30 value 141.827386
## iter  40 value 134.046691
## iter  50 value 130.825811
## iter  60 value 130.039093
## iter  70 value 129.954606
## iter  80 value 129.933542
## iter  90 value 129.931711
## iter 100 value 129.906839
## final  value 129.906839 
## stopped after 100 iterations
## # weights:  16
## initial  value 535.194429 
## iter  10 value 315.176663
## iter  20 value 272.522984
## iter  30 value 265.427473
## iter  40 value 265.077136
## final  value 265.056975 
## converged
## # weights:  46
## initial  value 529.638238 
## iter  10 value 271.882187
## iter  20 value 224.520535
## iter  30 value 212.850992
## iter  40 value 211.895771
## iter  50 value 211.844715
## iter  60 value 211.837980
## final  value 211.837580 
## converged
## # weights:  76
## initial  value 540.219659 
## iter  10 value 252.497267
## iter  20 value 199.726909
## iter  30 value 177.998430
## iter  40 value 164.963109
## iter  50 value 154.520413
## iter  60 value 144.480463
## iter  70 value 127.962615
## iter  80 value 117.601141
## iter  90 value 113.669993
## iter 100 value 107.080419
## final  value 107.080419 
## stopped after 100 iterations
## # weights:  16
## initial  value 515.163111 
## iter  10 value 356.422074
## iter  20 value 282.572005
## iter  30 value 264.703543
## iter  40 value 263.160493
## iter  50 value 262.901109
## iter  60 value 262.407078
## iter  70 value 262.320820
## iter  80 value 262.292986
## iter  90 value 262.259622
## iter 100 value 262.239785
## final  value 262.239785 
## stopped after 100 iterations
## # weights:  46
## initial  value 559.103323 
## iter  10 value 239.286581
## iter  20 value 183.568880
## iter  30 value 153.221590
## iter  40 value 139.456447
## iter  50 value 116.108193
## iter  60 value 111.299629
## iter  70 value 110.365403
## iter  80 value 108.254053
## iter  90 value 107.681272
## iter 100 value 107.290366
## final  value 107.290366 
## stopped after 100 iterations
## # weights:  76
## initial  value 577.277872 
## iter  10 value 228.474344
## iter  20 value 115.206654
## iter  30 value 90.301554
## iter  40 value 83.768828
## iter  50 value 81.459432
## iter  60 value 80.197091
## iter  70 value 79.521889
## iter  80 value 79.103893
## iter  90 value 79.016289
## iter 100 value 78.833948
## final  value 78.833948 
## stopped after 100 iterations
## # weights:  76
## initial  value 590.865416 
## iter  10 value 316.734938
## iter  20 value 247.768556
## iter  30 value 203.844215
## iter  40 value 183.753682
## iter  50 value 175.616470
## iter  60 value 170.116309
## iter  70 value 164.525353
## iter  80 value 158.573162
## iter  90 value 147.870377
## iter 100 value 138.659472
## final  value 138.659472 
## stopped after 100 iterations
resultado_entrenamiento6 <- predict(modelo6,entrenamiento)
resultado_prueba6 <- predict(modelo6,prueba)

#Matriz de Confusión
#Es una tabla de evaluación que desglosa el rendimiento del modelo de clasificación

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

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

Tabla de Resultado

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"]),
  "rt" = 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 rt
## Exactitud del Entrenamiento 0.8426829 0.9097561 0.9926829 0.8987805  1
## Exactitud de la Prueba      0.8634146 0.9219512 0.9609756 0.8829268  1
##                                  nnet
## Exactitud del Entrenamiento 0.9756098
## Exactitud de la Prueba      0.9560976

Conclusión

En conclusión, el modelo de Random Forrest es el recomendado para la clasificación del corazón.

LS0tCiAgdGl0bGU6ICJDQVJFVCAtIEhlYXJ0IgogIGF1dGhvcjogIkRheXJhIExleXZhIEEwMDgzOTExMSIKICBkYXRlOiAiMjAyNi0wOC0yNiIKICBvdXRwdXQ6CiAgICBodG1sX2RvY3VtZW50OgogICAgICB0b2M6IFRSVUUKICAgICAgdG9jX2Zsb2F0OiBUUlVFCiAgICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKICAgICAgdGhlbWU6IHNhbmRzdG9uZQotLS0KCjxjZW50ZXI+CiFbXShodHRwczovL3VzYWdpZi5jb20vd3AtY29udGVudC91cGxvYWRzL2dpZi1oZWFydC01MS5naWYpCjxjZW50ZXI+CgoKIyA8c3BhbiBzdHlsZSA9ImNvbG9yOnJlZCI+VGVvcsOtYTwvc3Bhbj4KRWwgcGFxdWV0ZSAqKkNBUkVUIChDbGFzc2lmaWNhdGlvbiBBbmQgUmVncmVzc2lvbiBUcmFpbmluZykqKiBlcyB1biBwYXF1ZXRlIGludGVncmFsIGNvbiB1bmEgYW1wbGlhIHZhcmllZGFkIGRlIGFsZ29yaXRtb3MgcGFyYSBlbCBhcHJlbmRpemFqZSBhdXRvbcOhdGljby4gCgojIDxzcGFuIHN0eWxlID0iY29sb3I6cmVkIj5JbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXLDrWFzPC9zcGFuPgpgYGB7cn0KI2luc3RhbGwucGFja2FnZXMoImNhcmV0IikgI01vZGVsb3MgZGUgQXByZW5kaXphamUgQXV0b23DoXRpY28KbGlicmFyeShjYXJldCkKI2luc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIpICNNYW5pcHVsYWNpw7NuIGRlIGRhdG9zCmxpYnJhcnkodGlkeXZlcnNlKSAKI2luc3RhbGwucGFja2FnZXMoInBST0MiKSAjQ8OhbGN1bG8gZGVsIMOhcmVhIGJham8gbGEgY3VydmEKI2xpYnJhcnkocFJPQykKI2luc3RhbGwucGFja2FnZXMoImdncGxvdDIiKSAjR3LDoWZpY2FzCmxpYnJhcnkoZ2dwbG90MikKI2luc3RhbGwucGFja2FnZXMoImxhdHRpY2UiKSAjQ3JlYXIgZ3LDoWZpY29zCmxpYnJhcnkobGF0dGljZSkKI2luc3RhbGwucGFja2FnZXMoImRhdGFzZXRzIikgI1VzYXIgYmFzZXMgZGUgZGF0b3MgcHJlY2FyZ2FkYXMKbGlicmFyeShkYXRhc2V0cykKI2luc3RhbGwucGFja2FnZXMoIkRhdGFFeHBsb3JlciIpICNBbsOhbGlzaXMgRGVzY3JpcHRpdm8KbGlicmFyeShEYXRhRXhwbG9yZXIpCiNpbnN0YWxsLnBhY2thZ2VzKCJrZXJubGFiIikgIwpsaWJyYXJ5KGtlcm5sYWIpCiNpbnN0YWxsLnBhY2thZ2VzKCJyYW5kb21Gb3Jlc3QiKSAjw4FyYm9sIGRlIGRlY2lzaW9uZXMKbGlicmFyeShyYW5kb21Gb3Jlc3QpCiNpbnN0YWxsLnBhY2thZ2VzKCJyZWFkeGwiKSAjIExlZXIgRXhjZWwKbGlicmFyeShyZWFkeGwpCmBgYAoKIyA8c3BhbiBzdHlsZSA9ImNvbG9yOnJlZCI+Q2FyZ2FyIGxhIGJhc2UgZGUgZGF0b3M8L3NwYW4+CmBgYHtyfQpkZiA8LXJlYWRfeGxzeCgiL1VzZXJzL2RheXJhbm9lbHlhL0Rvd25sb2Fkcy9oZWFydC54bHN4IikKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkIj5FbnRlbmRlciBsYSBiYXNlIGRlIGRhdG9zPC9zcGFuPgpgYGB7cn0Kc3VtbWFyeShkZikKc3RyKGRmKQojY3JlYXRlX3JlcG9ydChkZikKcGxvdF9taXNzaW5nKGRmKQpwbG90X2hpc3RvZ3JhbShkZikKcGxvdF9jb3JyZWxhdGlvbihkZikKc3RyKGRmKQpgYGAKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQiPlBhcnRpciBsYSBiYXNlIGRlIGRhdG9zPC9zcGFuPgpgYGB7cn0KIyBOb3JtYWxtZW50ZSA4MC0yMCBvIDcwLTMwCnNldC5zZWVkKDEyMykKcmVuZ2xvbmVzX2VudHJlbmFtaWVudG8gPC0gY3JlYXRlRGF0YVBhcnRpdGlvbihkZiR0YXJnZXQsIHA9MC44LCBsaXN0PUZBTFNFKQplbnRyZW5hbWllbnRvIDwtIGRmW3Jlbmdsb25lc19lbnRyZW5hbWllbnRvLCBdCnBydWViYSA8LSBkZlstcmVuZ2xvbmVzX2VudHJlbmFtaWVudG8sIF0KYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkIj5EaXN0aW50b3MgdGlwb3MgZGUgTcOpdG9kb3MgcGFyYSBNb2RlbGFyPC9zcGFuPgpMb3MgbcOpdG9kb3MgbcOhcyB1dGlsaXphZG9zIHBhcmEgbW9kZWxhciBhcHJlbmRpemFqZSBhdXRvbcOhdGljbyBzb246IAoKKiAqKlNWTSoqOiAqU3VwcG9ydCBWZWN0b3IgTWFjaGluZSogbyBNw6FxdWluYSBkZSBWZWN0b3JlcyBkZSBTb3BvcnRlLiBIYXkgdmFyaW9zIHN1YnRpcG9zOiBMaW5lYWwgKHN2bUxpbmVhciksIFJhZGlhbCAoc3ZtUmFkaWFsKSwgUG9saW7Ds21pY28gKHN2blBvbHkpLCBldGMuICAKKiAqKsOBcmJvbCBkZSBEZWNpc2nDs24qKjogcnBhcnQKKiAqKlJlZGVycyBOZXVyb25hbGVzKio6IG5uZXQKKiAqKlJhbmRvbSBGb3Jlc3QqKiBvIEJvc3F1ZXMgQWxlYXRvcmlvczogcmYKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQiPk1vZGVsbyAxLiBTVk0gTGluZWFsPC9zcGFuPgpgYGB7cn0KZW50cmVuYW1pZW50byR0YXJnZXQgPC0gYXMuZmFjdG9yKGVudHJlbmFtaWVudG8kdGFyZ2V0KQpwcnVlYmEkdGFyZ2V0IDwtIGFzLmZhY3RvcihwcnVlYmEkdGFyZ2V0KQoKbW9kZWxvMSA8LSB0cmFpbih0YXJnZXR+LiwgZGF0YT1lbnRyZW5hbWllbnRvLAogICAgICAgICAgICAgICAgIG1ldGhvZD0ic3ZtTGluZWFyIiwgI0NhbWJpYXIKICAgICAgICAgICAgICAgICBwcmVQcm9jZXNzID0gYygic2NhbGUiLCJjZW50ZXIiKSwKICAgICAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kPSJjdiIsIG51bWJlcj0xMCksCiAgICAgICAgICAgICAgICAgdHVuZUdyaWRlID0gZGF0YS5mcmFtZShDPTEpICNDYW1iaWFyCiAgICAgICAgICAgICAgICAgKQoKcmVzdWx0YWRvX2VudHJlbmFtaWVudG8xIDwtIHByZWRpY3QobW9kZWxvMSxlbnRyZW5hbWllbnRvKQpyZXN1bHRhZG9fcHJ1ZWJhMSA8LSBwcmVkaWN0KG1vZGVsbzEscHJ1ZWJhKQoKI01hdHJpeiBkZSBDb25mdXNpw7NuCiNFcyB1bmEgdGFibGEgZGUgZXZhbHVhY2nDs24gcXVlIGRlc2dsb3NhIGVsIHJlbmRpbWllbnRvIGRlbCBtb2RlbG8gZGUgY2xhc2lmaWNhY2nDs24KCiNNYXRyaXogZGUgQ29uZnVzacOzbiBkZWwgUmVzdWx0YWRvIGRlIEVudHJlbmFtaWVudG8KbWNyZTEgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvMSxlbnRyZW5hbWllbnRvJHRhcmdldCkKbWNyZTEKCiNNYXRyaXogZGUgQ29uZnVzacOzbiBkZWwgUmVzdWx0YWRvIGRlIGxhIFBydWViYQptY3JwMSA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTEsIHBydWViYSR0YXJnZXQpCm1jcnAxCmBgYAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZCI+TW9kZWxvIDIuIFNWTSBSYWRpYWw8L3NwYW4+CmBgYHtyfQptb2RlbG8yIDwtIHRyYWluKHRhcmdldH4uLCBkYXRhPWVudHJlbmFtaWVudG8sCiAgICAgICAgICAgICAgICAgbWV0aG9kPSJzdm1SYWRpYWwiLCAjQ2FtYmlhcgogICAgICAgICAgICAgICAgIHByZVByb2Nlc3MgPSBjKCJzY2FsZSIsImNlbnRlciIpLAogICAgICAgICAgICAgICAgIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2Q9ImN2IiwgbnVtYmVyPTEwKSwKICAgICAgICAgICAgICAgICB0dW5lR3JpZGUgPSBkYXRhLmZyYW1lKHNpZ21hPTEsQz0xKSAjQ2FtYmlhcgogICAgICAgICAgICAgICAgICkKCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvMiA8LSBwcmVkaWN0KG1vZGVsbzIsZW50cmVuYW1pZW50bykKcmVzdWx0YWRvX3BydWViYTIgPC0gcHJlZGljdChtb2RlbG8yLHBydWViYSkKCiNNYXRyaXogZGUgQ29uZnVzacOzbgojRXMgdW5hIHRhYmxhIGRlIGV2YWx1YWNpw7NuIHF1ZSBkZXNnbG9zYSBlbCByZW5kaW1pZW50byBkZWwgbW9kZWxvIGRlIGNsYXNpZmljYWNpw7NuCgojTWF0cml6IGRlIENvbmZ1c2nDs24gZGVsIFJlc3VsdGFkbyBkZSBFbnRyZW5hbWllbnRvCm1jcmUyIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzIsZW50cmVuYW1pZW50byR0YXJnZXQpCm1jcmUyCgojTWF0cml6IGRlIENvbmZ1c2nDs24gZGVsIFJlc3VsdGFkbyBkZSBsYSBQcnVlYmEKbWNycDIgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmEyLCBwcnVlYmEkdGFyZ2V0KQptY3JwMgpgYGAKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQiPk1vZGVsbyAzLiBTVk0gUG9saW7Ds21pY288L3NwYW4+CmBgYHtyfQptb2RlbG8zIDwtIHRyYWluKHRhcmdldH4uLCBkYXRhPWVudHJlbmFtaWVudG8sCiAgICAgICAgICAgICAgICAgbWV0aG9kPSJzdm1Qb2x5IiwgI0NhbWJpYXIKICAgICAgICAgICAgICAgICBwcmVQcm9jZXNzID0gYygic2NhbGUiLCJjZW50ZXIiKSwKICAgICAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kPSJjdiIsIG51bWJlcj0xMCksCiAgICAgICAgICAgICAgICAgdHVuZUdyaWRlID0gZGF0YS5mcmFtZShkZWdyZWU9MSxzaWdtYT0xLEM9MSkgI0NhbWJpYXIKICAgICAgICAgICAgICAgICApCgpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzMgPC0gcHJlZGljdChtb2RlbG8zLGVudHJlbmFtaWVudG8pCnJlc3VsdGFkb19wcnVlYmEzIDwtIHByZWRpY3QobW9kZWxvMyxwcnVlYmEpCgojTWF0cml6IGRlIENvbmZ1c2nDs24KI0VzIHVuYSB0YWJsYSBkZSBldmFsdWFjacOzbiBxdWUgZGVzZ2xvc2EgZWwgcmVuZGltaWVudG8gZGVsIG1vZGVsbyBkZSBjbGFzaWZpY2FjacOzbgoKI01hdHJpeiBkZSBDb25mdXNpw7NuIGRlbCBSZXN1bHRhZG8gZGUgRW50cmVuYW1pZW50bwptY3JlMyA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG8zLGVudHJlbmFtaWVudG8kdGFyZ2V0KQptY3JlMwoKI01hdHJpeiBkZSBDb25mdXNpw7NuIGRlbCBSZXN1bHRhZG8gZGUgbGEgUHJ1ZWJhCm1jcnAzIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhMywgcHJ1ZWJhJHRhcmdldCkKbWNycDMKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkIj5Nb2RlbG8gNC4gw4FyYm9sIGRlIERlY2lzacOzbjwvc3Bhbj4KYGBge3J9Cm1vZGVsbzQgPC0gdHJhaW4odGFyZ2V0fi4sIGRhdGE9ZW50cmVuYW1pZW50bywKICAgICAgICAgICAgICAgICBtZXRob2Q9InJwYXJ0IiwgI0NhbWJpYXIKICAgICAgICAgICAgICAgICBwcmVQcm9jZXNzID0gYygic2NhbGUiLCJjZW50ZXIiKSwKICAgICAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kPSJjdiIsIG51bWJlcj0xMCksCiAgICAgICAgICAgICAgICAgdHVuZUxlbmd0aCA9IDEwICNDYW1iaWFyCiAgICAgICAgICAgICAgICAgKQoKcmVzdWx0YWRvX2VudHJlbmFtaWVudG80IDwtIHByZWRpY3QobW9kZWxvNCxlbnRyZW5hbWllbnRvKQpyZXN1bHRhZG9fcHJ1ZWJhNCA8LSBwcmVkaWN0KG1vZGVsbzQscHJ1ZWJhKQoKI01hdHJpeiBkZSBDb25mdXNpw7NuCiNFcyB1bmEgdGFibGEgZGUgZXZhbHVhY2nDs24gcXVlIGRlc2dsb3NhIGVsIHJlbmRpbWllbnRvIGRlbCBtb2RlbG8gZGUgY2xhc2lmaWNhY2nDs24KCiNNYXRyaXogZGUgQ29uZnVzacOzbiBkZWwgUmVzdWx0YWRvIGRlIEVudHJlbmFtaWVudG8KbWNyZTQgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvNCxlbnRyZW5hbWllbnRvJHRhcmdldCkKbWNyZTQKCiNNYXRyaXogZGUgQ29uZnVzacOzbiBkZWwgUmVzdWx0YWRvIGRlIGxhIFBydWViYQptY3JwNCA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTQsIHBydWViYSR0YXJnZXQpCm1jcnA0CmBgYAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZCI+TW9kZWxvIDUuIEJvc3F1ZXMgQWxlYXRvcmlvczwvc3Bhbj4KYGBge3J9Cm1vZGVsbzUgPC0gdHJhaW4odGFyZ2V0fi4sIGRhdGE9ZW50cmVuYW1pZW50bywKICAgICAgICAgICAgICAgICBtZXRob2Q9InJmIiwgI0NhbWJpYXIKICAgICAgICAgICAgICAgICBwcmVQcm9jZXNzID0gYygic2NhbGUiLCJjZW50ZXIiKSwKICAgICAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kPSJjdiIsIG51bWJlcj0xMCksCiAgICAgICAgICAgICAgICAgdHVuZUdyaWQgPSBleHBhbmQuZ3JpZChtdHJ5PWMoMiw0LDYpKSAjQ2FtYmlhcgogICAgICAgICAgICAgICAgICkKCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvNSA8LSBwcmVkaWN0KG1vZGVsbzUsZW50cmVuYW1pZW50bykKcmVzdWx0YWRvX3BydWViYTUgPC0gcHJlZGljdChtb2RlbG81LHBydWViYSkKCiNNYXRyaXogZGUgQ29uZnVzacOzbgojRXMgdW5hIHRhYmxhIGRlIGV2YWx1YWNpw7NuIHF1ZSBkZXNnbG9zYSBlbCByZW5kaW1pZW50byBkZWwgbW9kZWxvIGRlIGNsYXNpZmljYWNpw7NuCgojTWF0cml6IGRlIENvbmZ1c2nDs24gZGVsIFJlc3VsdGFkbyBkZSBFbnRyZW5hbWllbnRvCm1jcmU1IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzUsZW50cmVuYW1pZW50byR0YXJnZXQpCm1jcmU1CgojTWF0cml6IGRlIENvbmZ1c2nDs24gZGVsIFJlc3VsdGFkbyBkZSBsYSBQcnVlYmEKbWNycDUgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmE1LCBwcnVlYmEkdGFyZ2V0KQptY3JwNQpgYGAKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQiPk1vZGVsbyA2LiBSZWRlcyBOZXVyb25hbGVzPC9zcGFuPgpgYGB7cn0KbW9kZWxvNiA8LSB0cmFpbih0YXJnZXR+LiwgZGF0YT1lbnRyZW5hbWllbnRvLAogICAgICAgICAgICAgICAgIG1ldGhvZD0ibm5ldCIsICNDYW1iaWFyCiAgICAgICAgICAgICAgICAgcHJlUHJvY2VzcyA9IGMoInNjYWxlIiwiY2VudGVyIiksCiAgICAgICAgICAgICAgICAgdHJDb250cm9sID0gdHJhaW5Db250cm9sKG1ldGhvZD0iY3YiLCBudW1iZXI9MTApCiAgICAgICAgICAgICAgICAgI0NhbWJpYXIKICAgICAgICAgICAgICAgICApCgpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzYgPC0gcHJlZGljdChtb2RlbG82LGVudHJlbmFtaWVudG8pCnJlc3VsdGFkb19wcnVlYmE2IDwtIHByZWRpY3QobW9kZWxvNixwcnVlYmEpCgojTWF0cml6IGRlIENvbmZ1c2nDs24KI0VzIHVuYSB0YWJsYSBkZSBldmFsdWFjacOzbiBxdWUgZGVzZ2xvc2EgZWwgcmVuZGltaWVudG8gZGVsIG1vZGVsbyBkZSBjbGFzaWZpY2FjacOzbgoKI01hdHJpeiBkZSBDb25mdXNpw7NuIGRlbCBSZXN1bHRhZG8gZGUgRW50cmVuYW1pZW50bwptY3JlNiA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG82LGVudHJlbmFtaWVudG8kdGFyZ2V0KQojbWNyZTYKCiNNYXRyaXogZGUgQ29uZnVzacOzbiBkZWwgUmVzdWx0YWRvIGRlIGxhIFBydWViYQptY3JwNiA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTYsIHBydWViYSR0YXJnZXQpCiNtY3JwNgpgYGAKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQiPlRhYmxhIGRlIFJlc3VsdGFkbzwvc3Bhbj4KYGBge3J9CnJlc3VsdGFkb3MgPC0gZGF0YS5mcmFtZSgKICAic3ZtTGluZWFyIiA9IGMobWNyZTEkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDEkb3ZlcmFsbFsiQWNjdXJhY3kiXSksCiAgInN2bVJhZGlhbCIgPSBjKG1jcmUyJG92ZXJhbGxbIkFjY3VyYWN5Il0sIG1jcnAyJG92ZXJhbGxbIkFjY3VyYWN5Il0pLAogICJzdm1Qb2x5IiA9IGMobWNyZTMkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDMkb3ZlcmFsbFsiQWNjdXJhY3kiXSksCiAgInJwYXJ0IiA9IGMobWNyZTQkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDQkb3ZlcmFsbFsiQWNjdXJhY3kiXSksCiAgInJ0IiA9IGMobWNyZTUkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDUkb3ZlcmFsbFsiQWNjdXJhY3kiXSksCiAgIm5uZXQiID0gYyhtY3JlNiRvdmVyYWxsWyJBY2N1cmFjeSJdLCBtY3JwNiRvdmVyYWxsWyJBY2N1cmFjeSJdKQopCgpyb3duYW1lcyhyZXN1bHRhZG9zKSA8LSBjKCJFeGFjdGl0dWQgZGVsIEVudHJlbmFtaWVudG8iLCAiRXhhY3RpdHVkIGRlIGxhIFBydWViYSIpCnJlc3VsdGFkb3MKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkIj5Db25jbHVzacOzbjwvc3Bhbj4KRW4gY29uY2x1c2nDs24sIGVsIG1vZGVsbyBkZSAqKlJhbmRvbSBGb3JyZXN0KiogZXMgZWwgcmVjb21lbmRhZG8gcGFyYSBsYSBjbGFzaWZpY2FjacOzbiBkZWwgY29yYXrDs24u