Teoría

La función caret (Clasification And REgression Training) es un paquete integral con una amplia variedad de algoritmos para el aprendizaje automático.

Obtención y entendimiento de los datos

Librerías

library(ggplot2) # Gráficas con mejor diseño
library(lattice) # Crear gráficos
library(caret) # Algoritmos de aprendizaje automático
library(datasets) # Usar la base de datos "Iris"
library(DataExplorer) # Análisis exploratorio de los datos
library(kernlab)
## 
## Attaching package: 'kernlab'
## The following object is masked from 'package:ggplot2':
## 
##     alpha
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.3     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ lubridate 1.9.2     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ kernlab::alpha() masks ggplot2::alpha()
## ✖ purrr::cross()   masks kernlab::cross()
## ✖ 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
library(kableExtra)
## 
## Attaching package: 'kableExtra'
## 
## The following object is masked from 'package:dplyr':
## 
##     group_rows
library(mlbench)
library(dplyr)

Obetener la base de datos

# Base de datos original
data(BreastCancer)
df = BreastCancer
# Base de datos con variables seleccionadas
df_c <- df %>% 
  select(-Id) %>%
  rename(Tipo = Class)
# Base de datos con variables continuas
df_cc <- df_c %>%
  mutate(across(where(is.factor), as.numeric))

EDA

summary(df)
##       Id             Cl.thickness   Cell.size     Cell.shape  Marg.adhesion
##  Length:699         1      :145   1      :384   1      :353   1      :407  
##  Class :character   5      :130   10     : 67   2      : 59   2      : 58  
##  Mode  :character   3      :108   3      : 52   10     : 58   3      : 58  
##                     4      : 80   2      : 45   3      : 56   10     : 55  
##                     10     : 69   4      : 40   4      : 44   4      : 33  
##                     2      : 50   5      : 30   5      : 34   8      : 25  
##                     (Other):117   (Other): 81   (Other): 95   (Other): 63  
##   Epith.c.size  Bare.nuclei   Bl.cromatin  Normal.nucleoli    Mitoses   
##  2      :386   1      :402   2      :166   1      :443     1      :579  
##  3      : 72   10     :132   3      :165   10     : 61     2      : 35  
##  4      : 48   2      : 30   1      :152   3      : 44     3      : 33  
##  1      : 47   5      : 30   7      : 73   2      : 36     10     : 14  
##  6      : 41   3      : 28   4      : 40   8      : 24     4      : 12  
##  5      : 39   (Other): 61   5      : 34   6      : 22     7      :  9  
##  (Other): 66   NA's   : 16   (Other): 69   (Other): 69     (Other): 17  
##        Class    
##  benign   :458  
##  malignant:241  
##                 
##                 
##                 
##                 
## 
str(df) # Confirmar que las variables vengan en el formato necesario.
## 'data.frame':    699 obs. of  11 variables:
##  $ Id             : chr  "1000025" "1002945" "1015425" "1016277" ...
##  $ Cl.thickness   : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 5 5 3 6 4 8 1 2 2 4 ...
##  $ Cell.size      : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 4 1 8 1 10 1 1 1 2 ...
##  $ Cell.shape     : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 4 1 8 1 10 1 2 1 1 ...
##  $ Marg.adhesion  : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 5 1 1 3 8 1 1 1 1 ...
##  $ Epith.c.size   : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 2 7 2 3 2 7 2 2 2 2 ...
##  $ Bare.nuclei    : Factor w/ 10 levels "1","2","3","4",..: 1 10 2 4 1 10 10 1 1 1 ...
##  $ Bl.cromatin    : Factor w/ 10 levels "1","2","3","4",..: 3 3 3 3 3 9 3 3 1 2 ...
##  $ Normal.nucleoli: Factor w/ 10 levels "1","2","3","4",..: 1 2 1 7 1 7 1 1 1 1 ...
##  $ Mitoses        : Factor w/ 9 levels "1","2","3","4",..: 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 ...
#create_report(df)
plot_missing(df)

# Tratar registros con NAs
df_c <- na.omit(df_c)
plot_boxplot(df_cc, by = "Tipo")
## Warning: Removed 16 rows containing non-finite values (`stat_boxplot()`).

plot_bar(df)
## 1 columns ignored with more than 50 categories.
## Id: 645 categories

plot_correlation(df_cc)
## Warning: Removed 18 rows containing missing values (`geom_text()`).

Uso de CARET

Partición de datos

set.seed(123)
DataPart= createDataPartition(df_c$Tipo, p=0.8, list = FALSE)
train_set= df_c[DataPart,]
test_set = df_c[-DataPart,]

Métodos para Modelar

Los métodos más utilizados para modelar aprendixaje automático son:

  • SVM: Support Vector Machine o Máquina de Vectores de soporte. Hay varios subtipos:
    • Lineal (svmLinear)
    • Radial (svmRadial)
    • Polinómico (svmPoly)
  • Árbol de decisión: rpart
  • Redes Neuronales: nnet
  • Random Forests: rf

SVM Lineal

Entrenamiento de Modelo

modelo_svml = train(Tipo ~., data = train_set,
                    method = "svmLinear",
                    preProcess = c("scale", "center"),
                    trControl = trainControl(method = "cv", number =10),
                    tuneGrid = data.frame(C=1)
                    )
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: Bare.nuclei6
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.

Resultados de Modelo

resultados_train_svml = predict(modelo_svml, train_set)
resultados_test_svml = predict(modelo_svml, test_set)

Matriz de Confusión

##### ENTRENAMIENTO ######
MCRE_svml = confusionMatrix(resultados_train_svml, train_set$Tipo) # MCRE - Matriz de Confusión de Resultados de Entrenamiento.
#MCRE_svml

##### PRUEBA #####
MCRP_svml = confusionMatrix(resultados_test_svml, test_set$Tipo) # MCRE - Matriz de Confusión de Resultados de Prueba.
MCRP_svml
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign        83         7
##   malignant      5        40
##                                           
##                Accuracy : 0.9111          
##                  95% CI : (0.8499, 0.9532)
##     No Information Rate : 0.6519          
##     P-Value [Acc > NIR] : 2.463e-12       
##                                           
##                   Kappa : 0.8022          
##                                           
##  Mcnemar's Test P-Value : 0.7728          
##                                           
##             Sensitivity : 0.9432          
##             Specificity : 0.8511          
##          Pos Pred Value : 0.9222          
##          Neg Pred Value : 0.8889          
##              Prevalence : 0.6519          
##          Detection Rate : 0.6148          
##    Detection Prevalence : 0.6667          
##       Balanced Accuracy : 0.8971          
##                                           
##        'Positive' Class : benign          
## 

SVM Radial

Entrenamiento de Modelo

modelo_svmr = train(Tipo ~., data = train_set,
                    method = "svmRadial",
                    preProcess = c("scale", "center"),
                    trControl = trainControl(method = "cv", number =10),
                    tuneGrid = data.frame(sigma =1, C=1)
                    )
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: Mitoses6
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: Bare.nuclei6
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.

Resultados de Modelo

resultados_train_svmr = predict(modelo_svmr, train_set)
resultados_test_svmr = predict(modelo_svmr, test_set)

Matriz de Confusión

##### ENTRENAMIENTO ######
MCRE_svmr = confusionMatrix(resultados_train_svmr, train_set$Tipo) # MCRE - Matriz de Confusión de Resultados de Entrenamiento.
#MCRE_svmr

##### PRUEBA #####
MCRP_svmr = confusionMatrix(resultados_test_svmr, test_set$Tipo) # MCRE - Matriz de Confusión de Resultados de Prueba.
MCRP_svmr
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign        47         0
##   malignant     41        47
##                                           
##                Accuracy : 0.6963          
##                  95% CI : (0.6113, 0.7724)
##     No Information Rate : 0.6519          
##     P-Value [Acc > NIR] : 0.1602          
##                                           
##                   Kappa : 0.4439          
##                                           
##  Mcnemar's Test P-Value : 4.185e-10       
##                                           
##             Sensitivity : 0.5341          
##             Specificity : 1.0000          
##          Pos Pred Value : 1.0000          
##          Neg Pred Value : 0.5341          
##              Prevalence : 0.6519          
##          Detection Rate : 0.3481          
##    Detection Prevalence : 0.3481          
##       Balanced Accuracy : 0.7670          
##                                           
##        'Positive' Class : benign          
## 

SVM Polinómico

Entrenamiento de Modelo

modelo_svmp = train(Tipo ~., data = train_set,
                    method = "svmPoly",
                    preProcess = c("scale", "center"),
                    trControl = trainControl(method = "cv", number =10),
                    tuneGrid = data.frame(degree = 1, scale = 1, C= 1)
                    )
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: Bare.nuclei6
## Warning in .local(x, ...): Variable(s) `' constant. Cannot scale data.

Resultados de Modelo

resultados_train_svmp = predict(modelo_svmp, train_set)
resultados_test_svmp = predict(modelo_svmp, test_set)

Matriz de Confusión

##### ENTRENAMIENTO ######
MCRE_svmp = confusionMatrix(resultados_train_svmp, train_set$Tipo) # MCRE - Matriz de Confusión de Resultados de Entrenamiento.
#MCRE_svmp

##### PRUEBA #####
MCRP_svmp = confusionMatrix(resultados_test_svmp, test_set$Tipo) # MCRE - Matriz de Confusión de Resultados de Prueba.
MCRP_svmp
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign        83         7
##   malignant      5        40
##                                           
##                Accuracy : 0.9111          
##                  95% CI : (0.8499, 0.9532)
##     No Information Rate : 0.6519          
##     P-Value [Acc > NIR] : 2.463e-12       
##                                           
##                   Kappa : 0.8022          
##                                           
##  Mcnemar's Test P-Value : 0.7728          
##                                           
##             Sensitivity : 0.9432          
##             Specificity : 0.8511          
##          Pos Pred Value : 0.9222          
##          Neg Pred Value : 0.8889          
##              Prevalence : 0.6519          
##          Detection Rate : 0.6148          
##    Detection Prevalence : 0.6667          
##       Balanced Accuracy : 0.8971          
##                                           
##        'Positive' Class : benign          
## 

Árbol de decisión

Entrenamiento de Modelo

modelo_ad = train(Tipo ~., data = train_set,
                    method = "rpart",
                    preProcess = c("scale", "center"),
                    trControl = trainControl(method = "cv", number =10),
                    tuneLength = 10
                    )
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: Bare.nuclei6

Resultados de Modelo

resultados_train_ad = predict(modelo_ad, train_set)
resultados_test_ad = predict(modelo_ad, test_set)

Matriz de Confusión

##### ENTRENAMIENTO ######
MCRE_ad = confusionMatrix(resultados_train_ad, train_set$Tipo) # MCRE - Matriz de Confusión de Resultados de Entrenamiento.
#MCRE_ad

##### PRUEBA #####
MCRP_ad = confusionMatrix(resultados_test_ad, test_set$Tipo) # MCRE - Matriz de Confusión de Resultados de Prueba.
MCRP_ad
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign        85         5
##   malignant      3        42
##                                           
##                Accuracy : 0.9407          
##                  95% CI : (0.8866, 0.9741)
##     No Information Rate : 0.6519          
##     P-Value [Acc > NIR] : 1.347e-15       
##                                           
##                   Kappa : 0.8681          
##                                           
##  Mcnemar's Test P-Value : 0.7237          
##                                           
##             Sensitivity : 0.9659          
##             Specificity : 0.8936          
##          Pos Pred Value : 0.9444          
##          Neg Pred Value : 0.9333          
##              Prevalence : 0.6519          
##          Detection Rate : 0.6296          
##    Detection Prevalence : 0.6667          
##       Balanced Accuracy : 0.9298          
##                                           
##        'Positive' Class : benign          
## 

Redes Neuronales

Entrenamiento de Modelo

modelo_rn = train(Tipo ~., data = train_set,
                    method = "nnet",
                    preProcess = c("scale", "center"),
                    trControl = trainControl(method = "cv", number =10)
                    )
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: Bare.nuclei6
## # weights:  83
## initial  value 374.817257 
## iter  10 value 40.277258
## iter  20 value 20.528253
## iter  30 value 19.231263
## iter  40 value 19.122754
## iter  50 value 19.114539
## iter  60 value 19.114088
## final  value 19.113898 
## converged
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: Bare.nuclei6
## # weights:  247
## initial  value 324.313266 
## iter  10 value 47.023454
## iter  20 value 34.501072
## iter  30 value 30.146446
## iter  40 value 29.471500
## iter  50 value 29.362689
## iter  60 value 28.692415
## iter  70 value 28.112819
## iter  80 value 28.042757
## iter  90 value 26.571126
## iter 100 value 26.559069
## final  value 26.559069 
## stopped after 100 iterations
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: Bare.nuclei6
## # weights:  411
## initial  value 316.180536 
## iter  10 value 13.913762
## iter  20 value 4.328973
## iter  30 value 2.552363
## iter  40 value 2.272730
## iter  50 value 1.922754
## iter  60 value 1.917273
## iter  70 value 1.911679
## iter  80 value 1.910533
## iter  90 value 1.909607
## iter 100 value 1.388215
## final  value 1.388215 
## stopped after 100 iterations
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: Bare.nuclei6
## # weights:  83
## initial  value 316.912067 
## iter  10 value 86.012268
## iter  20 value 59.597247
## iter  30 value 44.365711
## iter  40 value 33.669721
## iter  50 value 31.024497
## iter  60 value 26.401233
## iter  70 value 20.191166
## iter  80 value 18.258152
## iter  90 value 18.052746
## iter 100 value 18.042104
## final  value 18.042104 
## stopped after 100 iterations
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: Bare.nuclei6
## # weights:  247
## initial  value 382.187522 
## iter  10 value 103.663294
## iter  20 value 45.264551
## iter  30 value 27.392813
## iter  40 value 15.945273
## iter  50 value 10.439110
## iter  60 value 10.147304
## iter  70 value 10.070855
## iter  80 value 10.066895
## iter  90 value 10.066742
## iter  90 value 10.066742
## iter  90 value 10.066742
## final  value 10.066742 
## converged
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: Bare.nuclei6
## # weights:  411
## initial  value 388.651583 
## iter  10 value 81.178316
## iter  20 value 38.660423
## iter  30 value 22.159086
## iter  40 value 16.224888
## iter  50 value 13.883473
## iter  60 value 12.893250
## iter  70 value 10.005248
## iter  80 value 9.662003
## iter  90 value 9.454406
## iter 100 value 9.248063
## final  value 9.248063 
## stopped after 100 iterations
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: Bare.nuclei6
## # weights:  83
## initial  value 297.409901 
## iter  10 value 42.618141
## iter  20 value 26.253328
## iter  30 value 25.877399
## iter  40 value 25.874604
## iter  50 value 25.873501
## iter  60 value 25.868274
## iter  70 value 25.594741
## iter  80 value 22.368662
## iter  90 value 21.979915
## iter 100 value 21.974606
## final  value 21.974606 
## stopped after 100 iterations
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: Bare.nuclei6
## # weights:  247
## initial  value 328.290262 
## iter  10 value 42.653126
## iter  20 value 10.093193
## iter  30 value 7.568135
## iter  40 value 6.380110
## iter  50 value 6.342135
## iter  60 value 6.324702
## iter  70 value 6.307810
## iter  80 value 6.293637
## iter  90 value 4.841368
## iter 100 value 3.185512
## final  value 3.185512 
## stopped after 100 iterations
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: Bare.nuclei6
## # weights:  411
## initial  value 321.689898 
## iter  10 value 48.178152
## iter  20 value 17.682923
## iter  30 value 4.351793
## iter  40 value 3.602683
## iter  50 value 3.472430
## iter  60 value 3.423438
## iter  70 value 3.383050
## iter  80 value 3.353754
## iter  90 value 3.323043
## iter 100 value 3.166320
## final  value 3.166320 
## stopped after 100 iterations
## # weights:  83
## initial  value 419.727174 
## iter  10 value 74.663969
## iter  20 value 48.847083
## iter  30 value 45.476746
## iter  40 value 45.475792
## iter  50 value 45.475748
## final  value 45.475721 
## converged
## # weights:  247
## initial  value 304.136827 
## iter  10 value 25.425733
## iter  20 value 16.688368
## iter  30 value 15.524231
## iter  40 value 14.921821
## iter  50 value 14.900297
## iter  60 value 14.893053
## iter  70 value 14.889777
## iter  80 value 11.899490
## iter  90 value 11.491066
## iter 100 value 11.328002
## final  value 11.328002 
## stopped after 100 iterations
## # weights:  411
## initial  value 291.136519 
## iter  10 value 22.546166
## iter  20 value 5.471588
## iter  30 value 1.532441
## iter  40 value 1.399044
## iter  50 value 1.387959
## iter  60 value 1.386394
## iter  70 value 1.386336
## iter  80 value 1.386298
## final  value 1.386295 
## converged
## # weights:  83
## initial  value 413.785797 
## iter  10 value 102.460326
## iter  20 value 59.701876
## iter  30 value 53.757802
## iter  40 value 45.054277
## iter  50 value 28.961053
## iter  60 value 25.149845
## iter  70 value 21.716915
## iter  80 value 21.448553
## iter  90 value 21.444065
## final  value 21.444012 
## converged
## # weights:  247
## initial  value 370.238660 
## iter  10 value 62.186622
## iter  20 value 29.899986
## iter  30 value 21.399408
## iter  40 value 19.422549
## iter  50 value 17.939166
## iter  60 value 15.887346
## iter  70 value 14.034416
## iter  80 value 13.021269
## iter  90 value 12.430265
## iter 100 value 12.305054
## final  value 12.305054 
## stopped after 100 iterations
## # weights:  411
## initial  value 366.834292 
## iter  10 value 36.692684
## iter  20 value 18.481860
## iter  30 value 12.762517
## iter  40 value 11.980784
## iter  50 value 10.544337
## iter  60 value 10.219762
## iter  70 value 9.887662
## iter  80 value 9.855872
## iter  90 value 9.854914
## final  value 9.854908 
## converged
## # weights:  83
## initial  value 320.843027 
## iter  10 value 61.752303
## iter  20 value 51.177507
## iter  30 value 42.996377
## iter  40 value 42.590018
## iter  50 value 39.535969
## iter  60 value 39.531943
## iter  70 value 36.359822
## iter  80 value 36.355570
## iter  90 value 36.344210
## iter 100 value 33.029190
## final  value 33.029190 
## stopped after 100 iterations
## # weights:  247
## initial  value 332.658071 
## iter  10 value 45.061867
## iter  20 value 30.592706
## iter  30 value 24.292670
## iter  40 value 22.603491
## iter  50 value 17.610480
## iter  60 value 16.318104
## iter  70 value 16.282688
## iter  80 value 15.449802
## iter  90 value 15.204580
## iter 100 value 14.975435
## final  value 14.975435 
## stopped after 100 iterations
## # weights:  411
## initial  value 337.430632 
## iter  10 value 26.479043
## iter  20 value 19.485630
## iter  30 value 13.285569
## iter  40 value 8.671851
## iter  50 value 6.111552
## iter  60 value 5.431410
## iter  70 value 5.412742
## iter  80 value 4.959811
## iter  90 value 4.947497
## iter 100 value 4.319016
## final  value 4.319016 
## stopped after 100 iterations
## # weights:  83
## initial  value 289.617667 
## iter  10 value 47.158954
## iter  20 value 33.294405
## iter  30 value 29.526587
## iter  40 value 29.518883
## iter  50 value 29.517363
## iter  60 value 25.856120
## iter  70 value 25.849244
## iter  80 value 25.848727
## iter  90 value 25.848612
## iter 100 value 25.848458
## final  value 25.848458 
## stopped after 100 iterations
## # weights:  247
## initial  value 315.908486 
## iter  10 value 35.879313
## iter  20 value 25.360795
## iter  30 value 21.617253
## iter  40 value 20.441143
## iter  50 value 20.400365
## iter  60 value 18.869402
## iter  70 value 17.846714
## iter  80 value 17.491599
## iter  90 value 17.435652
## iter 100 value 17.427602
## final  value 17.427602 
## stopped after 100 iterations
## # weights:  411
## initial  value 405.971636 
## iter  10 value 33.589273
## iter  20 value 17.184931
## iter  30 value 7.680320
## iter  40 value 7.507280
## iter  50 value 7.496789
## iter  60 value 7.494826
## iter  70 value 6.179566
## iter  80 value 6.153885
## iter  90 value 4.804459
## iter 100 value 4.771136
## final  value 4.771136 
## stopped after 100 iterations
## # weights:  83
## initial  value 380.174551 
## iter  10 value 77.127696
## iter  20 value 37.400692
## iter  30 value 32.492526
## iter  40 value 30.577549
## iter  50 value 23.055923
## iter  60 value 22.466776
## iter  70 value 22.452999
## final  value 22.452915 
## converged
## # weights:  247
## initial  value 431.310146 
## iter  10 value 68.165421
## iter  20 value 40.578145
## iter  30 value 27.327389
## iter  40 value 20.378150
## iter  50 value 13.623395
## iter  60 value 12.383523
## iter  70 value 12.208413
## iter  80 value 12.156943
## iter  90 value 12.152864
## iter 100 value 12.152542
## final  value 12.152542 
## stopped after 100 iterations
## # weights:  411
## initial  value 401.218439 
## iter  10 value 52.937074
## iter  20 value 31.105349
## iter  30 value 16.667632
## iter  40 value 11.399958
## iter  50 value 10.135009
## iter  60 value 10.020440
## iter  70 value 9.984186
## iter  80 value 9.978552
## iter  90 value 9.977362
## iter 100 value 9.976882
## final  value 9.976882 
## stopped after 100 iterations
## # weights:  83
## initial  value 317.890696 
## iter  10 value 94.045981
## iter  20 value 85.559470
## iter  30 value 82.801458
## iter  40 value 65.548982
## iter  50 value 59.999511
## iter  60 value 59.089728
## iter  70 value 48.415218
## iter  80 value 48.406938
## iter  90 value 46.569118
## iter 100 value 45.542977
## final  value 45.542977 
## stopped after 100 iterations
## # weights:  247
## initial  value 438.130620 
## iter  10 value 30.052670
## iter  20 value 15.946457
## iter  30 value 9.704185
## iter  40 value 4.630931
## iter  50 value 3.775588
## iter  60 value 3.083640
## iter  70 value 2.855997
## iter  80 value 2.850302
## iter  90 value 2.844159
## iter 100 value 2.839119
## final  value 2.839119 
## stopped after 100 iterations
## # weights:  411
## initial  value 311.704954 
## iter  10 value 24.936060
## iter  20 value 18.865109
## iter  30 value 15.233004
## iter  40 value 12.816873
## iter  50 value 11.562671
## iter  60 value 10.592253
## iter  70 value 10.506194
## iter  80 value 10.394328
## iter  90 value 10.378309
## iter 100 value 10.348374
## final  value 10.348374 
## stopped after 100 iterations
## # weights:  83
## initial  value 419.979920 
## iter  10 value 133.821113
## iter  20 value 96.552511
## iter  30 value 67.513382
## iter  40 value 42.860836
## iter  50 value 33.739828
## iter  60 value 27.284994
## iter  70 value 23.052282
## iter  80 value 23.048354
## iter  90 value 23.047837
## iter 100 value 23.047539
## final  value 23.047539 
## stopped after 100 iterations
## # weights:  247
## initial  value 361.645456 
## iter  10 value 39.759559
## iter  20 value 23.011713
## iter  30 value 20.490660
## iter  40 value 15.024995
## iter  50 value 14.032866
## iter  60 value 10.551836
## iter  70 value 10.540033
## iter  80 value 10.532935
## iter  90 value 9.324989
## iter 100 value 9.283476
## final  value 9.283476 
## stopped after 100 iterations
## # weights:  411
## initial  value 339.782310 
## iter  10 value 20.786801
## iter  20 value 9.646829
## iter  30 value 6.891382
## iter  40 value 4.804879
## iter  50 value 4.784001
## iter  60 value 4.780069
## iter  70 value 3.035339
## iter  80 value 2.871294
## iter  90 value 2.870941
## iter 100 value 2.870156
## final  value 2.870156 
## stopped after 100 iterations
## # weights:  83
## initial  value 345.726126 
## iter  10 value 105.762598
## iter  20 value 45.849455
## iter  30 value 36.332657
## iter  40 value 31.082980
## iter  50 value 23.189272
## iter  60 value 21.976391
## iter  70 value 21.930180
## iter  80 value 21.927498
## final  value 21.927477 
## converged
## # weights:  247
## initial  value 355.990955 
## iter  10 value 89.762180
## iter  20 value 57.820168
## iter  30 value 40.116497
## iter  40 value 26.732173
## iter  50 value 17.792797
## iter  60 value 12.461963
## iter  70 value 11.348088
## iter  80 value 11.118615
## iter  90 value 10.770877
## iter 100 value 10.633591
## final  value 10.633591 
## stopped after 100 iterations
## # weights:  411
## initial  value 495.278566 
## iter  10 value 71.563946
## iter  20 value 28.112043
## iter  30 value 14.038774
## iter  40 value 10.130982
## iter  50 value 9.554676
## iter  60 value 9.486053
## iter  70 value 9.457476
## iter  80 value 9.420064
## iter  90 value 9.419817
## final  value 9.419817 
## converged
## # weights:  83
## initial  value 342.487766 
## iter  10 value 257.033401
## final  value 256.758671 
## converged
## # weights:  247
## initial  value 492.098679 
## iter  10 value 40.567340
## iter  20 value 30.530807
## iter  30 value 27.810847
## iter  40 value 27.762340
## iter  50 value 26.570957
## iter  60 value 26.543180
## iter  70 value 26.510429
## iter  80 value 26.443510
## iter  90 value 26.417175
## iter 100 value 25.446776
## final  value 25.446776 
## stopped after 100 iterations
## # weights:  411
## initial  value 367.631331 
## iter  10 value 25.657541
## iter  20 value 14.225380
## iter  30 value 10.225640
## iter  40 value 7.491544
## iter  50 value 4.866641
## iter  60 value 4.513469
## iter  70 value 4.147146
## iter  80 value 4.101431
## iter  90 value 4.076008
## iter 100 value 4.039355
## final  value 4.039355 
## stopped after 100 iterations
## # weights:  83
## initial  value 354.419667 
## iter  10 value 99.689731
## iter  20 value 98.378651
## final  value 98.378414 
## converged
## # weights:  247
## initial  value 325.922554 
## iter  10 value 51.473563
## iter  20 value 48.223332
## iter  30 value 42.504973
## iter  40 value 36.021855
## iter  50 value 35.978867
## iter  60 value 35.831277
## iter  70 value 35.253514
## iter  80 value 33.962166
## iter  90 value 28.256102
## iter 100 value 15.900058
## final  value 15.900058 
## stopped after 100 iterations
## # weights:  411
## initial  value 414.781757 
## iter  10 value 76.752961
## iter  20 value 21.828070
## iter  30 value 16.649624
## iter  40 value 13.610616
## iter  50 value 11.013184
## iter  60 value 10.887896
## iter  70 value 10.867303
## iter  80 value 10.864170
## iter  90 value 10.862884
## iter 100 value 10.862073
## final  value 10.862073 
## stopped after 100 iterations
## # weights:  83
## initial  value 319.226075 
## iter  10 value 238.866241
## iter  20 value 180.105906
## iter  30 value 119.341965
## iter  40 value 72.869791
## iter  50 value 61.401800
## iter  60 value 40.444304
## iter  70 value 32.939855
## iter  80 value 25.597118
## iter  90 value 21.820267
## iter 100 value 21.307368
## final  value 21.307368 
## stopped after 100 iterations
## # weights:  247
## initial  value 513.625249 
## iter  10 value 100.632572
## iter  20 value 55.916632
## iter  30 value 27.289044
## iter  40 value 19.706344
## iter  50 value 13.447144
## iter  60 value 12.344060
## iter  70 value 11.514262
## iter  80 value 11.154356
## iter  90 value 10.882485
## iter 100 value 10.558397
## final  value 10.558397 
## stopped after 100 iterations
## # weights:  411
## initial  value 351.009442 
## iter  10 value 47.911452
## iter  20 value 23.444193
## iter  30 value 14.685997
## iter  40 value 12.963928
## iter  50 value 11.724508
## iter  60 value 10.937526
## iter  70 value 10.577180
## iter  80 value 10.260275
## iter  90 value 10.179908
## iter 100 value 10.169759
## final  value 10.169759 
## stopped after 100 iterations
## # weights:  83
## initial  value 421.364077 
## iter  10 value 94.620012
## iter  20 value 54.857573
## iter  30 value 33.171241
## iter  40 value 33.118527
## iter  50 value 26.442386
## iter  60 value 26.411388
## iter  70 value 26.389198
## iter  80 value 22.894266
## iter  90 value 22.883768
## iter 100 value 22.868176
## final  value 22.868176 
## stopped after 100 iterations
## # weights:  247
## initial  value 286.203235 
## iter  10 value 26.882168
## iter  20 value 15.906937
## iter  30 value 15.272851
## iter  40 value 15.260041
## iter  50 value 15.252532
## iter  60 value 15.242600
## iter  70 value 15.079319
## iter  80 value 11.843697
## iter  90 value 0.698799
## iter 100 value 0.295308
## final  value 0.295308 
## stopped after 100 iterations
## # weights:  411
## initial  value 311.773452 
## iter  10 value 23.101437
## iter  20 value 6.975892
## iter  30 value 4.682807
## iter  40 value 4.191780
## iter  50 value 3.916041
## iter  60 value 3.524213
## iter  70 value 3.427861
## iter  80 value 3.357885
## iter  90 value 3.275867
## iter 100 value 3.142307
## final  value 3.142307 
## stopped after 100 iterations
## # weights:  83
## initial  value 322.435701 
## iter  10 value 26.729383
## iter  20 value 26.307331
## iter  30 value 26.285491
## iter  40 value 26.274633
## iter  50 value 26.273534
## iter  60 value 24.380001
## iter  70 value 22.802557
## iter  80 value 22.791102
## iter  90 value 19.119952
## iter 100 value 19.114531
## final  value 19.114531 
## stopped after 100 iterations
## # weights:  247
## initial  value 455.309017 
## iter  10 value 28.751759
## iter  20 value 21.876872
## iter  30 value 20.643283
## iter  40 value 19.872594
## iter  50 value 19.867350
## iter  60 value 15.058984
## iter  70 value 15.032997
## iter  80 value 15.025806
## iter  90 value 15.021036
## iter 100 value 15.009302
## final  value 15.009302 
## stopped after 100 iterations
## # weights:  411
## initial  value 331.969586 
## iter  10 value 38.836084
## iter  20 value 20.650971
## iter  30 value 18.913820
## iter  40 value 18.298981
## iter  50 value 9.695484
## iter  60 value 9.309546
## iter  70 value 9.296272
## iter  80 value 9.272530
## iter  90 value 8.923560
## iter 100 value 8.701402
## final  value 8.701402 
## stopped after 100 iterations
## # weights:  83
## initial  value 388.344855 
## iter  10 value 113.740894
## iter  20 value 61.705607
## iter  30 value 45.449012
## iter  40 value 32.075506
## iter  50 value 24.838923
## iter  60 value 24.390120
## iter  70 value 21.426762
## iter  80 value 20.903621
## iter  90 value 20.877099
## iter 100 value 20.876572
## final  value 20.876572 
## stopped after 100 iterations
## # weights:  247
## initial  value 394.091643 
## iter  10 value 80.590034
## iter  20 value 48.460155
## iter  30 value 27.518941
## iter  40 value 16.462677
## iter  50 value 11.273452
## iter  60 value 10.400797
## iter  70 value 10.305115
## iter  80 value 10.303060
## final  value 10.303039 
## converged
## # weights:  411
## initial  value 351.749855 
## iter  10 value 55.697025
## iter  20 value 22.350030
## iter  30 value 12.896713
## iter  40 value 10.176409
## iter  50 value 9.126635
## iter  60 value 8.718207
## iter  70 value 8.545336
## iter  80 value 8.502993
## iter  90 value 8.502663
## final  value 8.502662 
## converged
## # weights:  83
## initial  value 336.414617 
## iter  10 value 33.263736
## iter  20 value 22.848567
## iter  30 value 22.839049
## iter  40 value 22.838354
## iter  50 value 22.837767
## iter  60 value 22.837027
## iter  70 value 22.836404
## iter  80 value 22.835758
## iter  90 value 22.835447
## iter 100 value 22.835019
## final  value 22.835019 
## stopped after 100 iterations
## # weights:  247
## initial  value 377.485777 
## iter  10 value 34.310207
## iter  20 value 30.598283
## iter  30 value 30.545189
## iter  40 value 29.146090
## iter  50 value 29.123387
## iter  60 value 29.044300
## iter  70 value 28.923384
## iter  80 value 28.884158
## iter  90 value 28.844118
## iter 100 value 27.704976
## final  value 27.704976 
## stopped after 100 iterations
## # weights:  411
## initial  value 411.709452 
## iter  10 value 26.045387
## iter  20 value 14.185456
## iter  30 value 12.073522
## iter  40 value 8.012715
## iter  50 value 7.490718
## iter  60 value 7.161884
## iter  70 value 6.967063
## iter  80 value 6.953860
## iter  90 value 3.365022
## iter 100 value 3.131535
## final  value 3.131535 
## stopped after 100 iterations
## # weights:  83
## initial  value 326.762731 
## iter  10 value 52.822433
## iter  20 value 44.532594
## iter  30 value 36.432835
## iter  40 value 29.650558
## iter  50 value 29.591894
## iter  60 value 29.591514
## final  value 29.591456 
## converged
## # weights:  247
## initial  value 305.385896 
## iter  10 value 32.491765
## iter  20 value 28.687909
## iter  30 value 25.123022
## iter  40 value 21.582183
## iter  50 value 21.176793
## iter  60 value 21.169624
## iter  70 value 21.161173
## iter  80 value 20.455655
## iter  90 value 20.352051
## iter 100 value 19.714648
## final  value 19.714648 
## stopped after 100 iterations
## # weights:  411
## initial  value 314.904128 
## iter  10 value 11.495235
## iter  20 value 0.165978
## iter  30 value 0.010403
## iter  40 value 0.001818
## iter  50 value 0.000502
## iter  60 value 0.000159
## final  value 0.000094 
## converged
## # weights:  83
## initial  value 321.992454 
## iter  10 value 47.875165
## iter  20 value 39.178441
## iter  30 value 33.470784
## iter  40 value 26.510248
## iter  50 value 22.283769
## iter  60 value 22.153735
## iter  70 value 22.151905
## final  value 22.151901 
## converged
## # weights:  247
## initial  value 403.045283 
## iter  10 value 88.647068
## iter  20 value 43.340460
## iter  30 value 15.546890
## iter  40 value 11.606355
## iter  50 value 10.847702
## iter  60 value 10.655124
## iter  70 value 10.543752
## iter  80 value 10.452011
## iter  90 value 10.443473
## iter 100 value 10.443054
## final  value 10.443054 
## stopped after 100 iterations
## # weights:  411
## initial  value 357.724047 
## iter  10 value 78.113176
## iter  20 value 34.107580
## iter  30 value 15.284666
## iter  40 value 10.892756
## iter  50 value 9.772909
## iter  60 value 9.414567
## iter  70 value 9.261929
## iter  80 value 9.154964
## iter  90 value 9.142335
## iter 100 value 9.124472
## final  value 9.124472 
## stopped after 100 iterations
## # weights:  83
## initial  value 401.208768 
## iter  10 value 87.761132
## iter  20 value 64.594346
## iter  30 value 43.382110
## iter  40 value 36.810775
## iter  50 value 36.678376
## iter  60 value 36.674536
## iter  70 value 36.671595
## iter  80 value 36.667541
## iter  90 value 27.347022
## iter 100 value 27.324806
## final  value 27.324806 
## stopped after 100 iterations
## # weights:  247
## initial  value 324.932125 
## iter  10 value 44.817970
## iter  20 value 39.182862
## iter  30 value 37.213365
## iter  40 value 33.121727
## iter  50 value 31.632994
## iter  60 value 30.945094
## iter  70 value 28.346355
## iter  80 value 27.856603
## iter  90 value 25.945977
## iter 100 value 25.521140
## final  value 25.521140 
## stopped after 100 iterations
## # weights:  411
## initial  value 324.920496 
## iter  10 value 13.573040
## iter  20 value 9.420639
## iter  30 value 7.798172
## iter  40 value 4.015519
## iter  50 value 3.974850
## iter  60 value 3.960192
## iter  70 value 3.950770
## iter  80 value 3.930923
## iter  90 value 2.071583
## iter 100 value 2.048065
## final  value 2.048065 
## stopped after 100 iterations
## # weights:  83
## initial  value 383.945027 
## iter  10 value 61.262747
## iter  20 value 43.405468
## iter  30 value 36.312286
## iter  40 value 36.302712
## final  value 36.302676 
## converged
## # weights:  247
## initial  value 344.609826 
## iter  10 value 34.818943
## iter  20 value 10.884745
## iter  30 value 10.073753
## iter  40 value 10.005973
## iter  50 value 9.993395
## iter  60 value 9.987045
## iter  70 value 9.985209
## iter  80 value 9.980488
## iter  90 value 9.975887
## iter 100 value 9.973602
## final  value 9.973602 
## stopped after 100 iterations
## # weights:  411
## initial  value 345.481847 
## iter  10 value 40.339016
## iter  20 value 16.790916
## iter  30 value 16.048132
## iter  40 value 13.756416
## iter  50 value 13.722467
## iter  60 value 11.382532
## iter  70 value 11.284387
## iter  80 value 9.477437
## iter  90 value 6.922980
## iter 100 value 6.088043
## final  value 6.088043 
## stopped after 100 iterations
## # weights:  83
## initial  value 350.487178 
## iter  10 value 203.529124
## iter  20 value 123.523212
## iter  30 value 91.670398
## iter  40 value 70.725364
## iter  50 value 49.348123
## iter  60 value 38.426478
## iter  70 value 29.125238
## iter  80 value 21.949885
## iter  90 value 21.110607
## iter 100 value 21.068592
## final  value 21.068592 
## stopped after 100 iterations
## # weights:  247
## initial  value 351.445527 
## iter  10 value 41.584238
## iter  20 value 23.275974
## iter  30 value 16.972688
## iter  40 value 13.692530
## iter  50 value 11.761739
## iter  60 value 11.707056
## iter  70 value 11.705014
## iter  80 value 11.704961
## iter  80 value 11.704961
## iter  80 value 11.704961
## final  value 11.704961 
## converged
## # weights:  411
## initial  value 272.614067 
## iter  10 value 35.432430
## iter  20 value 14.561876
## iter  30 value 10.338165
## iter  40 value 9.311010
## iter  50 value 9.086595
## iter  60 value 9.052270
## iter  70 value 8.965391
## iter  80 value 8.886916
## iter  90 value 8.885054
## final  value 8.885048 
## converged
## # weights:  83
## initial  value 335.319859 
## iter  10 value 61.538804
## iter  20 value 36.382295
## iter  30 value 33.067065
## iter  40 value 33.060621
## iter  50 value 33.044561
## iter  60 value 33.036712
## iter  70 value 33.031922
## iter  80 value 33.021951
## iter  90 value 29.504528
## iter 100 value 25.879731
## final  value 25.879731 
## stopped after 100 iterations
## # weights:  247
## initial  value 370.920549 
## iter  10 value 26.062046
## iter  20 value 12.660154
## iter  30 value 8.415600
## iter  40 value 3.598680
## iter  50 value 1.666163
## iter  60 value 0.322298
## iter  70 value 0.229196
## iter  80 value 0.202559
## iter  90 value 0.190282
## iter 100 value 0.151807
## final  value 0.151807 
## stopped after 100 iterations
## # weights:  411
## initial  value 390.652397 
## iter  10 value 32.659016
## iter  20 value 19.924161
## iter  30 value 17.093988
## iter  40 value 16.078461
## iter  50 value 15.919828
## iter  60 value 14.743639
## iter  70 value 13.044147
## iter  80 value 10.404507
## iter  90 value 9.491522
## iter 100 value 8.992430
## final  value 8.992430 
## stopped after 100 iterations
## # weights:  83
## initial  value 323.866630 
## iter  10 value 242.796418
## iter  20 value 124.387128
## iter  30 value 91.543780
## iter  40 value 88.944513
## iter  50 value 88.831959
## iter  60 value 86.071753
## iter  70 value 86.070540
## iter  80 value 79.258909
## iter  90 value 68.227206
## iter 100 value 68.174449
## final  value 68.174449 
## stopped after 100 iterations
## # weights:  247
## initial  value 418.060266 
## iter  10 value 74.585597
## iter  20 value 24.498702
## iter  30 value 13.751412
## iter  40 value 3.789564
## iter  50 value 3.295703
## iter  60 value 3.157229
## iter  70 value 3.028643
## iter  80 value 3.023181
## iter  90 value 2.880953
## iter 100 value 2.876094
## final  value 2.876094 
## stopped after 100 iterations
## # weights:  411
## initial  value 359.407168 
## iter  10 value 28.817143
## iter  20 value 8.530030
## iter  30 value 6.358955
## iter  40 value 6.224511
## iter  50 value 6.204338
## iter  60 value 5.367965
## iter  70 value 4.785920
## iter  80 value 4.784189
## iter  90 value 4.782508
## iter 100 value 4.780933
## final  value 4.780933 
## stopped after 100 iterations
## # weights:  83
## initial  value 361.801130 
## iter  10 value 100.846163
## iter  20 value 68.653934
## iter  30 value 61.108285
## iter  40 value 54.144293
## iter  50 value 41.093110
## iter  60 value 36.260323
## iter  70 value 24.742730
## iter  80 value 22.235793
## iter  90 value 21.727434
## iter 100 value 21.650537
## final  value 21.650537 
## stopped after 100 iterations
## # weights:  247
## initial  value 337.774398 
## iter  10 value 89.614733
## iter  20 value 38.129368
## iter  30 value 20.926360
## iter  40 value 12.290090
## iter  50 value 11.397214
## iter  60 value 11.312696
## iter  70 value 11.307336
## iter  80 value 11.307243
## final  value 11.307241 
## converged
## # weights:  411
## initial  value 377.705633 
## iter  10 value 48.045188
## iter  20 value 26.397242
## iter  30 value 17.421726
## iter  40 value 12.201767
## iter  50 value 10.836739
## iter  60 value 10.200622
## iter  70 value 9.976117
## iter  80 value 9.825591
## iter  90 value 9.770976
## iter 100 value 9.762707
## final  value 9.762707 
## stopped after 100 iterations
## # weights:  83
## initial  value 342.991901 
## iter  10 value 75.526534
## iter  20 value 50.987318
## iter  30 value 46.474219
## iter  40 value 41.670675
## iter  50 value 38.423145
## iter  60 value 38.365522
## iter  70 value 38.361420
## iter  80 value 38.354202
## iter  90 value 38.347343
## iter 100 value 38.345319
## final  value 38.345319 
## stopped after 100 iterations
## # weights:  247
## initial  value 327.856380 
## iter  10 value 30.367253
## iter  20 value 25.592918
## iter  30 value 21.097637
## iter  40 value 20.046114
## iter  50 value 19.816784
## iter  60 value 15.068676
## iter  70 value 9.665097
## iter  80 value 9.183462
## iter  90 value 9.128038
## iter 100 value 8.927188
## final  value 8.927188 
## stopped after 100 iterations
## # weights:  411
## initial  value 351.123164 
## iter  10 value 25.977736
## iter  20 value 5.907212
## iter  30 value 2.630313
## iter  40 value 1.706659
## iter  50 value 0.394846
## iter  60 value 0.169993
## iter  70 value 0.141506
## iter  80 value 0.138905
## iter  90 value 0.134151
## iter 100 value 0.125704
## final  value 0.125704 
## stopped after 100 iterations
## # weights:  83
## initial  value 318.880157 
## iter  10 value 58.563511
## iter  20 value 47.196235
## iter  30 value 36.366908
## iter  40 value 36.306540
## iter  50 value 36.300610
## iter  60 value 36.136242
## iter  70 value 29.520299
## iter  80 value 29.517525
## iter  90 value 29.517040
## iter 100 value 29.516549
## final  value 29.516549 
## stopped after 100 iterations
## # weights:  247
## initial  value 357.483818 
## iter  10 value 89.915099
## iter  20 value 85.061469
## final  value 85.061422 
## converged
## # weights:  411
## initial  value 333.629296 
## iter  10 value 19.025901
## iter  20 value 12.964212
## iter  30 value 11.297203
## iter  40 value 9.954257
## iter  50 value 9.037558
## iter  60 value 8.973998
## iter  70 value 8.972601
## iter  80 value 8.324737
## iter  90 value 8.319041
## final  value 8.317626 
## converged
## # weights:  83
## initial  value 392.915483 
## iter  10 value 89.701773
## iter  20 value 68.413540
## iter  30 value 46.177130
## iter  40 value 35.438784
## iter  50 value 32.406963
## iter  60 value 26.340024
## iter  70 value 22.632118
## iter  80 value 21.689153
## iter  90 value 21.589338
## iter 100 value 21.580986
## final  value 21.580986 
## stopped after 100 iterations
## # weights:  247
## initial  value 325.335884 
## iter  10 value 69.473127
## iter  20 value 33.660683
## iter  30 value 21.240532
## iter  40 value 14.872928
## iter  50 value 13.797031
## iter  60 value 13.161008
## iter  70 value 12.528829
## iter  80 value 12.428804
## iter  90 value 12.401363
## iter 100 value 12.392418
## final  value 12.392418 
## stopped after 100 iterations
## # weights:  411
## initial  value 353.835320 
## iter  10 value 122.696207
## iter  20 value 89.558816
## iter  30 value 55.887725
## iter  40 value 28.341546
## iter  50 value 15.308638
## iter  60 value 12.562383
## iter  70 value 11.791538
## iter  80 value 11.512743
## iter  90 value 11.376500
## iter 100 value 11.190836
## final  value 11.190836 
## stopped after 100 iterations
## # weights:  83
## initial  value 328.453160 
## iter  10 value 74.848758
## iter  20 value 43.862520
## iter  30 value 33.091587
## iter  40 value 32.846212
## iter  50 value 32.842331
## iter  60 value 32.835865
## iter  70 value 32.827368
## iter  80 value 30.169689
## iter  90 value 29.647091
## iter 100 value 29.644096
## final  value 29.644096 
## stopped after 100 iterations
## # weights:  247
## initial  value 483.674462 
## iter  10 value 33.793108
## iter  20 value 19.208429
## iter  30 value 11.854500
## iter  40 value 9.717876
## iter  50 value 7.877034
## iter  60 value 7.704249
## iter  70 value 7.046863
## iter  80 value 7.034829
## iter  90 value 6.281851
## iter 100 value 5.585036
## final  value 5.585036 
## stopped after 100 iterations
## # weights:  411
## initial  value 337.598349 
## iter  10 value 47.603911
## iter  20 value 23.924252
## iter  30 value 19.537631
## iter  40 value 17.288119
## iter  50 value 15.515339
## iter  60 value 10.101210
## iter  70 value 4.198891
## iter  80 value 3.069069
## iter  90 value 2.690411
## iter 100 value 2.632615
## final  value 2.632615 
## stopped after 100 iterations
## # weights:  83
## initial  value 440.007313 
## iter  10 value 51.768164
## iter  20 value 47.345902
## iter  30 value 46.438616
## iter  40 value 40.472296
## iter  50 value 40.404240
## iter  60 value 40.399679
## iter  70 value 37.128505
## iter  80 value 37.127939
## iter  90 value 37.127831
## iter  90 value 37.127831
## iter  90 value 37.127831
## final  value 37.127831 
## converged

Resultados de Modelo

resultados_train_rn = predict(modelo_rn, train_set)
resultados_test_rn = predict(modelo_rn, test_set)

Matriz de Confusión

##### ENTRENAMIENTO ######
MCRE_rn = confusionMatrix(resultados_train_rn, train_set$Tipo) # MCRE - Matriz de Confusión de Resultados de Entrenamiento.
#MCRE_rn

##### PRUEBA #####
MCRP_rn = confusionMatrix(resultados_test_rn, test_set$Tipo) # MCRE - Matriz de Confusión de Resultados de Prueba.
MCRP_rn
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign        84         3
##   malignant      4        44
##                                           
##                Accuracy : 0.9481          
##                  95% CI : (0.8961, 0.9789)
##     No Information Rate : 0.6519          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.8863          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9545          
##             Specificity : 0.9362          
##          Pos Pred Value : 0.9655          
##          Neg Pred Value : 0.9167          
##              Prevalence : 0.6519          
##          Detection Rate : 0.6222          
##    Detection Prevalence : 0.6444          
##       Balanced Accuracy : 0.9454          
##                                           
##        'Positive' Class : benign          
## 

Random Forests

Entrenamiento de Modelo

modelo_rf = train(Tipo ~., data = train_set,
                    method = "rf",
                    preProcess = c("scale", "center"),
                    trControl = trainControl(method = "cv", number =10),
                    tuneGrid = expand.grid(mtry =c(2,4,6))
                    )
## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: Bare.nuclei6

## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: Bare.nuclei6

## Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut =
## 10, : These variables have zero variances: Bare.nuclei6

Resultados de Modelo

resultados_train_rf = predict(modelo_rf, train_set)
resultados_test_rf = predict(modelo_rf, test_set)

Matriz de Confusión

##### ENTRENAMIENTO ######
MCRE_rf = confusionMatrix(resultados_train_rf, train_set$Tipo) # MCRE - Matriz de Confusión de Resultados de Entrenamiento.
#MCRE_rf

##### PRUEBA #####
MCRP_rf = confusionMatrix(resultados_test_rf, test_set$Tipo) # MCRE - Matriz de Confusión de Resultados de Prueba.
MCRP_rf
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign        85         3
##   malignant      3        44
##                                           
##                Accuracy : 0.9556          
##                  95% CI : (0.9058, 0.9835)
##     No Information Rate : 0.6519          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9021          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9659          
##             Specificity : 0.9362          
##          Pos Pred Value : 0.9659          
##          Neg Pred Value : 0.9362          
##              Prevalence : 0.6519          
##          Detection Rate : 0.6296          
##    Detection Prevalence : 0.6519          
##       Balanced Accuracy : 0.9510          
##                                           
##        'Positive' Class : benign          
## 

Comparativa entre Modelos

## Creación de tabla comparativa
# MODELOS
Metodo<-c('SVM Linear','SVM Radial', 'SVM Poly', 'Árboles de decisión', 'Redes Neuronales', 'Random Forest')
#ACC TRAIN
ACC_Train<-c(MCRE_svml$overall["Accuracy"], MCRE_svmr$overall["Accuracy"], MCRE_svmp$overall["Accuracy"], MCRE_ad$overall["Accuracy"],MCRE_rn$overall["Accuracy"],MCRE_rf$overall["Accuracy"])
#ACC TEST
ACC_Test<-c(MCRP_svml$overall["Accuracy"], MCRP_svmr$overall["Accuracy"], MCRP_svmp$overall["Accuracy"], MCRP_ad$overall["Accuracy"],MCRP_rn$overall["Accuracy"],MCRP_rf$overall["Accuracy"])
#SENS
Sensitivity<-c(MCRP_svml$byClass["Sensitivity"], MCRP_svmr$byClass["Sensitivity"], MCRP_svmp$byClass["Sensitivity"], MCRP_ad$byClass["Sensitivity"], MCRP_rn$byClass["Sensitivity"], MCRP_rf$byClass["Sensitivity"])
#SPEC
Specificity<-c(MCRP_svml$byClass["Specificity"], MCRP_svmr$byClass["Specificity"], MCRP_svmp$byClass["Specificity"], MCRP_ad$byClass["Specificity"], MCRP_rn$byClass["Specificity"], MCRP_rf$byClass["Specificity"])
# Creación del dataframe
RMSE_df<-data.frame(Metodo,ACC_Train, ACC_Test,Sensitivity, Specificity)
# Ordenar el dataframe
RMSE_df<-RMSE_df[order(-ACC_Test),]
# Imprimir el dataframe
RMSE_df %>%
  kbl() %>%
  kable_styling()
Metodo ACC_Train ACC_Test Sensitivity Specificity
6 Random Forest 0.9963504 0.9555556 0.9659091 0.9361702
5 Redes Neuronales 0.9854015 0.9481481 0.9545455 0.9361702
4 Árboles de decisión 0.9580292 0.9407407 0.9659091 0.8936170
1 SVM Linear 1.0000000 0.9111111 0.9431818 0.8510638
3 SVM Poly 1.0000000 0.9111111 0.9431818 0.8510638
2 SVM Radial 1.0000000 0.6962963 0.5340909 1.0000000