Teoría

De acuerdo con Mayo Clinic, el cáncer de mama es un tipo de cáncer que se origina en las células de las mamas y puede afectar tanto a hombres como a mujeres; no obstante, es más común en las mujeres.

Entre los síntomas más comunes se encuentran:

  • Cambios en el tamaño, forma o apariencia de una mama.
  • Alteraciones en la piel que recubre la mama, como la formación de hoyuelos.
  • Presencia de un bulto o engrosamiento en la mama.

Fuente: Cáncer de mama

Instalar paquetes y llamar librerías

# install.packages("caret") # Se usa para los algoritmos de aprendizaje automático
library(caret)
## Warning: package 'caret' was built under R version 4.3.2
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.3.2
## Loading required package: lattice
# install.packages("ggplot2") # Para hacer gráficas con mejor diseño
library(ggplot2)
# install.packages("lattice") # Crear gráficos
library(lattice)
# install.packages("datasets") # Usar la base de datos "Iris"
library(datasets)
#install.packages("DataExplorer")
library(DataExplorer)
## Warning: package 'DataExplorer' was built under R version 4.3.2
library(kernlab)
## 
## Attaching package: 'kernlab'
## The following object is masked from 'package:ggplot2':
## 
##     alpha
# install.packages("mlbench")
library(mlbench)
## Warning: package 'mlbench' was built under R version 4.3.2

Paso 1. Obtener datos

data(BreastCancer)
df <- data.frame(BreastCancer)

Paso 2. Limpiar datos

df <- df[, -1] # Eliminar columna "ID"
df <- na.omit(df) # Eliminar NA

# Cambiar tipo de dato
df$Cl.thickness <- as.numeric(df$Cl.thickness)
df$Cell.size <- as.numeric(df$Cell.size)
df$Cell.shape <- as.numeric(df$Cell.shape)
df$Marg.adhesion <- as.numeric(df$Marg.adhesion)
df$Epith.c.size <- as.numeric(df$Epith.c.size)
df$Bare.nuclei <- as.numeric(df$Bare.nuclei)
df$Bl.cromatin <- as.numeric(df$Bl.cromatin)
df$Normal.nucleoli <- as.numeric(df$Normal.nucleoli)
df$Mitoses <- as.numeric(df$Mitoses)
df$Class <- as.factor(df$Class)

Análisis exploratorio

summary(df)
##   Cl.thickness      Cell.size        Cell.shape     Marg.adhesion  
##  Min.   : 1.000   Min.   : 1.000   Min.   : 1.000   Min.   : 1.00  
##  1st Qu.: 2.000   1st Qu.: 1.000   1st Qu.: 1.000   1st Qu.: 1.00  
##  Median : 4.000   Median : 1.000   Median : 1.000   Median : 1.00  
##  Mean   : 4.442   Mean   : 3.151   Mean   : 3.215   Mean   : 2.83  
##  3rd Qu.: 6.000   3rd Qu.: 5.000   3rd Qu.: 5.000   3rd Qu.: 4.00  
##  Max.   :10.000   Max.   :10.000   Max.   :10.000   Max.   :10.00  
##   Epith.c.size     Bare.nuclei      Bl.cromatin     Normal.nucleoli
##  Min.   : 1.000   Min.   : 1.000   Min.   : 1.000   Min.   : 1.00  
##  1st Qu.: 2.000   1st Qu.: 1.000   1st Qu.: 2.000   1st Qu.: 1.00  
##  Median : 2.000   Median : 1.000   Median : 3.000   Median : 1.00  
##  Mean   : 3.234   Mean   : 3.545   Mean   : 3.445   Mean   : 2.87  
##  3rd Qu.: 4.000   3rd Qu.: 6.000   3rd Qu.: 5.000   3rd Qu.: 4.00  
##  Max.   :10.000   Max.   :10.000   Max.   :10.000   Max.   :10.00  
##     Mitoses            Class    
##  Min.   :1.000   benign   :444  
##  1st Qu.:1.000   malignant:239  
##  Median :1.000                  
##  Mean   :1.583                  
##  3rd Qu.:1.000                  
##  Max.   :9.000
str(df)
## 'data.frame':    683 obs. of  10 variables:
##  $ Cl.thickness   : num  5 5 3 6 4 8 1 2 2 4 ...
##  $ Cell.size      : num  1 4 1 8 1 10 1 1 1 2 ...
##  $ Cell.shape     : num  1 4 1 8 1 10 1 2 1 1 ...
##  $ Marg.adhesion  : num  1 5 1 1 3 8 1 1 1 1 ...
##  $ Epith.c.size   : num  2 7 2 3 2 7 2 2 2 2 ...
##  $ Bare.nuclei    : num  1 10 2 4 1 10 10 1 1 1 ...
##  $ Bl.cromatin    : num  3 3 3 3 3 9 3 3 1 2 ...
##  $ Normal.nucleoli: num  1 2 1 7 1 7 1 1 1 1 ...
##  $ Mitoses        : num  1 1 1 1 1 1 1 1 5 1 ...
##  $ Class          : Factor w/ 2 levels "benign","malignant": 1 1 1 1 1 2 1 1 1 1 ...
##  - attr(*, "na.action")= 'omit' Named int [1:16] 24 41 140 146 159 165 236 250 276 293 ...
##   ..- attr(*, "names")= chr [1:16] "24" "41" "140" "146" ...
create_report(df)
## 
## 
## processing file: report.rmd
## 
  |                                           
  |                                     |   0%
  |                                           
  |.                                    |   2%                                 
  |                                           
  |..                                   |   5% [global_options]                
  |                                           
  |...                                  |   7%                                 
  |                                           
  |....                                 |  10% [introduce]                     
  |                                           
  |....                                 |  12%                                 
  |                                           
  |.....                                |  14% [plot_intro]                    
  |                                           
  |......                               |  17%                                 
  |                                           
  |.......                              |  19% [data_structure]                
  |                                           
  |........                             |  21%                                 
  |                                           
  |.........                            |  24% [missing_profile]               
  |                                           
  |..........                           |  26%                                 
  |                                           
  |...........                          |  29% [univariate_distribution_header]
  |                                           
  |...........                          |  31%                                 
  |                                           
  |............                         |  33% [plot_histogram]                
  |                                           
  |.............                        |  36%                                 
  |                                           
  |..............                       |  38% [plot_density]                  
  |                                           
  |...............                      |  40%                                 
  |                                           
  |................                     |  43% [plot_frequency_bar]            
  |                                           
  |.................                    |  45%                                 
  |                                           
  |..................                   |  48% [plot_response_bar]             
  |                                           
  |..................                   |  50%                                 
  |                                           
  |...................                  |  52% [plot_with_bar]                 
  |                                           
  |....................                 |  55%                                 
  |                                           
  |.....................                |  57% [plot_normal_qq]                
  |                                           
  |......................               |  60%                                 
  |                                           
  |.......................              |  62% [plot_response_qq]              
  |                                           
  |........................             |  64%                                 
  |                                           
  |.........................            |  67% [plot_by_qq]                    
  |                                           
  |..........................           |  69%                                 
  |                                           
  |..........................           |  71% [correlation_analysis]          
  |                                           
  |...........................          |  74%                                 
  |                                           
  |............................         |  76% [principal_component_analysis]  
  |                                           
  |.............................        |  79%                                 
  |                                           
  |..............................       |  81% [bivariate_distribution_header] 
  |                                           
  |...............................      |  83%                                 
  |                                           
  |................................     |  86% [plot_response_boxplot]         
  |                                           
  |.................................    |  88%                                 
  |                                           
  |.................................    |  90% [plot_by_boxplot]               
  |                                           
  |..................................   |  93%                                 
  |                                           
  |...................................  |  95% [plot_response_scatterplot]     
  |                                           
  |.................................... |  98%                                 
  |                                           
  |.....................................| 100% [plot_by_scatterplot]           
## output file: C:/Users/kathi/OneDrive/Escritorio/report.knit.md
## "C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools/pandoc" +RTS -K512m -RTS "C:/Users/kathi/OneDrive/Escritorio/report.knit.md" --to html4 --from markdown+autolink_bare_uris+tex_math_single_backslash --output pandoc31e430f44d3e.html --lua-filter "C:\Users\kathi\AppData\Local\R\win-library\4.3\rmarkdown\rmarkdown\lua\pagebreak.lua" --lua-filter "C:\Users\kathi\AppData\Local\R\win-library\4.3\rmarkdown\rmarkdown\lua\latex-div.lua" --embed-resources --standalone --variable bs3=TRUE --section-divs --table-of-contents --toc-depth 6 --template "C:\Users\kathi\AppData\Local\R\win-library\4.3\rmarkdown\rmd\h\default.html" --no-highlight --variable highlightjs=1 --variable theme=yeti --mathjax --variable "mathjax-url=https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" --include-in-header "C:\Users\kathi\AppData\Local\Temp\Rtmp27hjfK\rmarkdown-str31e47a461ea2.html"
## 
## Output created: report.html
plot_missing(df)

plot_histogram(df)

plot_correlation(df)

plot_boxplot(df, by ="Class")

** NOTA: La variable que queremos predecir debe tener formato de FACTOR.**

Partir datos 80-20 (80% de 150 que son las obs. del df)

set.seed(123)
renglones_entrenamiento <- createDataPartition(df$Class, 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 (svmLineal), Radial (svmRadial), Polinómico (svmPoly), etc.
  • Árbol de Decisión: rpart
  • Redes Neuronales: nnet
  • Random Forest o Bosques Aleatorios: rf

1. Modelo con el método svmLineal

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

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


# Matriz de Confusión

mcre1<- confusionMatrix(resultado_entrenamiento1, entrenamiento$Class) #Matriz de confusión del resultado del entrenamiento
mcre1
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       347         7
##   malignant      9       185
##                                          
##                Accuracy : 0.9708         
##                  95% CI : (0.953, 0.9832)
##     No Information Rate : 0.6496         
##     P-Value [Acc > NIR] : <2e-16         
##                                          
##                   Kappa : 0.936          
##                                          
##  Mcnemar's Test P-Value : 0.8026         
##                                          
##             Sensitivity : 0.9747         
##             Specificity : 0.9635         
##          Pos Pred Value : 0.9802         
##          Neg Pred Value : 0.9536         
##              Prevalence : 0.6496         
##          Detection Rate : 0.6332         
##    Detection Prevalence : 0.6460         
##       Balanced Accuracy : 0.9691         
##                                          
##        'Positive' Class : benign         
## 
mcrp1<- confusionMatrix(resultado_prueba1, prueba$Class) #Matriz de confusión del resultado de la prueba
mcrp1
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign        87         2
##   malignant      1        45
##                                           
##                Accuracy : 0.9778          
##                  95% CI : (0.9364, 0.9954)
##     No Information Rate : 0.6519          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9508          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9886          
##             Specificity : 0.9574          
##          Pos Pred Value : 0.9775          
##          Neg Pred Value : 0.9783          
##              Prevalence : 0.6519          
##          Detection Rate : 0.6444          
##    Detection Prevalence : 0.6593          
##       Balanced Accuracy : 0.9730          
##                                           
##        'Positive' Class : benign          
## 
#en este modelo la presición (acurracy) es lo que se toma en cuenta

2. Modelo con el método svmRadial

modelo2<- train(Class ~ ., 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)


# Matriz de Confusión

mcre2<- confusionMatrix(resultado_entrenamiento2, entrenamiento$Class) #Matriz de confusión del resultado del entrenamiento
mcre2
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       354         0
##   malignant      2       192
##                                           
##                Accuracy : 0.9964          
##                  95% CI : (0.9869, 0.9996)
##     No Information Rate : 0.6496          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.992           
##                                           
##  Mcnemar's Test P-Value : 0.4795          
##                                           
##             Sensitivity : 0.9944          
##             Specificity : 1.0000          
##          Pos Pred Value : 1.0000          
##          Neg Pred Value : 0.9897          
##              Prevalence : 0.6496          
##          Detection Rate : 0.6460          
##    Detection Prevalence : 0.6460          
##       Balanced Accuracy : 0.9972          
##                                           
##        'Positive' Class : benign          
## 
mcrp2<- confusionMatrix(resultado_prueba2, prueba$Class) #Matriz de confusión del resultado de la prueba
mcrp2
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign        82         0
##   malignant      6        47
##                                           
##                Accuracy : 0.9556          
##                  95% CI : (0.9058, 0.9835)
##     No Information Rate : 0.6519          
##     P-Value [Acc > NIR] : < 2e-16         
##                                           
##                   Kappa : 0.9049          
##                                           
##  Mcnemar's Test P-Value : 0.04123         
##                                           
##             Sensitivity : 0.9318          
##             Specificity : 1.0000          
##          Pos Pred Value : 1.0000          
##          Neg Pred Value : 0.8868          
##              Prevalence : 0.6519          
##          Detection Rate : 0.6074          
##    Detection Prevalence : 0.6074          
##       Balanced Accuracy : 0.9659          
##                                           
##        'Positive' Class : benign          
## 
#en este modelo la presición (acurracy) es lo que se toma en cuenta

3. Modelo con el método svmPoly

modelo3<- train(Class ~ ., 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)


# Matriz de Confusión

mcre3<- confusionMatrix(resultado_entrenamiento3, entrenamiento$Class) #Matriz de confusión del resultado del entrenamiento
mcre3
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       347         7
##   malignant      9       185
##                                          
##                Accuracy : 0.9708         
##                  95% CI : (0.953, 0.9832)
##     No Information Rate : 0.6496         
##     P-Value [Acc > NIR] : <2e-16         
##                                          
##                   Kappa : 0.936          
##                                          
##  Mcnemar's Test P-Value : 0.8026         
##                                          
##             Sensitivity : 0.9747         
##             Specificity : 0.9635         
##          Pos Pred Value : 0.9802         
##          Neg Pred Value : 0.9536         
##              Prevalence : 0.6496         
##          Detection Rate : 0.6332         
##    Detection Prevalence : 0.6460         
##       Balanced Accuracy : 0.9691         
##                                          
##        'Positive' Class : benign         
## 
mcrp3<- confusionMatrix(resultado_prueba3, prueba$Class) #Matriz de confusión del resultado de la prueba
mcrp3
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign        87         2
##   malignant      1        45
##                                           
##                Accuracy : 0.9778          
##                  95% CI : (0.9364, 0.9954)
##     No Information Rate : 0.6519          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9508          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9886          
##             Specificity : 0.9574          
##          Pos Pred Value : 0.9775          
##          Neg Pred Value : 0.9783          
##              Prevalence : 0.6519          
##          Detection Rate : 0.6444          
##    Detection Prevalence : 0.6593          
##       Balanced Accuracy : 0.9730          
##                                           
##        'Positive' Class : benign          
## 
#en este modelo la presición (acurracy) es lo que se toma en cuenta

4. Modelo con el método rpart

modelo4<- train(Class ~ ., 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

mcre4<- confusionMatrix(resultado_entrenamiento4, entrenamiento$Class) #Matriz de confusión del resultado del entrenamiento
mcre4
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       345         9
##   malignant     11       183
##                                           
##                Accuracy : 0.9635          
##                  95% CI : (0.9442, 0.9776)
##     No Information Rate : 0.6496          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.92            
##                                           
##  Mcnemar's Test P-Value : 0.8231          
##                                           
##             Sensitivity : 0.9691          
##             Specificity : 0.9531          
##          Pos Pred Value : 0.9746          
##          Neg Pred Value : 0.9433          
##              Prevalence : 0.6496          
##          Detection Rate : 0.6296          
##    Detection Prevalence : 0.6460          
##       Balanced Accuracy : 0.9611          
##                                           
##        'Positive' Class : benign          
## 
mcrp4<- confusionMatrix(resultado_prueba4, prueba$Class) #Matriz de confusión del resultado de la prueba
mcrp4
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign        87         5
##   malignant      1        42
##                                           
##                Accuracy : 0.9556          
##                  95% CI : (0.9058, 0.9835)
##     No Information Rate : 0.6519          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9001          
##                                           
##  Mcnemar's Test P-Value : 0.2207          
##                                           
##             Sensitivity : 0.9886          
##             Specificity : 0.8936          
##          Pos Pred Value : 0.9457          
##          Neg Pred Value : 0.9767          
##              Prevalence : 0.6519          
##          Detection Rate : 0.6444          
##    Detection Prevalence : 0.6815          
##       Balanced Accuracy : 0.9411          
##                                           
##        'Positive' Class : benign          
## 
#en este modelo la presición (acurracy) es lo que se toma en cuenta

5. Modelo con el método nnet

modelo5<- train(Class ~ ., data= entrenamiento, 
               method = "nnet", # Cambiar
               preProcess=c("scale", "center"),
               trControl = trainControl(method = "cv", number=10)) # Cambiar
## # weights:  12
## initial  value 376.477149 
## iter  10 value 42.437195
## iter  20 value 37.383594
## iter  30 value 37.366404
## iter  40 value 36.703788
## iter  50 value 32.802253
## iter  60 value 32.783185
## iter  70 value 32.780576
## iter  80 value 32.780352
## iter  90 value 32.780267
## iter 100 value 32.779932
## final  value 32.779932 
## stopped after 100 iterations
## # weights:  34
## initial  value 398.967389 
## iter  10 value 41.580064
## iter  20 value 32.819841
## iter  30 value 30.580631
## iter  40 value 30.171660
## iter  50 value 29.018950
## iter  60 value 26.270274
## iter  70 value 25.101938
## iter  80 value 24.289120
## iter  90 value 23.970739
## iter 100 value 23.966875
## final  value 23.966875 
## stopped after 100 iterations
## # weights:  56
## initial  value 392.380535 
## iter  10 value 36.130217
## iter  20 value 16.520603
## iter  30 value 7.379376
## iter  40 value 4.979779
## iter  50 value 1.881997
## iter  60 value 1.413958
## iter  70 value 1.397572
## iter  80 value 1.389584
## iter  90 value 1.386721
## iter 100 value 1.386332
## final  value 1.386332 
## stopped after 100 iterations
## # weights:  12
## initial  value 350.410635 
## iter  10 value 74.916798
## iter  20 value 58.878074
## iter  30 value 49.960077
## iter  40 value 49.661904
## final  value 49.661892 
## converged
## # weights:  34
## initial  value 349.539635 
## iter  10 value 115.137963
## iter  20 value 45.339839
## iter  30 value 41.959631
## iter  40 value 38.444785
## iter  50 value 37.928940
## iter  60 value 37.672510
## iter  70 value 37.662808
## final  value 37.662804 
## converged
## # weights:  56
## initial  value 385.799685 
## iter  10 value 41.550941
## iter  20 value 37.775498
## iter  30 value 37.351510
## iter  40 value 37.203503
## iter  50 value 36.881480
## iter  60 value 36.816477
## iter  70 value 36.815808
## iter  80 value 36.815763
## iter  80 value 36.815763
## final  value 36.815763 
## converged
## # weights:  12
## initial  value 411.250561 
## iter  10 value 128.481791
## iter  20 value 48.775343
## iter  30 value 48.108500
## iter  40 value 45.630536
## iter  50 value 42.789720
## iter  60 value 42.600620
## iter  70 value 39.693498
## iter  80 value 39.678498
## iter  90 value 39.673171
## iter 100 value 39.665081
## final  value 39.665081 
## stopped after 100 iterations
## # weights:  34
## initial  value 396.907245 
## iter  10 value 36.935107
## iter  20 value 27.845747
## iter  30 value 24.064004
## iter  40 value 22.507661
## iter  50 value 22.161343
## iter  60 value 21.912002
## iter  70 value 21.436179
## iter  80 value 21.176493
## iter  90 value 21.115826
## iter 100 value 20.994492
## final  value 20.994492 
## stopped after 100 iterations
## # weights:  56
## initial  value 470.209121 
## iter  10 value 36.854692
## iter  20 value 29.775951
## iter  30 value 26.512592
## iter  40 value 23.490629
## iter  50 value 21.091000
## iter  60 value 14.528279
## iter  70 value 14.146366
## iter  80 value 12.978601
## iter  90 value 12.838590
## iter 100 value 12.809161
## final  value 12.809161 
## stopped after 100 iterations
## # weights:  12
## initial  value 355.508036 
## iter  10 value 52.186983
## iter  20 value 49.731412
## iter  30 value 42.751850
## iter  40 value 42.589636
## iter  50 value 40.970318
## iter  60 value 39.558646
## iter  70 value 39.543586
## iter  80 value 39.515130
## iter  90 value 39.503451
## iter 100 value 39.499587
## final  value 39.499587 
## stopped after 100 iterations
## # weights:  34
## initial  value 345.293855 
## iter  10 value 38.850419
## iter  20 value 35.299467
## iter  30 value 29.063227
## iter  40 value 25.318280
## iter  50 value 22.886781
## iter  60 value 21.721975
## iter  70 value 21.281773
## iter  80 value 21.101509
## iter  90 value 21.071842
## iter 100 value 21.066196
## final  value 21.066196 
## stopped after 100 iterations
## # weights:  56
## initial  value 318.370065 
## iter  10 value 40.055119
## iter  20 value 24.416365
## iter  30 value 13.343905
## iter  40 value 12.497316
## iter  50 value 12.101419
## iter  60 value 11.714407
## iter  70 value 10.562188
## iter  80 value 10.084774
## iter  90 value 9.803909
## iter 100 value 9.692054
## final  value 9.692054 
## stopped after 100 iterations
## # weights:  12
## initial  value 383.405588 
## iter  10 value 70.986072
## iter  20 value 54.771996
## iter  30 value 53.597555
## iter  40 value 53.544775
## iter  40 value 53.544774
## iter  40 value 53.544774
## final  value 53.544774 
## converged
## # weights:  34
## initial  value 437.860910 
## iter  10 value 52.917571
## iter  20 value 47.485871
## iter  30 value 43.339800
## iter  40 value 42.347250
## iter  50 value 41.987058
## iter  60 value 41.759375
## iter  70 value 41.757165
## iter  70 value 41.757165
## final  value 41.757165 
## converged
## # weights:  56
## initial  value 432.938183 
## iter  10 value 53.241057
## iter  20 value 42.793023
## iter  30 value 40.750430
## iter  40 value 40.140010
## iter  50 value 40.065188
## iter  60 value 40.059476
## iter  70 value 40.058576
## final  value 40.058575 
## converged
## # weights:  12
## initial  value 370.559464 
## iter  10 value 56.330575
## iter  20 value 45.487568
## iter  30 value 40.718222
## iter  40 value 39.656038
## iter  50 value 39.640343
## iter  60 value 39.639341
## iter  70 value 39.638382
## iter  80 value 39.638099
## iter  90 value 39.638035
## iter 100 value 39.637985
## final  value 39.637985 
## stopped after 100 iterations
## # weights:  34
## initial  value 371.184689 
## iter  10 value 42.069486
## iter  20 value 36.888133
## iter  30 value 35.233768
## iter  40 value 31.583861
## iter  50 value 29.951169
## iter  60 value 27.882573
## iter  70 value 27.350766
## iter  80 value 27.191197
## iter  90 value 27.149604
## iter 100 value 26.994128
## final  value 26.994128 
## stopped after 100 iterations
## # weights:  56
## initial  value 324.010663 
## iter  10 value 35.285669
## iter  20 value 18.983575
## iter  30 value 8.864095
## iter  40 value 8.493163
## iter  50 value 8.373325
## iter  60 value 5.023711
## iter  70 value 4.414094
## iter  80 value 4.245991
## iter  90 value 4.032493
## iter 100 value 1.218699
## final  value 1.218699 
## stopped after 100 iterations
## # weights:  12
## initial  value 376.965522 
## iter  10 value 57.458884
## iter  20 value 48.268436
## iter  30 value 45.450565
## iter  40 value 43.475756
## iter  50 value 39.525989
## iter  60 value 39.499126
## iter  70 value 39.494123
## iter  80 value 39.484240
## iter  90 value 39.481187
## iter 100 value 39.480996
## final  value 39.480996 
## stopped after 100 iterations
## # weights:  34
## initial  value 461.169324 
## iter  10 value 37.143796
## iter  20 value 28.209150
## iter  30 value 19.639361
## iter  40 value 17.612668
## iter  50 value 17.529577
## iter  60 value 17.528701
## final  value 17.528675 
## converged
## # weights:  56
## initial  value 291.377968 
## iter  10 value 34.872750
## iter  20 value 27.020476
## iter  30 value 21.365333
## iter  40 value 18.322587
## iter  50 value 14.852247
## iter  60 value 14.005387
## iter  70 value 13.813886
## iter  80 value 13.627385
## iter  90 value 13.580207
## iter 100 value 13.561449
## final  value 13.561449 
## stopped after 100 iterations
## # weights:  12
## initial  value 350.760977 
## iter  10 value 62.985282
## iter  20 value 52.810932
## iter  30 value 52.778785
## final  value 52.777991 
## converged
## # weights:  34
## initial  value 325.655243 
## iter  10 value 53.894733
## iter  20 value 47.675190
## iter  30 value 45.276035
## iter  40 value 43.160908
## iter  50 value 41.825807
## iter  60 value 41.617544
## iter  70 value 41.610425
## iter  80 value 41.555818
## iter  90 value 41.553218
## iter  90 value 41.553218
## iter  90 value 41.553218
## final  value 41.553218 
## converged
## # weights:  56
## initial  value 290.669028 
## iter  10 value 85.091956
## iter  20 value 49.886743
## iter  30 value 44.222060
## iter  40 value 40.735343
## iter  50 value 39.664872
## iter  60 value 39.313892
## iter  70 value 38.909658
## iter  80 value 38.818642
## iter  90 value 38.811901
## iter 100 value 38.811641
## final  value 38.811641 
## stopped after 100 iterations
## # weights:  12
## initial  value 429.343504 
## iter  10 value 48.000220
## iter  20 value 43.121829
## iter  30 value 41.515601
## iter  40 value 37.669596
## iter  50 value 37.396040
## iter  60 value 37.383183
## iter  70 value 37.341077
## iter  80 value 37.328979
## iter  90 value 37.320610
## iter 100 value 37.293722
## final  value 37.293722 
## stopped after 100 iterations
## # weights:  34
## initial  value 476.188548 
## iter  10 value 48.622911
## iter  20 value 32.034715
## iter  30 value 28.036310
## iter  40 value 24.999756
## iter  50 value 23.129264
## iter  60 value 22.975342
## iter  70 value 22.913586
## iter  80 value 22.892855
## iter  90 value 22.858722
## iter 100 value 22.833042
## final  value 22.833042 
## stopped after 100 iterations
## # weights:  56
## initial  value 378.900773 
## iter  10 value 36.248260
## iter  20 value 20.146364
## iter  30 value 11.327904
## iter  40 value 9.748409
## iter  50 value 9.432211
## iter  60 value 9.055354
## iter  70 value 8.966362
## iter  80 value 8.935854
## iter  90 value 8.917093
## iter 100 value 8.902201
## final  value 8.902201 
## stopped after 100 iterations
## # weights:  12
## initial  value 344.806105 
## iter  10 value 53.314981
## iter  20 value 51.864827
## iter  30 value 48.439608
## iter  40 value 47.074809
## iter  50 value 45.171586
## iter  60 value 45.010562
## iter  70 value 44.965893
## iter  80 value 44.919082
## iter  90 value 44.853411
## iter 100 value 44.822481
## final  value 44.822481 
## stopped after 100 iterations
## # weights:  34
## initial  value 324.352768 
## iter  10 value 33.754090
## iter  20 value 26.301046
## iter  30 value 21.302920
## iter  40 value 20.470135
## iter  50 value 20.022692
## iter  60 value 19.903231
## iter  70 value 19.895252
## iter  80 value 19.894923
## iter  90 value 19.894423
## final  value 19.894412 
## converged
## # weights:  56
## initial  value 301.048227 
## iter  10 value 31.006045
## iter  20 value 26.243828
## iter  30 value 20.745469
## iter  40 value 18.745178
## iter  50 value 18.149255
## iter  60 value 17.208233
## iter  70 value 17.128135
## iter  80 value 16.974997
## iter  90 value 16.891304
## iter 100 value 16.845548
## final  value 16.845548 
## stopped after 100 iterations
## # weights:  12
## initial  value 441.401693 
## iter  10 value 52.177398
## iter  20 value 47.978570
## iter  30 value 46.688911
## final  value 46.686683 
## converged
## # weights:  34
## initial  value 400.891990 
## iter  10 value 38.167635
## iter  20 value 36.493121
## iter  30 value 36.422004
## iter  40 value 36.355602
## iter  50 value 36.351007
## final  value 36.351006 
## converged
## # weights:  56
## initial  value 354.480594 
## iter  10 value 40.204286
## iter  20 value 36.276416
## iter  30 value 34.831402
## iter  40 value 34.638085
## iter  50 value 34.632346
## final  value 34.630418 
## converged
## # weights:  12
## initial  value 382.278414 
## iter  10 value 51.491238
## iter  20 value 42.900868
## iter  30 value 36.397646
## iter  40 value 36.365532
## iter  50 value 36.354776
## iter  60 value 36.352952
## iter  70 value 36.351207
## iter  80 value 36.350648
## iter  90 value 36.350404
## iter 100 value 36.350228
## final  value 36.350228 
## stopped after 100 iterations
## # weights:  34
## initial  value 385.229559 
## iter  10 value 48.761838
## iter  20 value 34.609357
## iter  30 value 22.131388
## iter  40 value 17.743321
## iter  50 value 16.603890
## iter  60 value 16.337978
## iter  70 value 16.142615
## iter  80 value 16.099878
## iter  90 value 16.066547
## iter 100 value 16.036148
## final  value 16.036148 
## stopped after 100 iterations
## # weights:  56
## initial  value 517.073810 
## iter  10 value 208.699725
## iter  20 value 22.379999
## iter  30 value 16.405697
## iter  40 value 14.761128
## iter  50 value 14.203133
## iter  60 value 13.855094
## iter  70 value 13.643576
## iter  80 value 13.000759
## iter  90 value 10.690633
## iter 100 value 10.101124
## final  value 10.101124 
## stopped after 100 iterations
## # weights:  12
## initial  value 292.895306 
## iter  10 value 52.551393
## iter  20 value 47.795990
## iter  30 value 43.326449
## iter  40 value 42.498683
## iter  50 value 42.483639
## iter  60 value 42.481460
## iter  70 value 42.480221
## iter  80 value 42.478425
## iter  90 value 42.476811
## iter 100 value 42.476437
## final  value 42.476437 
## stopped after 100 iterations
## # weights:  34
## initial  value 370.482153 
## iter  10 value 38.851578
## iter  20 value 33.185345
## iter  30 value 26.837372
## iter  40 value 23.550785
## iter  50 value 22.282349
## iter  60 value 21.741716
## iter  70 value 21.617553
## iter  80 value 21.606068
## iter  90 value 21.594047
## iter 100 value 21.590763
## final  value 21.590763 
## stopped after 100 iterations
## # weights:  56
## initial  value 331.163435 
## iter  10 value 45.763128
## iter  20 value 29.174052
## iter  30 value 22.347069
## iter  40 value 16.843208
## iter  50 value 15.554057
## iter  60 value 15.069029
## iter  70 value 14.686925
## iter  80 value 14.395084
## iter  90 value 13.924073
## iter 100 value 13.613552
## final  value 13.613552 
## stopped after 100 iterations
## # weights:  12
## initial  value 445.911318 
## iter  10 value 50.664074
## iter  20 value 49.103146
## iter  30 value 48.764748
## final  value 48.764740 
## converged
## # weights:  34
## initial  value 539.171803 
## iter  10 value 71.174738
## iter  20 value 44.888487
## iter  30 value 40.773068
## iter  40 value 39.291940
## iter  50 value 38.948505
## iter  60 value 38.805208
## iter  70 value 38.789757
## iter  80 value 38.777548
## iter  90 value 38.777242
## final  value 38.777240 
## converged
## # weights:  56
## initial  value 300.526929 
## iter  10 value 92.670644
## iter  20 value 45.607100
## iter  30 value 38.482565
## iter  40 value 37.620450
## iter  50 value 37.333679
## iter  60 value 37.305632
## iter  70 value 37.304888
## final  value 37.304880 
## converged
## # weights:  12
## initial  value 342.113667 
## iter  10 value 39.784475
## iter  20 value 37.502481
## iter  30 value 37.235549
## iter  40 value 37.094419
## iter  50 value 36.355221
## iter  60 value 36.235421
## iter  70 value 35.963827
## iter  80 value 35.822521
## iter  90 value 35.822367
## iter 100 value 35.821303
## final  value 35.821303 
## stopped after 100 iterations
## # weights:  34
## initial  value 379.416717 
## iter  10 value 42.835820
## iter  20 value 38.625630
## iter  30 value 33.091455
## iter  40 value 32.424501
## iter  50 value 31.958173
## iter  60 value 31.780375
## iter  70 value 31.571136
## iter  80 value 31.479145
## iter  90 value 31.464511
## iter 100 value 31.417168
## final  value 31.417168 
## stopped after 100 iterations
## # weights:  56
## initial  value 369.465817 
## iter  10 value 36.101780
## iter  20 value 17.316087
## iter  30 value 10.213775
## iter  40 value 7.378137
## iter  50 value 6.626386
## iter  60 value 6.505362
## iter  70 value 6.344177
## iter  80 value 5.833663
## iter  90 value 5.743775
## iter 100 value 5.674803
## final  value 5.674803 
## stopped after 100 iterations
## # weights:  12
## initial  value 321.197058 
## iter  10 value 37.992700
## iter  20 value 35.792204
## iter  30 value 35.389851
## iter  40 value 35.128294
## iter  50 value 34.925662
## iter  60 value 34.886890
## iter  70 value 34.877191
## iter  80 value 34.875236
## iter  90 value 34.873956
## iter 100 value 34.872360
## final  value 34.872360 
## stopped after 100 iterations
## # weights:  34
## initial  value 389.682359 
## iter  10 value 33.677993
## iter  20 value 21.377728
## iter  30 value 14.878733
## iter  40 value 10.094345
## iter  50 value 9.445055
## iter  60 value 9.423292
## iter  70 value 9.419223
## iter  80 value 9.418886
## iter  90 value 9.418811
## iter 100 value 9.418768
## final  value 9.418768 
## stopped after 100 iterations
## # weights:  56
## initial  value 266.773981 
## iter  10 value 23.397408
## iter  20 value 12.453893
## iter  30 value 9.921559
## iter  40 value 9.334908
## iter  50 value 9.183171
## iter  60 value 9.172849
## iter  70 value 9.127471
## iter  80 value 9.054126
## iter  90 value 8.984186
## iter 100 value 8.955991
## final  value 8.955991 
## stopped after 100 iterations
## # weights:  12
## initial  value 320.530859 
## iter  10 value 60.495799
## iter  20 value 46.020850
## iter  30 value 44.525762
## final  value 44.523218 
## converged
## # weights:  34
## initial  value 407.705422 
## iter  10 value 54.162248
## iter  20 value 34.360603
## iter  30 value 34.038423
## iter  40 value 34.035667
## final  value 34.035016 
## converged
## # weights:  56
## initial  value 454.017135 
## iter  10 value 69.049091
## iter  20 value 33.996446
## iter  30 value 31.515000
## iter  40 value 31.231004
## iter  50 value 30.903611
## iter  60 value 30.710978
## iter  70 value 30.627870
## iter  80 value 30.624795
## iter  80 value 30.624795
## iter  80 value 30.624795
## final  value 30.624795 
## converged
## # weights:  12
## initial  value 400.796335 
## iter  10 value 36.480916
## iter  20 value 32.950616
## iter  30 value 32.894397
## iter  40 value 32.885858
## iter  50 value 32.882953
## iter  60 value 32.875174
## iter  70 value 32.873837
## iter  80 value 32.873014
## iter  90 value 32.870765
## iter 100 value 32.499479
## final  value 32.499479 
## stopped after 100 iterations
## # weights:  34
## initial  value 382.700891 
## iter  10 value 35.650965
## iter  20 value 23.665512
## iter  30 value 17.281386
## iter  40 value 10.154502
## iter  50 value 6.686735
## iter  60 value 6.244087
## iter  70 value 6.211796
## iter  80 value 6.196180
## iter  90 value 6.162809
## iter 100 value 6.152142
## final  value 6.152142 
## stopped after 100 iterations
## # weights:  56
## initial  value 297.860371 
## iter  10 value 27.305970
## iter  20 value 15.483042
## iter  30 value 9.690338
## iter  40 value 8.129648
## iter  50 value 6.973134
## iter  60 value 6.906713
## iter  70 value 6.869101
## iter  80 value 6.840714
## iter  90 value 6.822533
## iter 100 value 6.807764
## final  value 6.807764 
## stopped after 100 iterations
## # weights:  12
## initial  value 339.456790 
## iter  10 value 158.046015
## iter  20 value 65.717796
## iter  30 value 46.787679
## iter  40 value 38.271207
## iter  50 value 36.848772
## iter  60 value 36.575077
## iter  70 value 36.226322
## iter  80 value 36.046114
## iter  90 value 36.039011
## iter 100 value 35.936969
## final  value 35.936969 
## stopped after 100 iterations
## # weights:  34
## initial  value 396.446083 
## iter  10 value 49.591717
## iter  20 value 33.545530
## iter  30 value 29.656480
## iter  40 value 27.447190
## iter  50 value 26.319019
## iter  60 value 24.899691
## iter  70 value 24.678830
## iter  80 value 24.516449
## iter  90 value 24.098363
## iter 100 value 23.606689
## final  value 23.606689 
## stopped after 100 iterations
## # weights:  56
## initial  value 325.372656 
## iter  10 value 34.301235
## iter  20 value 20.901145
## iter  30 value 13.020419
## iter  40 value 12.256197
## iter  50 value 12.250246
## iter  60 value 12.250019
## iter  70 value 12.249909
## iter  80 value 12.033269
## iter  90 value 11.818460
## iter 100 value 11.811156
## final  value 11.811156 
## stopped after 100 iterations
## # weights:  12
## initial  value 327.906693 
## iter  10 value 61.219539
## iter  20 value 49.734517
## iter  30 value 49.118216
## iter  40 value 49.101690
## iter  40 value 49.101690
## iter  40 value 49.101690
## final  value 49.101690 
## converged
## # weights:  34
## initial  value 323.934935 
## iter  10 value 46.152240
## iter  20 value 40.840436
## iter  30 value 39.749908
## iter  40 value 39.514367
## iter  50 value 39.426968
## final  value 39.426886 
## converged
## # weights:  56
## initial  value 449.227090 
## iter  10 value 81.409576
## iter  20 value 46.841838
## iter  30 value 43.443981
## iter  40 value 41.657814
## iter  50 value 40.991857
## iter  60 value 40.891983
## iter  70 value 40.873833
## iter  80 value 40.872856
## final  value 40.872681 
## converged
## # weights:  12
## initial  value 326.766631 
## iter  10 value 44.353548
## iter  20 value 37.431520
## iter  30 value 33.556132
## iter  40 value 30.479939
## iter  50 value 30.467985
## iter  60 value 30.463700
## iter  70 value 30.458655
## iter  80 value 30.458144
## iter  90 value 30.457322
## final  value 30.457314 
## converged
## # weights:  34
## initial  value 428.667035 
## iter  10 value 43.686421
## iter  20 value 30.592240
## iter  30 value 26.969605
## iter  40 value 24.266306
## iter  50 value 23.839056
## iter  60 value 22.804244
## iter  70 value 22.668007
## iter  80 value 22.540927
## iter  90 value 22.469181
## iter 100 value 22.427528
## final  value 22.427528 
## stopped after 100 iterations
## # weights:  56
## initial  value 408.874223 
## iter  10 value 34.951565
## iter  20 value 12.870980
## iter  30 value 6.483366
## iter  40 value 6.307095
## iter  50 value 6.206916
## iter  60 value 6.150471
## iter  70 value 6.133738
## iter  80 value 6.117790
## iter  90 value 6.088511
## iter 100 value 6.066790
## final  value 6.066790 
## stopped after 100 iterations
## # weights:  12
## initial  value 321.754451 
## iter  10 value 42.735297
## iter  20 value 36.553903
## iter  30 value 36.425583
## iter  40 value 36.361319
## iter  50 value 36.346991
## iter  60 value 36.339317
## iter  70 value 36.331902
## iter  80 value 36.324998
## iter  90 value 36.321886
## iter 100 value 36.318710
## final  value 36.318710 
## stopped after 100 iterations
## # weights:  34
## initial  value 300.446391 
## iter  10 value 41.961751
## iter  20 value 30.257550
## iter  30 value 28.183516
## iter  40 value 22.689069
## iter  50 value 20.829621
## iter  60 value 19.144793
## iter  70 value 16.434296
## iter  80 value 15.874639
## iter  90 value 15.741785
## iter 100 value 15.574467
## final  value 15.574467 
## stopped after 100 iterations
## # weights:  56
## initial  value 282.021100 
## iter  10 value 32.901459
## iter  20 value 16.152079
## iter  30 value 12.074062
## iter  40 value 10.867879
## iter  50 value 10.565675
## iter  60 value 10.464206
## iter  70 value 10.422227
## iter  80 value 10.405932
## iter  90 value 10.394482
## iter 100 value 10.390740
## final  value 10.390740 
## stopped after 100 iterations
## # weights:  12
## initial  value 338.542762 
## iter  10 value 58.364417
## iter  20 value 47.889755
## iter  30 value 46.959061
## iter  40 value 46.913157
## final  value 46.913156 
## converged
## # weights:  34
## initial  value 389.067606 
## iter  10 value 64.563624
## iter  20 value 47.862307
## iter  30 value 41.700191
## iter  40 value 38.501372
## iter  50 value 37.391377
## iter  60 value 37.049787
## iter  70 value 36.855211
## iter  80 value 36.830464
## iter  90 value 36.830243
## final  value 36.830243 
## converged
## # weights:  56
## initial  value 314.006605 
## iter  10 value 39.786364
## iter  20 value 36.825762
## iter  30 value 36.042459
## iter  40 value 35.790063
## iter  50 value 35.749193
## iter  60 value 35.630582
## iter  70 value 34.800295
## iter  80 value 34.775821
## final  value 34.775630 
## converged
## # weights:  12
## initial  value 317.842554 
## iter  10 value 55.219614
## iter  20 value 42.411436
## iter  30 value 41.698575
## iter  40 value 36.533028
## iter  50 value 36.474702
## iter  60 value 36.466201
## iter  70 value 36.462348
## iter  80 value 36.458830
## iter  90 value 36.457076
## iter 100 value 36.456465
## final  value 36.456465 
## stopped after 100 iterations
## # weights:  34
## initial  value 315.805100 
## iter  10 value 35.696766
## iter  20 value 25.008868
## iter  30 value 19.314407
## iter  40 value 18.470075
## iter  50 value 18.313588
## iter  60 value 18.124856
## iter  70 value 17.847941
## iter  80 value 17.803263
## iter  90 value 17.693457
## iter 100 value 17.476898
## final  value 17.476898 
## stopped after 100 iterations
## # weights:  56
## initial  value 336.033457 
## iter  10 value 29.843576
## iter  20 value 19.062788
## iter  30 value 12.266330
## iter  40 value 9.990162
## iter  50 value 9.510100
## iter  60 value 7.360044
## iter  70 value 5.808872
## iter  80 value 5.238995
## iter  90 value 5.006698
## iter 100 value 3.884926
## final  value 3.884926 
## stopped after 100 iterations
## # weights:  12
## initial  value 373.448951 
## iter  10 value 45.158611
## iter  20 value 44.096037
## iter  30 value 43.343767
## iter  40 value 42.568253
## iter  50 value 42.525430
## final  value 42.525369 
## converged
## # weights:  34
## initial  value 303.311657 
## iter  10 value 39.258404
## iter  20 value 35.907574
## iter  30 value 32.926632
## iter  40 value 31.719819
## iter  50 value 31.054627
## iter  60 value 30.301461
## iter  70 value 29.207742
## iter  80 value 28.417600
## iter  90 value 27.315400
## iter 100 value 26.573440
## final  value 26.573440 
## stopped after 100 iterations
## # weights:  56
## initial  value 297.717687 
## iter  10 value 34.910317
## iter  20 value 19.097253
## iter  30 value 12.162892
## iter  40 value 11.962253
## iter  50 value 11.882074
## iter  60 value 11.825032
## iter  70 value 11.803696
## iter  80 value 11.799958
## iter  90 value 11.789507
## iter 100 value 11.633687
## final  value 11.633687 
## stopped after 100 iterations
## # weights:  12
## initial  value 323.344070 
## iter  10 value 59.196471
## iter  20 value 54.572127
## iter  30 value 54.313230
## final  value 54.265527 
## converged
## # weights:  34
## initial  value 422.110821 
## iter  10 value 46.135214
## iter  20 value 42.100740
## iter  30 value 41.349736
## iter  40 value 40.946203
## iter  50 value 40.871524
## iter  60 value 40.864045
## iter  70 value 40.862853
## iter  80 value 40.859037
## iter  90 value 40.856820
## final  value 40.856812 
## converged
## # weights:  56
## initial  value 306.653715 
## iter  10 value 61.734533
## iter  20 value 46.398463
## iter  30 value 42.976429
## iter  40 value 40.535781
## iter  50 value 38.903458
## iter  60 value 38.436156
## iter  70 value 38.371343
## iter  80 value 37.583306
## iter  90 value 37.167963
## iter 100 value 37.139218
## final  value 37.139218 
## stopped after 100 iterations
## # weights:  12
## initial  value 302.848084 
## iter  10 value 86.222643
## iter  20 value 62.549374
## iter  30 value 50.117326
## iter  40 value 42.790245
## iter  50 value 42.746444
## iter  60 value 42.704572
## iter  70 value 42.700133
## iter  80 value 42.697799
## iter  90 value 42.695362
## iter 100 value 42.693661
## final  value 42.693661 
## stopped after 100 iterations
## # weights:  34
## initial  value 357.848719 
## iter  10 value 50.353275
## iter  20 value 33.751623
## iter  30 value 32.033219
## iter  40 value 29.597684
## iter  50 value 28.331533
## iter  60 value 28.273034
## iter  70 value 28.207846
## iter  80 value 28.122741
## iter  90 value 28.036842
## iter 100 value 27.937599
## final  value 27.937599 
## stopped after 100 iterations
## # weights:  56
## initial  value 401.661057 
## iter  10 value 36.655848
## iter  20 value 16.011617
## iter  30 value 6.895899
## iter  40 value 6.428734
## iter  50 value 6.185441
## iter  60 value 6.111802
## iter  70 value 6.021786
## iter  80 value 5.957063
## iter  90 value 4.807588
## iter 100 value 4.566685
## final  value 4.566685 
## stopped after 100 iterations
## # weights:  12
## initial  value 341.667320 
## iter  10 value 50.797393
## iter  20 value 39.826114
## iter  30 value 39.597097
## iter  40 value 39.548037
## iter  50 value 39.525868
## iter  60 value 39.514783
## iter  70 value 39.503536
## iter  80 value 39.500868
## iter  90 value 39.494332
## iter 100 value 39.491669
## final  value 39.491669 
## stopped after 100 iterations
## # weights:  34
## initial  value 330.883225 
## iter  10 value 33.931619
## iter  20 value 20.963873
## iter  30 value 14.558637
## iter  40 value 13.880806
## iter  50 value 13.768648
## iter  60 value 13.766768
## iter  70 value 13.766501
## iter  80 value 13.766430
## final  value 13.766410 
## converged
## # weights:  56
## initial  value 366.759875 
## iter  10 value 31.998240
## iter  20 value 19.326931
## iter  30 value 13.284252
## iter  40 value 13.139520
## iter  50 value 13.128890
## final  value 13.128861 
## converged
## # weights:  12
## initial  value 360.723364 
## iter  10 value 79.764384
## iter  20 value 58.554909
## iter  30 value 51.915182
## iter  40 value 48.699427
## final  value 48.688574 
## converged
## # weights:  34
## initial  value 421.298943 
## iter  10 value 85.137440
## iter  20 value 41.359032
## iter  30 value 38.548152
## iter  40 value 36.875606
## iter  50 value 36.830442
## final  value 36.830432 
## converged
## # weights:  56
## initial  value 304.019070 
## iter  10 value 43.255238
## iter  20 value 38.254552
## iter  30 value 36.850424
## iter  40 value 36.648594
## iter  50 value 36.550726
## iter  60 value 36.327745
## iter  70 value 36.271464
## iter  80 value 36.254873
## iter  90 value 36.253762
## final  value 36.253760 
## converged
## # weights:  12
## initial  value 328.582102 
## iter  10 value 46.350500
## iter  20 value 40.087911
## iter  30 value 39.780897
## iter  40 value 39.642761
## iter  50 value 39.626044
## iter  60 value 39.620422
## iter  70 value 39.617573
## iter  80 value 39.616729
## iter  90 value 39.616403
## iter 100 value 39.616162
## final  value 39.616162 
## stopped after 100 iterations
## # weights:  34
## initial  value 420.985148 
## iter  10 value 40.782041
## iter  20 value 31.436978
## iter  30 value 29.810226
## iter  40 value 29.752897
## iter  50 value 29.731764
## iter  60 value 29.722300
## iter  70 value 29.708030
## iter  80 value 29.701166
## iter  90 value 29.695962
## iter 100 value 29.687023
## final  value 29.687023 
## stopped after 100 iterations
## # weights:  56
## initial  value 305.807773 
## iter  10 value 32.868515
## iter  20 value 28.672268
## iter  30 value 23.994374
## iter  40 value 22.396665
## iter  50 value 22.173441
## iter  60 value 22.095568
## iter  70 value 21.691671
## iter  80 value 20.200593
## iter  90 value 19.546081
## iter 100 value 19.371937
## final  value 19.371937 
## stopped after 100 iterations
## # weights:  34
## initial  value 326.919377 
## iter  10 value 36.157512
## iter  20 value 30.097667
## iter  30 value 23.574816
## iter  40 value 23.268963
## iter  50 value 23.077785
## iter  60 value 20.578788
## iter  70 value 19.367780
## iter  80 value 19.204978
## iter  90 value 18.867899
## iter 100 value 18.771267
## final  value 18.771267 
## stopped after 100 iterations
resultado_entrenamiento5<- predict(modelo5, entrenamiento)
resultado_prueba5<- predict(modelo5, prueba)


# Matriz de Confusión

mcre5<- confusionMatrix(resultado_entrenamiento5, entrenamiento$Class) #Matriz de confusión del resultado del entrenamiento
mcre5
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       351         0
##   malignant      5       192
##                                          
##                Accuracy : 0.9909         
##                  95% CI : (0.9788, 0.997)
##     No Information Rate : 0.6496         
##     P-Value [Acc > NIR] : < 2e-16        
##                                          
##                   Kappa : 0.9801         
##                                          
##  Mcnemar's Test P-Value : 0.07364        
##                                          
##             Sensitivity : 0.9860         
##             Specificity : 1.0000         
##          Pos Pred Value : 1.0000         
##          Neg Pred Value : 0.9746         
##              Prevalence : 0.6496         
##          Detection Rate : 0.6405         
##    Detection Prevalence : 0.6405         
##       Balanced Accuracy : 0.9930         
##                                          
##        'Positive' Class : benign         
## 
mcrp5<- confusionMatrix(resultado_prueba5, prueba$Class) #Matriz de confusión del resultado de la prueba
mcrp5
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign        86         4
##   malignant      2        43
##                                           
##                Accuracy : 0.9556          
##                  95% CI : (0.9058, 0.9835)
##     No Information Rate : 0.6519          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9011          
##                                           
##  Mcnemar's Test P-Value : 0.6831          
##                                           
##             Sensitivity : 0.9773          
##             Specificity : 0.9149          
##          Pos Pred Value : 0.9556          
##          Neg Pred Value : 0.9556          
##              Prevalence : 0.6519          
##          Detection Rate : 0.6370          
##    Detection Prevalence : 0.6667          
##       Balanced Accuracy : 0.9461          
##                                           
##        'Positive' Class : benign          
## 
#en este modelo la presición (acurracy) es lo que se toma en cuenta

6. Modelo con el método rf

modelo6<- train(Class ~ ., 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_entrenamiento6<- predict(modelo6, entrenamiento)
resultado_prueba6<- predict(modelo6, prueba)


# Matriz de Confusión

mcre6<- confusionMatrix(resultado_entrenamiento6, entrenamiento$Class) #Matriz de confusión del resultado del entrenamiento
mcre6
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       356         1
##   malignant      0       191
##                                      
##                Accuracy : 0.9982     
##                  95% CI : (0.9899, 1)
##     No Information Rate : 0.6496     
##     P-Value [Acc > NIR] : <2e-16     
##                                      
##                   Kappa : 0.996      
##                                      
##  Mcnemar's Test P-Value : 1          
##                                      
##             Sensitivity : 1.0000     
##             Specificity : 0.9948     
##          Pos Pred Value : 0.9972     
##          Neg Pred Value : 1.0000     
##              Prevalence : 0.6496     
##          Detection Rate : 0.6496     
##    Detection Prevalence : 0.6515     
##       Balanced Accuracy : 0.9974     
##                                      
##        'Positive' Class : benign     
## 
mcrp6<- confusionMatrix(resultado_prueba6, prueba$Class) #Matriz de confusión del resultado de la prueba
mcrp6
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign        85         1
##   malignant      3        46
##                                           
##                Accuracy : 0.9704          
##                  95% CI : (0.9259, 0.9919)
##     No Information Rate : 0.6519          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9354          
##                                           
##  Mcnemar's Test P-Value : 0.6171          
##                                           
##             Sensitivity : 0.9659          
##             Specificity : 0.9787          
##          Pos Pred Value : 0.9884          
##          Neg Pred Value : 0.9388          
##              Prevalence : 0.6519          
##          Detection Rate : 0.6296          
##    Detection Prevalence : 0.6370          
##       Balanced Accuracy : 0.9723          
##                                           
##        'Positive' Class : benign          
## 
#en este modelo la presición (acurracy) es lo que se toma en cuenta

Resumen de Resultados

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

rownames(resultados) <- c("Precisión de entrenamiento", "Precisión de prueba")
resultados
##                            svmLinear svmRadial   svmPoly     rpart      nnet
## Precisión de entrenamiento 0.9708029 0.9963504 0.9708029 0.9635036 0.9908759
## Precisión de prueba        0.9777778 0.9555556 0.9777778 0.9555556 0.9555556
##                                   rf
## Precisión de entrenamiento 0.9981752
## Precisión de prueba        0.9703704

Conclusión

svmLinear y svmPoly no tienen sobreajuste.

LS0tDQp0aXRsZTogIk1hY2hpbmUgTGVhcm5pbmc6IEJyZWFzdENhbmNlciINCmF1dGhvcjogIkthdGhpYSBHZXJhbGRpbmUgUnVpeiBDYXN0ZWzDoW4iDQpkYXRlOiAiMjAyNC0wMi0yOSINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KICAgIHRoZW1lOiBjb3Ntbw0KLS0tDQoNCiFbXShDOlxcVXNlcnNcXGthdGhpXFxPbmVEcml2ZVxcRXNjcml0b3Jpb1xcTTJfSUEgY29uIEltcGFjdG8gRW1wcmVzYXJpYWxcXGNhbmNlcmRlbWFtYV9pbWcuanBnKSAgICANCg0KIyBUZW9yw61hICANCkRlIGFjdWVyZG8gY29uIE1heW8gQ2xpbmljLCBlbCBjw6FuY2VyIGRlIG1hbWEgZXMgdW4gdGlwbyBkZSBjw6FuY2VyIHF1ZSBzZSBvcmlnaW5hIGVuIGxhcyBjw6lsdWxhcyBkZSBsYXMgbWFtYXMgeSBwdWVkZSBhZmVjdGFyIHRhbnRvIGEgaG9tYnJlcyBjb21vIGEgbXVqZXJlczsgbm8gb2JzdGFudGUsIGVzIG3DoXMgY29tw7puIGVuIGxhcyBtdWplcmVzLiAgDQoNCkVudHJlIGxvcyBzw61udG9tYXMgbcOhcyBjb211bmVzIHNlIGVuY3VlbnRyYW46ICANCg0KKiBDYW1iaW9zIGVuIGVsIHRhbWHDsW8sIGZvcm1hIG8gYXBhcmllbmNpYSBkZSB1bmEgbWFtYS4gIA0KKiBBbHRlcmFjaW9uZXMgZW4gbGEgcGllbCBxdWUgcmVjdWJyZSBsYSBtYW1hLCBjb21vIGxhIGZvcm1hY2nDs24gZGUgaG95dWVsb3MuICANCiogUHJlc2VuY2lhIGRlIHVuIGJ1bHRvIG8gZW5ncm9zYW1pZW50byBlbiBsYSBtYW1hLiAgDQogIA0KRnVlbnRlOiBDw6FuY2VyIGRlIG1hbWEgIA0KDQojIEluc3RhbGFyIHBhcXVldGVzIHkgbGxhbWFyIGxpYnJlcsOtYXMNCmBgYHtyfQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJjYXJldCIpICMgU2UgdXNhIHBhcmEgbG9zIGFsZ29yaXRtb3MgZGUgYXByZW5kaXphamUgYXV0b23DoXRpY28NCmxpYnJhcnkoY2FyZXQpDQojIGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKSAjIFBhcmEgaGFjZXIgZ3LDoWZpY2FzIGNvbiBtZWpvciBkaXNlw7FvDQpsaWJyYXJ5KGdncGxvdDIpDQojIGluc3RhbGwucGFja2FnZXMoImxhdHRpY2UiKSAjIENyZWFyIGdyw6FmaWNvcw0KbGlicmFyeShsYXR0aWNlKQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJkYXRhc2V0cyIpICMgVXNhciBsYSBiYXNlIGRlIGRhdG9zICJJcmlzIg0KbGlicmFyeShkYXRhc2V0cykNCiNpbnN0YWxsLnBhY2thZ2VzKCJEYXRhRXhwbG9yZXIiKQ0KbGlicmFyeShEYXRhRXhwbG9yZXIpDQpsaWJyYXJ5KGtlcm5sYWIpDQojIGluc3RhbGwucGFja2FnZXMoIm1sYmVuY2giKQ0KbGlicmFyeShtbGJlbmNoKQ0KYGBgDQoNCg0KIyBQYXNvIDEuIE9idGVuZXIgZGF0b3MNCmBgYHtyfQ0KZGF0YShCcmVhc3RDYW5jZXIpDQpkZiA8LSBkYXRhLmZyYW1lKEJyZWFzdENhbmNlcikNCmBgYA0KDQojIFBhc28gMi4gTGltcGlhciBkYXRvcw0KYGBge3J9DQpkZiA8LSBkZlssIC0xXSAjIEVsaW1pbmFyIGNvbHVtbmEgIklEIg0KZGYgPC0gbmEub21pdChkZikgIyBFbGltaW5hciBOQQ0KDQojIENhbWJpYXIgdGlwbyBkZSBkYXRvDQpkZiRDbC50aGlja25lc3MgPC0gYXMubnVtZXJpYyhkZiRDbC50aGlja25lc3MpDQpkZiRDZWxsLnNpemUgPC0gYXMubnVtZXJpYyhkZiRDZWxsLnNpemUpDQpkZiRDZWxsLnNoYXBlIDwtIGFzLm51bWVyaWMoZGYkQ2VsbC5zaGFwZSkNCmRmJE1hcmcuYWRoZXNpb24gPC0gYXMubnVtZXJpYyhkZiRNYXJnLmFkaGVzaW9uKQ0KZGYkRXBpdGguYy5zaXplIDwtIGFzLm51bWVyaWMoZGYkRXBpdGguYy5zaXplKQ0KZGYkQmFyZS5udWNsZWkgPC0gYXMubnVtZXJpYyhkZiRCYXJlLm51Y2xlaSkNCmRmJEJsLmNyb21hdGluIDwtIGFzLm51bWVyaWMoZGYkQmwuY3JvbWF0aW4pDQpkZiROb3JtYWwubnVjbGVvbGkgPC0gYXMubnVtZXJpYyhkZiROb3JtYWwubnVjbGVvbGkpDQpkZiRNaXRvc2VzIDwtIGFzLm51bWVyaWMoZGYkTWl0b3NlcykNCmRmJENsYXNzIDwtIGFzLmZhY3RvcihkZiRDbGFzcykNCmBgYA0KDQoNCiMgQW7DoWxpc2lzIGV4cGxvcmF0b3Jpbw0KYGBge3J9DQpzdW1tYXJ5KGRmKQ0Kc3RyKGRmKQ0KY3JlYXRlX3JlcG9ydChkZikNCnBsb3RfbWlzc2luZyhkZikNCnBsb3RfaGlzdG9ncmFtKGRmKQ0KcGxvdF9jb3JyZWxhdGlvbihkZikNCnBsb3RfYm94cGxvdChkZiwgYnkgPSJDbGFzcyIpDQpgYGANCg0KDQoqKiBOT1RBOiBMYSB2YXJpYWJsZSBxdWUgcXVlcmVtb3MgcHJlZGVjaXIgZGViZSB0ZW5lciBmb3JtYXRvIGRlIEZBQ1RPUi4qKg0KDQojIFBhcnRpciBkYXRvcyA4MC0yMCAoODAlIGRlIDE1MCBxdWUgc29uIGxhcyBvYnMuIGRlbCBkZikNCmBgYHtyfQ0Kc2V0LnNlZWQoMTIzKQ0KcmVuZ2xvbmVzX2VudHJlbmFtaWVudG8gPC0gY3JlYXRlRGF0YVBhcnRpdGlvbihkZiRDbGFzcywgcD0wLjgsIGxpc3Q9RkFMU0UpDQplbnRyZW5hbWllbnRvIDwtIGRmW3Jlbmdsb25lc19lbnRyZW5hbWllbnRvLCBdDQpwcnVlYmEgPC0gZGZbLXJlbmdsb25lc19lbnRyZW5hbWllbnRvLCBdDQpgYGANCg0KDQojIERpc3RpbnRvcyB0aXBvcyBkZSBNw6l0b2RvcyBwYXJhIE1vZGVsYXINCkxvcyBtw6l0b2RvcyBtw6FzIHV0aWxpemFkb3MgcGFyYSBtb2RlbGFyIGFwcmVuZGl6YWplIGF1dG9tw6F0aWNvIHNvbjoNCg0KKiBTVk06ICpTdXBwb3J0IFZlY3RvciBNYWNoaW5lKiBvIE3DoXF1aW5hIGRlIFZlY3RvcmVzIGRlIFNvcG9ydGUuIEhheSB2YXJpb3Mgc3VidGlwb3M6IExpbmVhbCAoc3ZtTGluZWFsKSwgUmFkaWFsIChzdm1SYWRpYWwpLCBQb2xpbsOzbWljbyAoc3ZtUG9seSksIGV0Yy4gIA0KKiAqKsOBcmJvbCBkZSBEZWNpc2nDs24qKjogcnBhcnQgIA0KKiAqKlJlZGVzIE5ldXJvbmFsZXMqKjogbm5ldCAgDQoqICoqUmFuZG9tIEZvcmVzdCoqIG8gQm9zcXVlcyBBbGVhdG9yaW9zOiByZiAgDQoNCg0KIyAxLiBNb2RlbG8gY29uIGVsIG3DqXRvZG8gc3ZtTGluZWFsDQpgYGB7cn0NCm1vZGVsbzE8LSB0cmFpbihDbGFzcyB+IC4sIGRhdGE9IGVudHJlbmFtaWVudG8sIA0KICAgICAgICAgICAgICAgbWV0aG9kID0gInN2bUxpbmVhciIsICMgQ2FtYmlhcg0KICAgICAgICAgICAgICAgcHJlUHJvY2Vzcz1jKCJzY2FsZSIsICJjZW50ZXIiKSwNCiAgICAgICAgICAgICAgIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2QgPSAiY3YiLCBudW1iZXI9MTApLCANCiAgICAgICAgICAgICAgIHR1bmVHcmlkPSBkYXRhLmZyYW1lKEM9MSkpICMgQ3VhbmRvIGVzIHN2bUxpbmVhcg0KDQpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzE8LSBwcmVkaWN0KG1vZGVsbzEsIGVudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhMTwtIHByZWRpY3QobW9kZWxvMSwgcHJ1ZWJhKQ0KDQoNCiMgTWF0cml6IGRlIENvbmZ1c2nDs24NCg0KbWNyZTE8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG8xLCBlbnRyZW5hbWllbnRvJENsYXNzKSAjTWF0cml6IGRlIGNvbmZ1c2nDs24gZGVsIHJlc3VsdGFkbyBkZWwgZW50cmVuYW1pZW50bw0KbWNyZTENCm1jcnAxPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmExLCBwcnVlYmEkQ2xhc3MpICNNYXRyaXogZGUgY29uZnVzacOzbiBkZWwgcmVzdWx0YWRvIGRlIGxhIHBydWViYQ0KbWNycDENCg0KI2VuIGVzdGUgbW9kZWxvIGxhIHByZXNpY2nDs24gKGFjdXJyYWN5KSBlcyBsbyBxdWUgc2UgdG9tYSBlbiBjdWVudGENCmBgYA0KDQoNCg0KIyAyLiBNb2RlbG8gY29uIGVsIG3DqXRvZG8gc3ZtUmFkaWFsDQpgYGB7cn0NCm1vZGVsbzI8LSB0cmFpbihDbGFzcyB+IC4sIGRhdGE9IGVudHJlbmFtaWVudG8sIA0KICAgICAgICAgICAgICAgbWV0aG9kID0gInN2bVJhZGlhbCIsICMgQ2FtYmlhcg0KICAgICAgICAgICAgICAgcHJlUHJvY2Vzcz1jKCJzY2FsZSIsICJjZW50ZXIiKSwNCiAgICAgICAgICAgICAgIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2QgPSAiY3YiLCBudW1iZXI9MTApLCANCiAgICAgICAgICAgICAgIHR1bmVHcmlkPSBkYXRhLmZyYW1lKHNpZ21hPTEsIEM9MSkpICMgQ2FtYmlhcg0KDQpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzI8LSBwcmVkaWN0KG1vZGVsbzIsIGVudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhMjwtIHByZWRpY3QobW9kZWxvMiwgcHJ1ZWJhKQ0KDQoNCiMgTWF0cml6IGRlIENvbmZ1c2nDs24NCg0KbWNyZTI8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG8yLCBlbnRyZW5hbWllbnRvJENsYXNzKSAjTWF0cml6IGRlIGNvbmZ1c2nDs24gZGVsIHJlc3VsdGFkbyBkZWwgZW50cmVuYW1pZW50bw0KbWNyZTINCm1jcnAyPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmEyLCBwcnVlYmEkQ2xhc3MpICNNYXRyaXogZGUgY29uZnVzacOzbiBkZWwgcmVzdWx0YWRvIGRlIGxhIHBydWViYQ0KbWNycDINCg0KI2VuIGVzdGUgbW9kZWxvIGxhIHByZXNpY2nDs24gKGFjdXJyYWN5KSBlcyBsbyBxdWUgc2UgdG9tYSBlbiBjdWVudGENCmBgYA0KDQoNCg0KIyAzLiBNb2RlbG8gY29uIGVsIG3DqXRvZG8gc3ZtUG9seQ0KYGBge3J9DQptb2RlbG8zPC0gdHJhaW4oQ2xhc3MgfiAuLCBkYXRhPSBlbnRyZW5hbWllbnRvLCANCiAgICAgICAgICAgICAgIG1ldGhvZCA9ICJzdm1Qb2x5IiwgIyBDYW1iaWFyDQogICAgICAgICAgICAgICBwcmVQcm9jZXNzPWMoInNjYWxlIiwgImNlbnRlciIpLA0KICAgICAgICAgICAgICAgdHJDb250cm9sID0gdHJhaW5Db250cm9sKG1ldGhvZCA9ICJjdiIsIG51bWJlcj0xMCksIA0KICAgICAgICAgICAgICAgdHVuZUdyaWQ9IGRhdGEuZnJhbWUoZGVncmVlPTEsIHNjYWxlPTEsIEM9MSkpICMgQ2FtYmlhcg0KDQpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzM8LSBwcmVkaWN0KG1vZGVsbzMsIGVudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhMzwtIHByZWRpY3QobW9kZWxvMywgcHJ1ZWJhKQ0KDQoNCiMgTWF0cml6IGRlIENvbmZ1c2nDs24NCg0KbWNyZTM8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG8zLCBlbnRyZW5hbWllbnRvJENsYXNzKSAjTWF0cml6IGRlIGNvbmZ1c2nDs24gZGVsIHJlc3VsdGFkbyBkZWwgZW50cmVuYW1pZW50bw0KbWNyZTMNCm1jcnAzPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmEzLCBwcnVlYmEkQ2xhc3MpICNNYXRyaXogZGUgY29uZnVzacOzbiBkZWwgcmVzdWx0YWRvIGRlIGxhIHBydWViYQ0KbWNycDMNCg0KI2VuIGVzdGUgbW9kZWxvIGxhIHByZXNpY2nDs24gKGFjdXJyYWN5KSBlcyBsbyBxdWUgc2UgdG9tYSBlbiBjdWVudGENCmBgYA0KDQoNCg0KIyA0LiBNb2RlbG8gY29uIGVsIG3DqXRvZG8gcnBhcnQNCmBgYHtyfQ0KbW9kZWxvNDwtIHRyYWluKENsYXNzIH4gLiwgZGF0YT0gZW50cmVuYW1pZW50bywgDQogICAgICAgICAgICAgICBtZXRob2QgPSAicnBhcnQiLCAjIENhbWJpYXINCiAgICAgICAgICAgICAgIHByZVByb2Nlc3M9Yygic2NhbGUiLCAiY2VudGVyIiksDQogICAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kID0gImN2IiwgbnVtYmVyPTEwKSwgDQogICAgICAgICAgICAgICB0dW5lTGVuZ3RoID0gMTApICMgQ2FtYmlhcg0KDQpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzQ8LSBwcmVkaWN0KG1vZGVsbzQsIGVudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhNDwtIHByZWRpY3QobW9kZWxvNCwgcHJ1ZWJhKQ0KDQoNCiMgTWF0cml6IGRlIENvbmZ1c2nDs24NCg0KbWNyZTQ8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG80LCBlbnRyZW5hbWllbnRvJENsYXNzKSAjTWF0cml6IGRlIGNvbmZ1c2nDs24gZGVsIHJlc3VsdGFkbyBkZWwgZW50cmVuYW1pZW50bw0KbWNyZTQNCm1jcnA0PC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmE0LCBwcnVlYmEkQ2xhc3MpICNNYXRyaXogZGUgY29uZnVzacOzbiBkZWwgcmVzdWx0YWRvIGRlIGxhIHBydWViYQ0KbWNycDQNCg0KI2VuIGVzdGUgbW9kZWxvIGxhIHByZXNpY2nDs24gKGFjdXJyYWN5KSBlcyBsbyBxdWUgc2UgdG9tYSBlbiBjdWVudGENCmBgYA0KDQoNCg0KIyA1LiBNb2RlbG8gY29uIGVsIG3DqXRvZG8gbm5ldA0KYGBge3J9DQptb2RlbG81PC0gdHJhaW4oQ2xhc3MgfiAuLCBkYXRhPSBlbnRyZW5hbWllbnRvLCANCiAgICAgICAgICAgICAgIG1ldGhvZCA9ICJubmV0IiwgIyBDYW1iaWFyDQogICAgICAgICAgICAgICBwcmVQcm9jZXNzPWMoInNjYWxlIiwgImNlbnRlciIpLA0KICAgICAgICAgICAgICAgdHJDb250cm9sID0gdHJhaW5Db250cm9sKG1ldGhvZCA9ICJjdiIsIG51bWJlcj0xMCkpICMgQ2FtYmlhcg0KDQpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzU8LSBwcmVkaWN0KG1vZGVsbzUsIGVudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhNTwtIHByZWRpY3QobW9kZWxvNSwgcHJ1ZWJhKQ0KDQoNCiMgTWF0cml6IGRlIENvbmZ1c2nDs24NCg0KbWNyZTU8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG81LCBlbnRyZW5hbWllbnRvJENsYXNzKSAjTWF0cml6IGRlIGNvbmZ1c2nDs24gZGVsIHJlc3VsdGFkbyBkZWwgZW50cmVuYW1pZW50bw0KbWNyZTUNCm1jcnA1PC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmE1LCBwcnVlYmEkQ2xhc3MpICNNYXRyaXogZGUgY29uZnVzacOzbiBkZWwgcmVzdWx0YWRvIGRlIGxhIHBydWViYQ0KbWNycDUNCg0KI2VuIGVzdGUgbW9kZWxvIGxhIHByZXNpY2nDs24gKGFjdXJyYWN5KSBlcyBsbyBxdWUgc2UgdG9tYSBlbiBjdWVudGENCmBgYA0KDQoNCiMgNi4gTW9kZWxvIGNvbiBlbCBtw6l0b2RvIHJmDQpgYGB7cn0NCm1vZGVsbzY8LSB0cmFpbihDbGFzcyB+IC4sIGRhdGE9IGVudHJlbmFtaWVudG8sIA0KICAgICAgICAgICAgICAgbWV0aG9kID0gInJmIiwgIyBDYW1iaWFyDQogICAgICAgICAgICAgICBwcmVQcm9jZXNzPWMoInNjYWxlIiwgImNlbnRlciIpLA0KICAgICAgICAgICAgICAgdHJDb250cm9sID0gdHJhaW5Db250cm9sKG1ldGhvZCA9ICJjdiIsIG51bWJlcj0xMCksDQogICAgICAgICAgICAgICB0dW5lR3JpZD0gZXhwYW5kLmdyaWQobXRyeSA9IGMoMiw0LDYpKSkgIyBDYW1iaWFyDQoNCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvNjwtIHByZWRpY3QobW9kZWxvNiwgZW50cmVuYW1pZW50bykNCnJlc3VsdGFkb19wcnVlYmE2PC0gcHJlZGljdChtb2RlbG82LCBwcnVlYmEpDQoNCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbg0KDQptY3JlNjwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzYsIGVudHJlbmFtaWVudG8kQ2xhc3MpICNNYXRyaXogZGUgY29uZnVzacOzbiBkZWwgcmVzdWx0YWRvIGRlbCBlbnRyZW5hbWllbnRvDQptY3JlNg0KbWNycDY8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTYsIHBydWViYSRDbGFzcykgI01hdHJpeiBkZSBjb25mdXNpw7NuIGRlbCByZXN1bHRhZG8gZGUgbGEgcHJ1ZWJhDQptY3JwNg0KDQojZW4gZXN0ZSBtb2RlbG8gbGEgcHJlc2ljacOzbiAoYWN1cnJhY3kpIGVzIGxvIHF1ZSBzZSB0b21hIGVuIGN1ZW50YQ0KYGBgDQoNCg0KIyBSZXN1bWVuICBkZSBSZXN1bHRhZG9zDQpgYGB7cn0NCnJlc3VsdGFkb3MgPC0gZGF0YS5mcmFtZSgNCiAgInN2bUxpbmVhciIgPSBjKG1jcmUxJG92ZXJhbGxbIkFjY3VyYWN5Il0sIG1jcnAxJG92ZXJhbGxbIkFjY3VyYWN5Il0pLA0KICAic3ZtUmFkaWFsIiA9IGMobWNyZTIkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDIkb3ZlcmFsbFsiQWNjdXJhY3kiXSksDQogICJzdm1Qb2x5IiA9IGMobWNyZTMkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDMkb3ZlcmFsbFsiQWNjdXJhY3kiXSksDQogICJycGFydCIgPSBjKG1jcmU0JG92ZXJhbGxbIkFjY3VyYWN5Il0sIG1jcnA0JG92ZXJhbGxbIkFjY3VyYWN5Il0pLA0KICAibm5ldCIgPSBjKG1jcmU1JG92ZXJhbGxbIkFjY3VyYWN5Il0sIG1jcnA1JG92ZXJhbGxbIkFjY3VyYWN5Il0pLA0KICAicmYiID0gYyhtY3JlNiRvdmVyYWxsWyJBY2N1cmFjeSJdLCBtY3JwNiRvdmVyYWxsWyJBY2N1cmFjeSJdKQ0KKQ0KDQpyb3duYW1lcyhyZXN1bHRhZG9zKSA8LSBjKCJQcmVjaXNpw7NuIGRlIGVudHJlbmFtaWVudG8iLCAiUHJlY2lzacOzbiBkZSBwcnVlYmEiKQ0KcmVzdWx0YWRvcw0KYGBgDQoNCiMgQ29uY2x1c2nDs24NCnN2bUxpbmVhciB5IHN2bVBvbHkgbm8gdGllbmVuIHNvYnJlYWp1c3RlLg0KDQoNCg==