Instalar paquetes y llamar librerías

# install.packages("ggplot2") # Gráficas
library(ggplot2)
# install.packages("lattice") # Crear gráficos
library(lattice)
# install.packages("caret") # Algoritmos de aprendizaje automático
library(caret)
# install.packages("DataExplorer") # Análisis Exploratorio
library(DataExplorer)

Crear la base de datos

df <- read.csv("C:\\Users\\Emili\\OneDrive\\Desktop\\TEC\\Tec 6to Semestre Concentracion\\Modulo 2\\Archivos CSV\\M1_data.csv")

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

cols_cat <- intersect(
  c("gender","age_group","income_group","status","domain","user_pcmac"),
  names(df)
)
df[cols_cat] <- lapply(df[cols_cat], as.factor)

Entender la base de datos

summary(df)
##  trust_apple        interest_computers  age_computer   user_pcmac
##  Length:133         Min.   :2.000      Min.   :0.000   Apple:86  
##  Class :character   1st Qu.:3.000      1st Qu.:1.000   Hp   : 1  
##  Mode  :character   Median :4.000      Median :3.000   Other: 1  
##                     Mean   :3.812      Mean   :2.827   PC   :45  
##                     3rd Qu.:5.000      3rd Qu.:5.000             
##                     Max.   :5.000      Max.   :9.000             
##                                                                  
##  appleproducts_count familiarity_m1     f_batterylife      f_price     
##  Min.   :0.000       Length:133         Min.   :1.000   Min.   :1.000  
##  1st Qu.:1.000       Class :character   1st Qu.:4.000   1st Qu.:3.000  
##  Median :3.000       Mode  :character   Median :5.000   Median :4.000  
##  Mean   :2.609                          Mean   :4.526   Mean   :3.872  
##  3rd Qu.:4.000                          3rd Qu.:5.000   3rd Qu.:5.000  
##  Max.   :8.000                          Max.   :5.000   Max.   :5.000  
##                                                                        
##      f_size      f_multitasking    f_noise      f_performance      f_neural    
##  Min.   :1.000   Min.   :2.00   Min.   :1.000   Min.   :2.000   Min.   :1.000  
##  1st Qu.:2.000   1st Qu.:4.00   1st Qu.:3.000   1st Qu.:4.000   1st Qu.:2.000  
##  Median :3.000   Median :4.00   Median :4.000   Median :5.000   Median :3.000  
##  Mean   :3.158   Mean   :4.12   Mean   :3.729   Mean   :4.398   Mean   :3.165  
##  3rd Qu.:4.000   3rd Qu.:5.00   3rd Qu.:5.000   3rd Qu.:5.000   3rd Qu.:4.000  
##  Max.   :5.000   Max.   :5.00   Max.   :5.000   Max.   :5.000   Max.   :5.000  
##                                                                                
##    f_synergy     f_performanceloss m1_consideration m1_purchase    gender  
##  Min.   :1.000   Min.   :1.000     Min.   :1.000    No :45      Female:61  
##  1st Qu.:3.000   1st Qu.:3.000     1st Qu.:3.000    Yes:88      Male  :72  
##  Median :4.000   Median :4.000     Median :4.000                           
##  Mean   :3.466   Mean   :3.376     Mean   :3.609                           
##  3rd Qu.:4.000   3rd Qu.:4.000     3rd Qu.:5.000                           
##  Max.   :5.000   Max.   :5.000     Max.   :5.000                           
##                                                                            
##    age_group  income_group                  status               domain  
##  2      :77   1:34         Employed            :41   IT & Technology:33  
##  3      :29   2:43         Retired             : 1   Marketing      :21  
##  5      : 7   3:18         Self-Employed       : 5   Business       :14  
##  8      : 6   4: 9         Student             :84   Engineering    : 7  
##  1      : 4   5: 5         Student ant employed: 1   Finance        : 7  
##  4      : 4   6: 8         Unemployed          : 1   Science        : 7  
##  (Other): 6   7:16                                   (Other)        :44
str(df)
## 'data.frame':    133 obs. of  22 variables:
##  $ trust_apple        : chr  "No" "Yes" "Yes" "Yes" ...
##  $ interest_computers : int  4 2 5 2 4 3 3 3 4 5 ...
##  $ age_computer       : int  8 4 6 6 4 1 2 0 2 0 ...
##  $ user_pcmac         : Factor w/ 4 levels "Apple","Hp","Other",..: 4 4 4 1 1 1 1 4 1 1 ...
##  $ appleproducts_count: int  0 1 0 4 7 2 7 0 6 7 ...
##  $ familiarity_m1     : chr  "No" "No" "No" "No" ...
##  $ f_batterylife      : int  5 5 3 4 5 5 4 5 4 5 ...
##  $ f_price            : int  4 5 4 3 3 5 3 5 4 3 ...
##  $ f_size             : int  3 5 2 3 3 4 4 4 3 5 ...
##  $ f_multitasking     : int  4 3 4 4 4 4 5 4 4 5 ...
##  $ f_noise            : int  4 4 1 4 4 5 5 3 4 5 ...
##  $ f_performance      : int  2 5 4 4 5 5 5 3 4 5 ...
##  $ f_neural           : int  2 2 2 4 3 5 3 2 3 3 ...
##  $ f_synergy          : int  1 2 2 4 4 4 3 2 3 5 ...
##  $ f_performanceloss  : int  1 4 2 3 4 2 2 3 4 5 ...
##  $ m1_consideration   : int  1 2 4 2 4 2 3 1 5 5 ...
##  $ m1_purchase        : Factor w/ 2 levels "No","Yes": 2 1 2 1 2 1 2 1 2 2 ...
##  $ gender             : Factor w/ 2 levels "Female","Male": 2 2 2 1 2 1 2 2 2 2 ...
##  $ age_group          : Factor w/ 9 levels "1","2","3","4",..: 2 2 2 2 5 2 6 2 7 4 ...
##  $ income_group       : Factor w/ 7 levels "1","2","3","4",..: 2 3 2 2 7 2 7 2 7 6 ...
##  $ status             : Factor w/ 6 levels "Employed","Retired",..: 4 1 4 4 1 4 1 4 1 1 ...
##  $ domain             : Factor w/ 22 levels "Administration & Public Services",..: 21 10 13 3 12 17 13 22 13 12 ...
# create_report(df)
plot_missing(df)
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## ℹ The deprecated feature was likely used in the DataExplorer package.
##   Please report the issue at
##   <https://github.com/boxuancui/DataExplorer/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

df_num <- df[sapply(df, is.numeric)]
plot_histogram(df_num)

plot_correlation(df_num)

Preparar datos (dummies)

# Se requieren predictores numéricos.
# Convertimos factores a dummies con caret.
dmy <- dummyVars(m1_purchase ~ ., data = df, fullRank = TRUE)
X <- predict(dmy, newdata = df)

df_modelo <- data.frame(m1_purchase = df$m1_purchase, X)

Partir la base de datos

# Normalmente 80-20
set.seed(123)
renglones_entrenamiento <- createDataPartition(df_modelo$m1_purchase, p = 0.8, list = FALSE)

entrenamiento <- df_modelo[renglones_entrenamiento, ]
prueba        <- df_modelo[-renglones_entrenamiento, ]

Modelo 1. SVM Lineal

modelo1 <- train(m1_purchase ~ ., data=entrenamiento,
method = "svmLinear", #Cambiar
preProcess = c("scale", "center"),
trControl = trainControl(method="cv", number=10),
tuneGrid = data.frame(C=1) #Cambiar
)
resultado_entrenamiento1 <- predict(modelo1, entrenamiento)
resultado_prueba1 <- predict(modelo1, prueba)

# Matriz de Confusión

# Matriz de Confusión del Resultado del Entrenamiento
mcre1 <- confusionMatrix(resultado_entrenamiento1, entrenamiento$m1_purchase)
mcre1
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No  31   1
##        Yes  5  70
##                                           
##                Accuracy : 0.9439          
##                  95% CI : (0.8819, 0.9791)
##     No Information Rate : 0.6636          
##     P-Value [Acc > NIR] : 3.021e-12       
##                                           
##                   Kappa : 0.8709          
##                                           
##  Mcnemar's Test P-Value : 0.2207          
##                                           
##             Sensitivity : 0.8611          
##             Specificity : 0.9859          
##          Pos Pred Value : 0.9688          
##          Neg Pred Value : 0.9333          
##              Prevalence : 0.3364          
##          Detection Rate : 0.2897          
##    Detection Prevalence : 0.2991          
##       Balanced Accuracy : 0.9235          
##                                           
##        'Positive' Class : No              
## 
# Matriz de Confusión del Resultado de la Prueba
mcrp1 <- confusionMatrix(resultado_prueba1, prueba$m1_purchase)
mcrp1
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No   3   6
##        Yes  6  11
##                                           
##                Accuracy : 0.5385          
##                  95% CI : (0.3337, 0.7341)
##     No Information Rate : 0.6538          
##     P-Value [Acc > NIR] : 0.9231          
##                                           
##                   Kappa : -0.0196         
##                                           
##  Mcnemar's Test P-Value : 1.0000          
##                                           
##             Sensitivity : 0.3333          
##             Specificity : 0.6471          
##          Pos Pred Value : 0.3333          
##          Neg Pred Value : 0.6471          
##              Prevalence : 0.3462          
##          Detection Rate : 0.1154          
##    Detection Prevalence : 0.3462          
##       Balanced Accuracy : 0.4902          
##                                           
##        'Positive' Class : No              
## 

Modelo 2. SVM Radial

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

# Matriz de Confusión del Resultado del Entrenamiento
mcre2 <- confusionMatrix(resultado_entrenamiento2, entrenamiento$m1_purchase)
mcre2
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No  34   0
##        Yes  2  71
##                                           
##                Accuracy : 0.9813          
##                  95% CI : (0.9341, 0.9977)
##     No Information Rate : 0.6636          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9576          
##                                           
##  Mcnemar's Test P-Value : 0.4795          
##                                           
##             Sensitivity : 0.9444          
##             Specificity : 1.0000          
##          Pos Pred Value : 1.0000          
##          Neg Pred Value : 0.9726          
##              Prevalence : 0.3364          
##          Detection Rate : 0.3178          
##    Detection Prevalence : 0.3178          
##       Balanced Accuracy : 0.9722          
##                                           
##        'Positive' Class : No              
## 
# Matriz de Confusión del Resultado de la Prueba
mcrp2 <- confusionMatrix(resultado_prueba2, prueba$m1_purchase)
mcrp2
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No   0   0
##        Yes  9  17
##                                           
##                Accuracy : 0.6538          
##                  95% CI : (0.4433, 0.8279)
##     No Information Rate : 0.6538          
##     P-Value [Acc > NIR] : 0.589398        
##                                           
##                   Kappa : 0               
##                                           
##  Mcnemar's Test P-Value : 0.007661        
##                                           
##             Sensitivity : 0.0000          
##             Specificity : 1.0000          
##          Pos Pred Value :    NaN          
##          Neg Pred Value : 0.6538          
##              Prevalence : 0.3462          
##          Detection Rate : 0.0000          
##    Detection Prevalence : 0.0000          
##       Balanced Accuracy : 0.5000          
##                                           
##        'Positive' Class : No              
## 

Modelo 3. SVM Polinómico

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

# Matriz de Confusión del Resultado del Entrenamiento
mcre3 <- confusionMatrix(resultado_entrenamiento3, entrenamiento$m1_purchase)
mcre3
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No  31   1
##        Yes  5  70
##                                           
##                Accuracy : 0.9439          
##                  95% CI : (0.8819, 0.9791)
##     No Information Rate : 0.6636          
##     P-Value [Acc > NIR] : 3.021e-12       
##                                           
##                   Kappa : 0.8709          
##                                           
##  Mcnemar's Test P-Value : 0.2207          
##                                           
##             Sensitivity : 0.8611          
##             Specificity : 0.9859          
##          Pos Pred Value : 0.9688          
##          Neg Pred Value : 0.9333          
##              Prevalence : 0.3364          
##          Detection Rate : 0.2897          
##    Detection Prevalence : 0.2991          
##       Balanced Accuracy : 0.9235          
##                                           
##        'Positive' Class : No              
## 
# Matriz de Confusión del Resultado de la Prueba
mcrp3 <- confusionMatrix(resultado_prueba3, prueba$m1_purchase)
mcrp3
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No   3   6
##        Yes  6  11
##                                           
##                Accuracy : 0.5385          
##                  95% CI : (0.3337, 0.7341)
##     No Information Rate : 0.6538          
##     P-Value [Acc > NIR] : 0.9231          
##                                           
##                   Kappa : -0.0196         
##                                           
##  Mcnemar's Test P-Value : 1.0000          
##                                           
##             Sensitivity : 0.3333          
##             Specificity : 0.6471          
##          Pos Pred Value : 0.3333          
##          Neg Pred Value : 0.6471          
##              Prevalence : 0.3462          
##          Detection Rate : 0.1154          
##    Detection Prevalence : 0.3462          
##       Balanced Accuracy : 0.4902          
##                                           
##        'Positive' Class : No              
## 

Modelo 4. Árbol de Decisión

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

# Matriz de Confusión del Resultado del Entrenamiento
mcre4 <- confusionMatrix(resultado_entrenamiento4, entrenamiento$m1_purchase)
mcre4
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No  17   2
##        Yes 19  69
##                                           
##                Accuracy : 0.8037          
##                  95% CI : (0.7158, 0.8742)
##     No Information Rate : 0.6636          
##     P-Value [Acc > NIR] : 0.0010139       
##                                           
##                   Kappa : 0.5025          
##                                           
##  Mcnemar's Test P-Value : 0.0004803       
##                                           
##             Sensitivity : 0.4722          
##             Specificity : 0.9718          
##          Pos Pred Value : 0.8947          
##          Neg Pred Value : 0.7841          
##              Prevalence : 0.3364          
##          Detection Rate : 0.1589          
##    Detection Prevalence : 0.1776          
##       Balanced Accuracy : 0.7220          
##                                           
##        'Positive' Class : No              
## 
# Matriz de Confusión del Resultado de la Prueba
mcrp4 <- confusionMatrix(resultado_prueba4, prueba$m1_purchase)
mcrp4
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No   4   6
##        Yes  5  11
##                                           
##                Accuracy : 0.5769          
##                  95% CI : (0.3692, 0.7665)
##     No Information Rate : 0.6538          
##     P-Value [Acc > NIR] : 0.8485          
##                                           
##                   Kappa : 0.0892          
##                                           
##  Mcnemar's Test P-Value : 1.0000          
##                                           
##             Sensitivity : 0.4444          
##             Specificity : 0.6471          
##          Pos Pred Value : 0.4000          
##          Neg Pred Value : 0.6875          
##              Prevalence : 0.3462          
##          Detection Rate : 0.1538          
##    Detection Prevalence : 0.3846          
##       Balanced Accuracy : 0.5458          
##                                           
##        'Positive' Class : No              
## 

Modelo 5. Redes Neuronales

modelo5 <- train(m1_purchase ~ ., data=entrenamiento,
method = "nnet", #Cambiar
preProcess = c("scale", "center"),
trControl = trainControl(method="cv", number=10)
#Cambiar
)
## # weights:  62
## initial  value 67.098707 
## iter  10 value 34.190509
## iter  20 value 25.565734
## iter  30 value 24.105787
## iter  40 value 24.099882
## iter  50 value 24.099241
## final  value 24.099203 
## converged
## # weights:  184
## initial  value 63.529556 
## iter  10 value 13.273809
## iter  20 value 7.371019
## iter  30 value 6.277015
## iter  40 value 6.144813
## iter  50 value 6.143215
## iter  60 value 6.141207
## iter  70 value 6.140583
## iter  80 value 6.139713
## iter  90 value 6.139028
## iter 100 value 6.138767
## final  value 6.138767 
## stopped after 100 iterations
## # weights:  306
## initial  value 66.279618 
## iter  10 value 14.319029
## iter  20 value 3.299890
## iter  30 value 2.837325
## iter  40 value 2.815101
## iter  50 value 2.791181
## iter  60 value 2.783450
## iter  70 value 2.773175
## iter  80 value 2.772794
## iter  90 value 2.772733
## iter 100 value 2.772658
## final  value 2.772658 
## stopped after 100 iterations
## # weights:  62
## initial  value 63.802165 
## iter  10 value 36.146380
## iter  20 value 25.145356
## iter  30 value 21.799870
## iter  40 value 21.239195
## iter  50 value 21.230278
## final  value 21.230276 
## converged
## # weights:  184
## initial  value 67.422817 
## iter  10 value 28.696609
## iter  20 value 18.187488
## iter  30 value 16.362784
## iter  40 value 16.206440
## iter  50 value 16.184680
## iter  60 value 16.182977
## final  value 16.182819 
## converged
## # weights:  306
## initial  value 65.425463 
## iter  10 value 24.135706
## iter  20 value 16.193583
## iter  30 value 14.974288
## iter  40 value 14.804076
## iter  50 value 14.680703
## iter  60 value 14.655922
## iter  70 value 14.648592
## iter  80 value 14.630171
## iter  90 value 14.620213
## iter 100 value 14.619851
## final  value 14.619851 
## stopped after 100 iterations
## # weights:  62
## initial  value 68.988839 
## iter  10 value 29.749183
## iter  20 value 24.964240
## iter  30 value 21.348966
## iter  40 value 21.326992
## iter  50 value 21.324398
## iter  60 value 21.209636
## iter  70 value 19.065726
## iter  80 value 19.064012
## iter  90 value 19.062884
## iter 100 value 19.062201
## final  value 19.062201 
## stopped after 100 iterations
## # weights:  184
## initial  value 77.375448 
## iter  10 value 26.216055
## iter  20 value 15.527799
## iter  30 value 13.793433
## iter  40 value 12.757908
## iter  50 value 12.559830
## iter  60 value 6.336715
## iter  70 value 5.437875
## iter  80 value 5.428100
## iter  90 value 3.830120
## iter 100 value 2.965522
## final  value 2.965522 
## stopped after 100 iterations
## # weights:  306
## initial  value 77.830049 
## iter  10 value 12.592691
## iter  20 value 6.407919
## iter  30 value 6.032685
## iter  40 value 5.842431
## iter  50 value 5.793031
## iter  60 value 5.764813
## iter  70 value 5.744921
## iter  80 value 5.628311
## iter  90 value 3.024216
## iter 100 value 2.970170
## final  value 2.970170 
## stopped after 100 iterations
## # weights:  62
## initial  value 63.135699 
## iter  10 value 34.945636
## iter  20 value 15.229697
## iter  30 value 14.260147
## iter  40 value 14.224841
## iter  50 value 14.224725
## iter  60 value 14.224702
## final  value 14.224702 
## converged
## # weights:  184
## initial  value 75.950069 
## iter  10 value 29.473728
## iter  20 value 17.662210
## iter  30 value 14.073352
## iter  40 value 13.586858
## iter  50 value 12.911791
## iter  60 value 12.379723
## iter  70 value 12.243577
## iter  80 value 12.051487
## iter  90 value 12.050013
## iter 100 value 12.048354
## final  value 12.048354 
## stopped after 100 iterations
## # weights:  306
## initial  value 121.427722 
## iter  10 value 8.758826
## iter  20 value 2.958966
## iter  30 value 1.946421
## iter  40 value 1.910201
## iter  50 value 1.909820
## iter  60 value 1.909672
## iter  70 value 1.909590
## iter  80 value 1.909571
## iter  90 value 1.909563
## iter 100 value 1.909551
## final  value 1.909551 
## stopped after 100 iterations
## # weights:  62
## initial  value 63.581658 
## iter  10 value 36.233274
## iter  20 value 28.157071
## iter  30 value 21.073706
## iter  40 value 20.429111
## iter  50 value 20.409129
## final  value 20.409004 
## converged
## # weights:  184
## initial  value 74.192845 
## iter  10 value 26.211303
## iter  20 value 19.139020
## iter  30 value 17.871765
## iter  40 value 17.638320
## iter  50 value 17.575063
## iter  60 value 17.568559
## iter  70 value 17.557609
## iter  80 value 17.549223
## iter  90 value 17.531701
## iter 100 value 17.530941
## final  value 17.530941 
## stopped after 100 iterations
## # weights:  306
## initial  value 69.083759 
## iter  10 value 28.096885
## iter  20 value 18.299792
## iter  30 value 15.932895
## iter  40 value 15.059954
## iter  50 value 14.872960
## iter  60 value 14.804384
## iter  70 value 14.771225
## iter  80 value 14.758982
## iter  90 value 14.755743
## iter 100 value 14.753253
## final  value 14.753253 
## stopped after 100 iterations
## # weights:  62
## initial  value 61.410167 
## iter  10 value 29.648175
## iter  20 value 26.548833
## iter  30 value 24.773478
## iter  40 value 24.759990
## iter  50 value 24.758160
## iter  60 value 24.755886
## iter  70 value 24.753714
## iter  80 value 24.752657
## iter  90 value 24.751760
## iter 100 value 24.657167
## final  value 24.657167 
## stopped after 100 iterations
## # weights:  184
## initial  value 63.261654 
## iter  10 value 18.185745
## iter  20 value 8.412622
## iter  30 value 8.055648
## iter  40 value 7.965685
## iter  50 value 7.806963
## iter  60 value 7.400713
## iter  70 value 7.274042
## iter  80 value 6.440459
## iter  90 value 5.038687
## iter 100 value 5.025069
## final  value 5.025069 
## stopped after 100 iterations
## # weights:  306
## initial  value 62.470495 
## iter  10 value 12.353216
## iter  20 value 9.385551
## iter  30 value 8.501586
## iter  40 value 8.454297
## iter  50 value 8.414151
## iter  60 value 3.611708
## iter  70 value 2.273929
## iter  80 value 2.232643
## iter  90 value 2.205615
## iter 100 value 2.186831
## final  value 2.186831 
## stopped after 100 iterations
## # weights:  62
## initial  value 64.673754 
## iter  10 value 29.246216
## iter  20 value 24.957073
## iter  30 value 24.406829
## iter  40 value 21.285850
## iter  50 value 21.274766
## iter  60 value 21.274209
## final  value 21.274078 
## converged
## # weights:  184
## initial  value 64.222808 
## iter  10 value 14.593026
## iter  20 value 4.907662
## iter  30 value 3.305290
## iter  40 value 2.843962
## iter  50 value 2.778165
## iter  60 value 2.773271
## iter  70 value 2.772920
## iter  80 value 2.772734
## iter  90 value 2.772599
## final  value 2.772595 
## converged
## # weights:  306
## initial  value 71.464835 
## iter  10 value 6.649081
## iter  20 value 2.805577
## iter  30 value 2.774743
## iter  40 value 2.772792
## iter  50 value 2.772596
## iter  60 value 2.772589
## final  value 2.772589 
## converged
## # weights:  62
## initial  value 63.367083 
## iter  10 value 29.925651
## iter  20 value 22.345216
## iter  30 value 20.360041
## iter  40 value 19.818660
## iter  50 value 19.359852
## iter  60 value 19.343613
## iter  70 value 19.343222
## final  value 19.343210 
## converged
## # weights:  184
## initial  value 76.414361 
## iter  10 value 28.680834
## iter  20 value 17.373687
## iter  30 value 16.063645
## iter  40 value 15.826469
## iter  50 value 15.694557
## iter  60 value 15.246287
## iter  70 value 14.761512
## iter  80 value 14.756937
## iter  90 value 14.756706
## iter 100 value 14.756671
## final  value 14.756671 
## stopped after 100 iterations
## # weights:  306
## initial  value 67.526217 
## iter  10 value 21.949242
## iter  20 value 14.407373
## iter  30 value 13.897402
## iter  40 value 13.788328
## iter  50 value 13.773106
## iter  60 value 13.772294
## iter  70 value 13.772227
## final  value 13.772222 
## converged
## # weights:  62
## initial  value 62.967894 
## iter  10 value 34.560819
## iter  20 value 26.959346
## iter  30 value 25.242342
## iter  40 value 24.371484
## iter  50 value 21.341518
## iter  60 value 21.334531
## iter  70 value 21.329375
## iter  80 value 21.324476
## iter  90 value 21.319562
## iter 100 value 21.316536
## final  value 21.316536 
## stopped after 100 iterations
## # weights:  184
## initial  value 71.488096 
## iter  10 value 14.469233
## iter  20 value 10.366442
## iter  30 value 9.714581
## iter  40 value 8.335375
## iter  50 value 8.256304
## iter  60 value 7.651579
## iter  70 value 7.032352
## iter  80 value 7.027138
## iter  90 value 7.016650
## iter 100 value 7.011482
## final  value 7.011482 
## stopped after 100 iterations
## # weights:  306
## initial  value 118.474585 
## iter  10 value 15.365348
## iter  20 value 7.894215
## iter  30 value 7.236786
## iter  40 value 7.134818
## iter  50 value 7.113855
## iter  60 value 6.311357
## iter  70 value 5.700620
## iter  80 value 3.060427
## iter  90 value 2.968636
## iter 100 value 2.936801
## final  value 2.936801 
## stopped after 100 iterations
## # weights:  62
## initial  value 63.324791 
## iter  10 value 27.011249
## iter  20 value 15.906400
## iter  30 value 13.019410
## iter  40 value 12.829455
## iter  50 value 12.825795
## iter  60 value 12.825643
## iter  70 value 12.825594
## final  value 12.825589 
## converged
## # weights:  184
## initial  value 93.647016 
## iter  10 value 17.541305
## iter  20 value 6.484307
## iter  30 value 3.866738
## iter  40 value 3.828761
## iter  50 value 3.823672
## iter  60 value 3.820314
## iter  70 value 3.819832
## iter  80 value 3.819459
## iter  90 value 3.819261
## iter 100 value 3.737645
## final  value 3.737645 
## stopped after 100 iterations
## # weights:  306
## initial  value 62.897135 
## iter  10 value 11.390808
## iter  20 value 3.404318
## iter  30 value 2.803281
## iter  40 value 2.772799
## iter  50 value 2.772617
## final  value 2.772592 
## converged
## # weights:  62
## initial  value 64.062943 
## iter  10 value 35.422565
## iter  20 value 25.705605
## iter  30 value 23.004226
## iter  40 value 22.665241
## iter  50 value 22.658111
## final  value 22.658104 
## converged
## # weights:  184
## initial  value 70.064271 
## iter  10 value 27.042826
## iter  20 value 18.182627
## iter  30 value 16.459911
## iter  40 value 15.997728
## iter  50 value 15.878095
## iter  60 value 15.874525
## iter  70 value 14.993683
## iter  80 value 14.805731
## iter  90 value 14.793029
## iter 100 value 14.792740
## final  value 14.792740 
## stopped after 100 iterations
## # weights:  306
## initial  value 69.791016 
## iter  10 value 22.825086
## iter  20 value 15.846660
## iter  30 value 15.117612
## iter  40 value 14.723641
## iter  50 value 14.535360
## iter  60 value 14.483053
## iter  70 value 14.448582
## iter  80 value 14.375302
## iter  90 value 14.329346
## iter 100 value 14.303397
## final  value 14.303397 
## stopped after 100 iterations
## # weights:  62
## initial  value 62.438413 
## iter  10 value 37.173411
## iter  20 value 29.875144
## iter  30 value 28.168568
## iter  40 value 28.064242
## iter  50 value 28.053962
## iter  60 value 28.050480
## iter  70 value 28.049396
## iter  80 value 28.048650
## iter  90 value 28.048037
## iter 100 value 28.047590
## final  value 28.047590 
## stopped after 100 iterations
## # weights:  184
## initial  value 71.858110 
## iter  10 value 18.158388
## iter  20 value 17.318164
## iter  30 value 17.087576
## iter  40 value 16.812764
## iter  50 value 16.740457
## iter  60 value 16.698550
## iter  70 value 15.791693
## iter  80 value 15.750860
## iter  90 value 15.633907
## iter 100 value 15.621490
## final  value 15.621490 
## stopped after 100 iterations
## # weights:  306
## initial  value 60.212507 
## iter  10 value 4.501790
## iter  20 value 3.014194
## iter  30 value 2.979414
## iter  40 value 2.944844
## iter  50 value 2.903414
## iter  60 value 2.893155
## iter  70 value 2.886249
## iter  80 value 2.879215
## iter  90 value 2.870762
## iter 100 value 2.866155
## final  value 2.866155 
## stopped after 100 iterations
## # weights:  62
## initial  value 91.072552 
## iter  10 value 33.121705
## iter  20 value 15.991437
## iter  30 value 15.340411
## iter  40 value 15.133397
## iter  50 value 10.271883
## iter  60 value 10.255222
## iter  70 value 10.254135
## iter  80 value 10.253961
## final  value 10.253959 
## converged
## # weights:  184
## initial  value 62.499382 
## iter  10 value 12.143792
## iter  20 value 6.123163
## iter  30 value 6.070561
## iter  40 value 6.068660
## iter  50 value 6.068435
## final  value 6.068432 
## converged
## # weights:  306
## initial  value 65.913644 
## iter  10 value 12.819816
## iter  20 value 3.146517
## iter  30 value 2.782287
## iter  40 value 2.773087
## iter  50 value 2.772603
## final  value 2.772602 
## converged
## # weights:  62
## initial  value 64.819897 
## iter  10 value 35.927275
## iter  20 value 25.007313
## iter  30 value 20.096288
## iter  40 value 19.658637
## iter  50 value 19.322506
## iter  60 value 18.162230
## iter  70 value 17.739056
## iter  80 value 17.709144
## final  value 17.709129 
## converged
## # weights:  184
## initial  value 68.446795 
## iter  10 value 24.994609
## iter  20 value 15.532752
## iter  30 value 13.973141
## iter  40 value 13.801027
## iter  50 value 13.786178
## iter  60 value 13.784641
## final  value 13.784637 
## converged
## # weights:  306
## initial  value 68.004748 
## iter  10 value 19.535492
## iter  20 value 14.111214
## iter  30 value 13.370513
## iter  40 value 13.136641
## iter  50 value 13.090446
## iter  60 value 13.058520
## iter  70 value 13.012129
## iter  80 value 13.010876
## iter  90 value 13.010803
## final  value 13.010802 
## converged
## # weights:  62
## initial  value 61.063232 
## iter  10 value 23.127677
## iter  20 value 19.333143
## iter  30 value 14.989529
## iter  40 value 14.737447
## iter  50 value 14.725472
## iter  60 value 13.060126
## iter  70 value 12.893969
## iter  80 value 12.889487
## iter  90 value 10.327531
## iter 100 value 10.311208
## final  value 10.311208 
## stopped after 100 iterations
## # weights:  184
## initial  value 64.712034 
## iter  10 value 11.266668
## iter  20 value 3.853876
## iter  30 value 3.557953
## iter  40 value 3.543862
## iter  50 value 3.524762
## iter  60 value 3.515583
## iter  70 value 3.508092
## iter  80 value 3.496692
## iter  90 value 3.386961
## iter 100 value 2.987595
## final  value 2.987595 
## stopped after 100 iterations
## # weights:  306
## initial  value 67.673781 
## iter  10 value 17.686777
## iter  20 value 10.051861
## iter  30 value 8.641459
## iter  40 value 4.893615
## iter  50 value 4.855881
## iter  60 value 4.837491
## iter  70 value 4.335645
## iter  80 value 4.284499
## iter  90 value 4.259422
## iter 100 value 3.810224
## final  value 3.810224 
## stopped after 100 iterations
## # weights:  62
## initial  value 65.577832 
## iter  10 value 31.535072
## iter  20 value 24.580212
## iter  30 value 24.459030
## iter  40 value 23.056535
## iter  50 value 22.934213
## iter  60 value 21.579459
## iter  70 value 21.565412
## iter  80 value 20.017923
## iter  90 value 20.016713
## iter 100 value 20.016322
## final  value 20.016322 
## stopped after 100 iterations
## # weights:  184
## initial  value 66.760488 
## iter  10 value 10.060278
## iter  20 value 5.584650
## iter  30 value 5.283547
## iter  40 value 5.274575
## iter  50 value 4.752979
## iter  60 value 3.380158
## iter  70 value 3.365925
## iter  80 value 3.365447
## iter  90 value 3.365425
## iter 100 value 3.365137
## final  value 3.365137 
## stopped after 100 iterations
## # weights:  306
## initial  value 62.595405 
## iter  10 value 6.457766
## iter  20 value 2.018183
## iter  30 value 1.912500
## iter  40 value 1.909593
## iter  50 value 1.909545
## final  value 1.909545 
## converged
## # weights:  62
## initial  value 77.237153 
## iter  10 value 37.602156
## iter  20 value 28.170780
## iter  30 value 22.414492
## iter  40 value 19.498458
## iter  50 value 18.365226
## iter  60 value 18.328521
## iter  70 value 18.317047
## iter  80 value 18.303650
## iter  90 value 18.302468
## iter 100 value 18.302430
## final  value 18.302430 
## stopped after 100 iterations
## # weights:  184
## initial  value 67.512998 
## iter  10 value 34.987188
## iter  20 value 21.038282
## iter  30 value 15.307591
## iter  40 value 13.718509
## iter  50 value 13.148445
## iter  60 value 13.044547
## iter  70 value 13.025583
## iter  80 value 13.025301
## final  value 13.025300 
## converged
## # weights:  306
## initial  value 69.441863 
## iter  10 value 19.158218
## iter  20 value 13.362433
## iter  30 value 12.754280
## iter  40 value 12.592236
## iter  50 value 12.367319
## iter  60 value 12.133592
## iter  70 value 12.073882
## iter  80 value 12.067812
## iter  90 value 12.067465
## final  value 12.067460 
## converged
## # weights:  62
## initial  value 68.314346 
## iter  10 value 24.249700
## iter  20 value 21.761395
## iter  30 value 21.516469
## iter  40 value 21.499624
## iter  50 value 21.497567
## iter  60 value 21.497088
## iter  70 value 21.496761
## iter  80 value 21.495643
## iter  90 value 21.353643
## iter 100 value 21.203443
## final  value 21.203443 
## stopped after 100 iterations
## # weights:  184
## initial  value 80.714979 
## iter  10 value 24.234442
## iter  20 value 15.014851
## iter  30 value 12.181271
## iter  40 value 12.133419
## iter  50 value 12.064230
## iter  60 value 11.936194
## iter  70 value 11.678996
## iter  80 value 11.607160
## iter  90 value 11.589171
## iter 100 value 11.574597
## final  value 11.574597 
## stopped after 100 iterations
## # weights:  306
## initial  value 82.478186 
## iter  10 value 15.632242
## iter  20 value 7.408036
## iter  30 value 4.353945
## iter  40 value 3.956579
## iter  50 value 3.944504
## iter  60 value 2.262281
## iter  70 value 2.071590
## iter  80 value 2.050081
## iter  90 value 2.043914
## iter 100 value 2.030803
## final  value 2.030803 
## stopped after 100 iterations
## # weights:  62
## initial  value 60.521685 
## iter  10 value 28.623853
## iter  20 value 21.291531
## iter  30 value 19.760239
## iter  40 value 19.743795
## iter  50 value 19.740373
## iter  60 value 19.739569
## iter  70 value 19.739487
## iter  80 value 19.739227
## final  value 19.739199 
## converged
## # weights:  184
## initial  value 67.827895 
## iter  10 value 21.732973
## iter  20 value 9.295810
## iter  30 value 7.209633
## iter  40 value 7.201914
## iter  50 value 6.934399
## final  value 6.689899 
## converged
## # weights:  306
## initial  value 66.052098 
## iter  10 value 15.448598
## iter  20 value 4.921830
## iter  30 value 4.422849
## iter  40 value 4.411949
## iter  50 value 4.411591
## iter  60 value 4.411566
## iter  60 value 4.411566
## final  value 4.411564 
## converged
## # weights:  62
## initial  value 62.305782 
## iter  10 value 33.460515
## iter  20 value 24.210064
## iter  30 value 21.522826
## iter  40 value 21.126556
## iter  50 value 21.117667
## final  value 21.117446 
## converged
## # weights:  184
## initial  value 75.474134 
## iter  10 value 28.555196
## iter  20 value 18.119800
## iter  30 value 16.012959
## iter  40 value 14.995530
## iter  50 value 14.540631
## iter  60 value 14.328161
## iter  70 value 14.324212
## final  value 14.324207 
## converged
## # weights:  306
## initial  value 67.082411 
## iter  10 value 24.178240
## iter  20 value 15.680364
## iter  30 value 14.735202
## iter  40 value 14.194330
## iter  50 value 13.934721
## iter  60 value 13.832825
## iter  70 value 13.615390
## iter  80 value 13.552693
## iter  90 value 13.546964
## iter 100 value 13.544512
## final  value 13.544512 
## stopped after 100 iterations
## # weights:  62
## initial  value 62.076608 
## iter  10 value 22.802523
## iter  20 value 20.289013
## iter  30 value 18.531505
## iter  40 value 18.528379
## iter  50 value 18.525044
## iter  60 value 18.523362
## iter  70 value 18.522161
## iter  80 value 18.521731
## iter  90 value 18.521406
## iter 100 value 18.521235
## final  value 18.521235 
## stopped after 100 iterations
## # weights:  184
## initial  value 83.017484 
## iter  10 value 20.595347
## iter  20 value 7.781503
## iter  30 value 7.220706
## iter  40 value 6.783638
## iter  50 value 6.049986
## iter  60 value 3.446938
## iter  70 value 2.906776
## iter  80 value 2.885470
## iter  90 value 2.875353
## iter 100 value 2.656967
## final  value 2.656967 
## stopped after 100 iterations
## # weights:  306
## initial  value 86.848911 
## iter  10 value 10.458109
## iter  20 value 6.315510
## iter  30 value 6.233419
## iter  40 value 4.757461
## iter  50 value 4.681095
## iter  60 value 4.657263
## iter  70 value 4.611354
## iter  80 value 4.017995
## iter  90 value 3.997862
## iter 100 value 3.979033
## final  value 3.979033 
## stopped after 100 iterations
## # weights:  62
## initial  value 70.177145 
## iter  10 value 29.958893
## iter  20 value 25.195873
## iter  30 value 23.715438
## iter  40 value 17.800922
## iter  50 value 17.663815
## iter  60 value 17.661947
## iter  70 value 17.661355
## iter  80 value 17.660893
## iter  90 value 17.660858
## iter 100 value 17.660709
## final  value 17.660709 
## stopped after 100 iterations
## # weights:  184
## initial  value 69.499736 
## iter  10 value 20.589385
## iter  20 value 14.983644
## iter  30 value 14.189562
## iter  40 value 13.806510
## iter  50 value 13.773014
## iter  60 value 13.766287
## iter  70 value 13.764447
## iter  80 value 13.594314
## iter  90 value 13.585287
## iter 100 value 13.399747
## final  value 13.399747 
## stopped after 100 iterations
## # weights:  306
## initial  value 69.886580 
## iter  10 value 8.252855
## iter  20 value 4.509225
## iter  30 value 3.855659
## iter  40 value 3.822959
## iter  50 value 3.820146
## iter  60 value 3.819694
## iter  70 value 3.819446
## iter  80 value 3.819318
## iter  90 value 3.819217
## iter 100 value 3.819201
## final  value 3.819201 
## stopped after 100 iterations
## # weights:  62
## initial  value 79.436520 
## iter  10 value 26.805015
## iter  20 value 22.152031
## iter  30 value 19.999393
## iter  40 value 19.961292
## final  value 19.960757 
## converged
## # weights:  184
## initial  value 89.177369 
## iter  10 value 31.358985
## iter  20 value 18.279470
## iter  30 value 17.164747
## iter  40 value 16.618478
## iter  50 value 16.562009
## iter  60 value 16.558030
## iter  70 value 16.538291
## iter  80 value 16.525755
## iter  90 value 16.525508
## final  value 16.525507 
## converged
## # weights:  306
## initial  value 67.669574 
## iter  10 value 21.644588
## iter  20 value 13.875246
## iter  30 value 13.110960
## iter  40 value 12.936906
## iter  50 value 12.905475
## iter  60 value 12.902549
## iter  70 value 12.902028
## iter  80 value 12.901971
## final  value 12.901970 
## converged
## # weights:  62
## initial  value 74.948877 
## iter  10 value 25.429217
## iter  20 value 17.808986
## iter  30 value 17.702917
## iter  40 value 16.414381
## iter  50 value 15.426493
## iter  60 value 15.404972
## iter  70 value 15.400913
## iter  80 value 12.894254
## iter  90 value 12.814883
## iter 100 value 12.805004
## final  value 12.805004 
## stopped after 100 iterations
## # weights:  184
## initial  value 71.813377 
## iter  10 value 30.353418
## iter  20 value 18.203836
## iter  30 value 15.516105
## iter  40 value 12.220408
## iter  50 value 12.071454
## iter  60 value 9.756926
## iter  70 value 9.603158
## iter  80 value 9.373618
## iter  90 value 8.962882
## iter 100 value 8.457106
## final  value 8.457106 
## stopped after 100 iterations
## # weights:  306
## initial  value 64.543500 
## iter  10 value 16.752210
## iter  20 value 7.264942
## iter  30 value 5.811870
## iter  40 value 4.364457
## iter  50 value 3.537590
## iter  60 value 3.469192
## iter  70 value 2.179523
## iter  80 value 2.100678
## iter  90 value 2.070749
## iter 100 value 2.045490
## final  value 2.045490 
## stopped after 100 iterations
## # weights:  62
## initial  value 60.955627 
## iter  10 value 19.946106
## iter  20 value 15.151314
## iter  30 value 12.835045
## iter  40 value 12.826490
## iter  50 value 12.825777
## iter  60 value 12.825600
## final  value 12.825583 
## converged
## # weights:  184
## initial  value 82.037383 
## iter  10 value 13.722932
## iter  20 value 3.750115
## iter  30 value 2.788460
## iter  40 value 2.772883
## iter  50 value 2.772653
## iter  60 value 2.772592
## final  value 2.772589 
## converged
## # weights:  306
## initial  value 110.707732 
## iter  10 value 9.415659
## iter  20 value 6.452012
## iter  30 value 4.498105
## iter  40 value 4.228711
## iter  50 value 4.168162
## iter  60 value 4.160662
## iter  70 value 4.159396
## iter  80 value 4.159190
## iter  90 value 4.158938
## iter 100 value 4.158921
## final  value 4.158921 
## stopped after 100 iterations
## # weights:  62
## initial  value 63.233250 
## iter  10 value 36.468897
## iter  20 value 22.994406
## iter  30 value 20.770407
## iter  40 value 20.209651
## iter  50 value 20.206793
## final  value 20.206790 
## converged
## # weights:  184
## initial  value 87.108979 
## iter  10 value 28.509193
## iter  20 value 15.444801
## iter  30 value 13.984992
## iter  40 value 13.856943
## iter  50 value 13.801942
## iter  60 value 13.799844
## iter  70 value 13.799811
## final  value 13.799810 
## converged
## # weights:  306
## initial  value 109.609267 
## iter  10 value 28.738835
## iter  20 value 15.627246
## iter  30 value 13.722953
## iter  40 value 13.034348
## iter  50 value 12.883077
## iter  60 value 12.872399
## iter  70 value 12.840955
## iter  80 value 12.812461
## iter  90 value 12.810420
## iter 100 value 12.810227
## final  value 12.810227 
## stopped after 100 iterations
## # weights:  62
## initial  value 84.367607 
## iter  10 value 36.099230
## iter  20 value 32.492575
## iter  30 value 29.795324
## iter  40 value 29.660726
## iter  50 value 26.722995
## iter  60 value 22.820896
## iter  70 value 21.198796
## iter  80 value 21.191284
## iter  90 value 21.188506
## iter 100 value 18.935511
## final  value 18.935511 
## stopped after 100 iterations
## # weights:  184
## initial  value 61.423404 
## iter  10 value 18.139855
## iter  20 value 13.289723
## iter  30 value 12.582995
## iter  40 value 12.429094
## iter  50 value 12.140166
## iter  60 value 11.641280
## iter  70 value 11.488142
## iter  80 value 11.162315
## iter  90 value 11.152972
## iter 100 value 10.972695
## final  value 10.972695 
## stopped after 100 iterations
## # weights:  306
## initial  value 96.766047 
## iter  10 value 13.942951
## iter  20 value 9.250581
## iter  30 value 7.622130
## iter  40 value 5.210083
## iter  50 value 4.417116
## iter  60 value 4.321077
## iter  70 value 3.807605
## iter  80 value 2.928228
## iter  90 value 2.913156
## iter 100 value 2.901738
## final  value 2.901738 
## stopped after 100 iterations
## # weights:  62
## initial  value 69.953369 
## iter  10 value 36.093771
## iter  20 value 26.167010
## iter  30 value 15.639903
## iter  40 value 15.314456
## iter  50 value 15.300138
## iter  60 value 15.293621
## iter  70 value 15.292359
## iter  80 value 15.291413
## iter  90 value 15.291229
## iter 100 value 15.291061
## final  value 15.291061 
## stopped after 100 iterations
## # weights:  184
## initial  value 68.308560 
## iter  10 value 19.897678
## iter  20 value 11.440097
## iter  30 value 9.369023
## iter  40 value 7.951055
## iter  50 value 7.794022
## iter  60 value 7.777943
## iter  70 value 7.775618
## iter  80 value 7.540088
## iter  90 value 5.826636
## iter 100 value 5.786962
## final  value 5.786962 
## stopped after 100 iterations
## # weights:  306
## initial  value 83.584200 
## iter  10 value 15.487745
## iter  20 value 6.909984
## iter  30 value 5.379080
## iter  40 value 5.288214
## iter  50 value 5.275963
## iter  60 value 5.273544
## iter  70 value 5.255549
## iter  80 value 2.814928
## iter  90 value 2.791756
## iter 100 value 2.782548
## final  value 2.782548 
## stopped after 100 iterations
## # weights:  62
## initial  value 69.374011 
## iter  10 value 31.849833
## iter  20 value 23.587528
## iter  30 value 22.232484
## iter  40 value 22.209381
## final  value 22.209322 
## converged
## # weights:  184
## initial  value 72.422441 
## iter  10 value 20.900574
## iter  20 value 15.404415
## iter  30 value 14.238875
## iter  40 value 13.889423
## iter  50 value 13.875353
## iter  60 value 13.873715
## iter  70 value 13.873597
## final  value 13.873596 
## converged
## # weights:  306
## initial  value 76.045043 
## iter  10 value 29.353223
## iter  20 value 16.123896
## iter  30 value 13.826310
## iter  40 value 13.526254
## iter  50 value 13.442342
## iter  60 value 13.429071
## iter  70 value 13.418612
## iter  80 value 13.418017
## iter  90 value 13.417868
## iter 100 value 13.417853
## final  value 13.417853 
## stopped after 100 iterations
## # weights:  62
## initial  value 61.454486 
## iter  10 value 40.265063
## iter  20 value 25.250806
## iter  30 value 17.270914
## iter  40 value 17.196270
## iter  50 value 17.186874
## iter  60 value 17.180336
## iter  70 value 17.175869
## iter  80 value 17.174307
## iter  90 value 17.173425
## iter 100 value 17.172233
## final  value 17.172233 
## stopped after 100 iterations
## # weights:  184
## initial  value 67.977957 
## iter  10 value 19.942615
## iter  20 value 10.893942
## iter  30 value 9.224255
## iter  40 value 8.470603
## iter  50 value 7.370169
## iter  60 value 7.358730
## iter  70 value 6.953991
## iter  80 value 6.860782
## iter  90 value 6.852846
## iter 100 value 6.842577
## final  value 6.842577 
## stopped after 100 iterations
## # weights:  306
## initial  value 79.393688 
## iter  10 value 17.092360
## iter  20 value 8.941972
## iter  30 value 6.846564
## iter  40 value 3.317036
## iter  50 value 3.163022
## iter  60 value 3.134701
## iter  70 value 3.116450
## iter  80 value 3.052863
## iter  90 value 3.027584
## iter 100 value 3.003008
## final  value 3.003008 
## stopped after 100 iterations
## # weights:  184
## initial  value 80.982025 
## iter  10 value 31.999948
## iter  20 value 19.567952
## iter  30 value 17.507111
## iter  40 value 16.728777
## iter  50 value 16.312257
## iter  60 value 15.548183
## iter  70 value 15.442645
## iter  80 value 15.425588
## iter  90 value 15.408520
## iter 100 value 15.390997
## final  value 15.390997 
## stopped after 100 iterations
resultado_entrenamiento5 <- predict(modelo5, entrenamiento)
resultado_prueba5 <- predict(modelo5, prueba)

# Matriz de Confusión

# Matriz de Confusión del Resultado del Entrenamiento
mcre5 <- confusionMatrix(resultado_entrenamiento5, entrenamiento$m1_purchase)
mcre5
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No  34   0
##        Yes  2  71
##                                           
##                Accuracy : 0.9813          
##                  95% CI : (0.9341, 0.9977)
##     No Information Rate : 0.6636          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9576          
##                                           
##  Mcnemar's Test P-Value : 0.4795          
##                                           
##             Sensitivity : 0.9444          
##             Specificity : 1.0000          
##          Pos Pred Value : 1.0000          
##          Neg Pred Value : 0.9726          
##              Prevalence : 0.3364          
##          Detection Rate : 0.3178          
##    Detection Prevalence : 0.3178          
##       Balanced Accuracy : 0.9722          
##                                           
##        'Positive' Class : No              
## 
# Matriz de Confusión del Resultado de la Prueba
mcrp5 <- confusionMatrix(resultado_prueba5, prueba$m1_purchase)
mcrp5
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No   3   6
##        Yes  6  11
##                                           
##                Accuracy : 0.5385          
##                  95% CI : (0.3337, 0.7341)
##     No Information Rate : 0.6538          
##     P-Value [Acc > NIR] : 0.9231          
##                                           
##                   Kappa : -0.0196         
##                                           
##  Mcnemar's Test P-Value : 1.0000          
##                                           
##             Sensitivity : 0.3333          
##             Specificity : 0.6471          
##          Pos Pred Value : 0.3333          
##          Neg Pred Value : 0.6471          
##              Prevalence : 0.3462          
##          Detection Rate : 0.1154          
##    Detection Prevalence : 0.3462          
##       Balanced Accuracy : 0.4902          
##                                           
##        'Positive' Class : No              
## 

Modelo 6. Bosques Aleatorios

modelo6 <- train(m1_purchase ~ ., 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

# Matriz de Confusión del Resultado del Entrenamiento
mcre6 <- confusionMatrix(resultado_entrenamiento6, entrenamiento$m1_purchase)
mcre6
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No  34   0
##        Yes  2  71
##                                           
##                Accuracy : 0.9813          
##                  95% CI : (0.9341, 0.9977)
##     No Information Rate : 0.6636          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9576          
##                                           
##  Mcnemar's Test P-Value : 0.4795          
##                                           
##             Sensitivity : 0.9444          
##             Specificity : 1.0000          
##          Pos Pred Value : 1.0000          
##          Neg Pred Value : 0.9726          
##              Prevalence : 0.3364          
##          Detection Rate : 0.3178          
##    Detection Prevalence : 0.3178          
##       Balanced Accuracy : 0.9722          
##                                           
##        'Positive' Class : No              
## 
# Matriz de Confusión del Resultado de la Prueba
mcrp6 <- confusionMatrix(resultado_prueba6, prueba$m1_purchase)
mcrp6
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No Yes
##        No   3   2
##        Yes  6  15
##                                           
##                Accuracy : 0.6923          
##                  95% CI : (0.4821, 0.8567)
##     No Information Rate : 0.6538          
##     P-Value [Acc > NIR] : 0.4267          
##                                           
##                   Kappa : 0.2409          
##                                           
##  Mcnemar's Test P-Value : 0.2888          
##                                           
##             Sensitivity : 0.3333          
##             Specificity : 0.8824          
##          Pos Pred Value : 0.6000          
##          Neg Pred Value : 0.7143          
##              Prevalence : 0.3462          
##          Detection Rate : 0.1154          
##    Detection Prevalence : 0.1923          
##       Balanced Accuracy : 0.6078          
##                                           
##        'Positive' Class : No              
## 

Tabla de Resultados

resultados <- data.frame(
"svmLinear" = c(mcre1$overall["Accuracy"], mcrp1$overall["Accuracy"]),
"svmRadial" = c(mcre2$overall["Accuracy"], mcrp2$overall["Accuracy"]),
"svmPoly" = c(mcre3$overall["Accuracy"], mcrp3$overall["Accuracy"]),
"rpart" = c(mcre4$overall["Accuracy"], mcrp4$overall["Accuracy"]),
"nnet" = c(mcre5$overall["Accuracy"], mcrp5$overall["Accuracy"]),
"rf" = c(mcre6$overall["Accuracy"], mcrp6$overall["Accuracy"])
)
rownames(resultados) <- c("Precision de entrenamiento", "Precision de prueba")
resultados
##                            svmLinear svmRadial   svmPoly     rpart      nnet
## Precision de entrenamiento 0.9439252 0.9813084 0.9439252 0.8037383 0.9813084
## Precision de prueba        0.5384615 0.6538462 0.5384615 0.5769231 0.5384615
##                                   rf
## Precision de entrenamiento 0.9813084
## Precision de prueba        0.6923077

Conclusiones

Con esta base de datos, el objetivo es predecir “m1_purchase (Yes/No)” a partir de características del usuario (perfil y preferencias) y variables de percepción sobre el chip M1 de Apple.
Los modelos se comparan principalmente por su “Accuracy en prueba”, ya que refleja mejor qué tan bien generaliza el modelo a datos nuevos.

El mejor modelo segun la prueba fue Random Forest, con una precisión aproximada de 69%. Aunque varios modelos mostraron alta precisión en entrenamiento (hasta 98%), se observa una caída significativa en prueba, lo que indica presencia de “overfitting”.

LS0tDQp0aXRsZTogIlNWTSAtIE0xIg0KYXV0aG9yOiAiRW1pbGlvIENpdWZmYXJkaSBBMDE2MTI1NjkiDQpkYXRlOiAiMjAyNi0wMi0yNyINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQogICAgdGhlbWU6IHlldGkNCi0tLQ0KDQohW10oaHR0cHM6Ly93d3cuYXBwbGUuY29tL25ld3Nyb29tL2ltYWdlcy9wcm9kdWN0L21hYy9zdGFuZGFyZC9BcHBsZV9tMS1jaGlwLTgtY29yZS1jcHUtY2hhcnRfMTExMDIwMjBfYmlnLmpwZy5sYXJnZS5qcGcpDQoNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWUiPiBJbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXLDrWFzIDwvc3Bhbj4NCmBgYHtyfQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikgIyBHcsOhZmljYXMNCmxpYnJhcnkoZ2dwbG90MikNCiMgaW5zdGFsbC5wYWNrYWdlcygibGF0dGljZSIpICMgQ3JlYXIgZ3LDoWZpY29zDQpsaWJyYXJ5KGxhdHRpY2UpDQojIGluc3RhbGwucGFja2FnZXMoImNhcmV0IikgIyBBbGdvcml0bW9zIGRlIGFwcmVuZGl6YWplIGF1dG9tw6F0aWNvDQpsaWJyYXJ5KGNhcmV0KQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJEYXRhRXhwbG9yZXIiKSAjIEFuw6FsaXNpcyBFeHBsb3JhdG9yaW8NCmxpYnJhcnkoRGF0YUV4cGxvcmVyKQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gQ3JlYXIgbGEgYmFzZSBkZSBkYXRvcyA8L3NwYW4+DQpgYGB7cn0NCmRmIDwtIHJlYWQuY3N2KCJDOlxcVXNlcnNcXEVtaWxpXFxPbmVEcml2ZVxcRGVza3RvcFxcVEVDXFxUZWMgNnRvIFNlbWVzdHJlIENvbmNlbnRyYWNpb25cXE1vZHVsbyAyXFxBcmNoaXZvcyBDU1ZcXE0xX2RhdGEuY3N2IikNCg0KZGYkbTFfcHVyY2hhc2UgPC0gYXMuZmFjdG9yKGRmJG0xX3B1cmNoYXNlKQ0KDQpjb2xzX2NhdCA8LSBpbnRlcnNlY3QoDQogIGMoImdlbmRlciIsImFnZV9ncm91cCIsImluY29tZV9ncm91cCIsInN0YXR1cyIsImRvbWFpbiIsInVzZXJfcGNtYWMiKSwNCiAgbmFtZXMoZGYpDQopDQpkZltjb2xzX2NhdF0gPC0gbGFwcGx5KGRmW2NvbHNfY2F0XSwgYXMuZmFjdG9yKQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gRW50ZW5kZXIgbGEgYmFzZSBkZSBkYXRvcyA8L3NwYW4+DQpgYGB7cn0NCnN1bW1hcnkoZGYpDQpzdHIoZGYpDQojIGNyZWF0ZV9yZXBvcnQoZGYpDQpwbG90X21pc3NpbmcoZGYpDQpkZl9udW0gPC0gZGZbc2FwcGx5KGRmLCBpcy5udW1lcmljKV0NCnBsb3RfaGlzdG9ncmFtKGRmX251bSkNCnBsb3RfY29ycmVsYXRpb24oZGZfbnVtKQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gUHJlcGFyYXIgZGF0b3MgKGR1bW1pZXMpIDwvc3Bhbj4NCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIFNlIHJlcXVpZXJlbiBwcmVkaWN0b3JlcyBudW3DqXJpY29zLg0KIyBDb252ZXJ0aW1vcyBmYWN0b3JlcyBhIGR1bW1pZXMgY29uIGNhcmV0Lg0KZG15IDwtIGR1bW15VmFycyhtMV9wdXJjaGFzZSB+IC4sIGRhdGEgPSBkZiwgZnVsbFJhbmsgPSBUUlVFKQ0KWCA8LSBwcmVkaWN0KGRteSwgbmV3ZGF0YSA9IGRmKQ0KDQpkZl9tb2RlbG8gPC0gZGF0YS5mcmFtZShtMV9wdXJjaGFzZSA9IGRmJG0xX3B1cmNoYXNlLCBYKQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gUGFydGlyIGxhIGJhc2UgZGUgZGF0b3MgPC9zcGFuPg0KYGBge3J9DQojIE5vcm1hbG1lbnRlIDgwLTIwDQpzZXQuc2VlZCgxMjMpDQpyZW5nbG9uZXNfZW50cmVuYW1pZW50byA8LSBjcmVhdGVEYXRhUGFydGl0aW9uKGRmX21vZGVsbyRtMV9wdXJjaGFzZSwgcCA9IDAuOCwgbGlzdCA9IEZBTFNFKQ0KDQplbnRyZW5hbWllbnRvIDwtIGRmX21vZGVsb1tyZW5nbG9uZXNfZW50cmVuYW1pZW50bywgXQ0KcHJ1ZWJhICAgICAgICA8LSBkZl9tb2RlbG9bLXJlbmdsb25lc19lbnRyZW5hbWllbnRvLCBdDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWUiPiBNb2RlbG8gMS4gU1ZNIExpbmVhbCA8L3NwYW4+DQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbW9kZWxvMSA8LSB0cmFpbihtMV9wdXJjaGFzZSB+IC4sIGRhdGE9ZW50cmVuYW1pZW50bywNCm1ldGhvZCA9ICJzdm1MaW5lYXIiLCAjQ2FtYmlhcg0KcHJlUHJvY2VzcyA9IGMoInNjYWxlIiwgImNlbnRlciIpLA0KdHJDb250cm9sID0gdHJhaW5Db250cm9sKG1ldGhvZD0iY3YiLCBudW1iZXI9MTApLA0KdHVuZUdyaWQgPSBkYXRhLmZyYW1lKEM9MSkgI0NhbWJpYXINCikNCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvMSA8LSBwcmVkaWN0KG1vZGVsbzEsIGVudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhMSA8LSBwcmVkaWN0KG1vZGVsbzEsIHBydWViYSkNCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbg0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuIGRlbCBSZXN1bHRhZG8gZGVsIEVudHJlbmFtaWVudG8NCm1jcmUxIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzEsIGVudHJlbmFtaWVudG8kbTFfcHVyY2hhc2UpDQptY3JlMQ0KIyBNYXRyaXogZGUgQ29uZnVzacOzbiBkZWwgUmVzdWx0YWRvIGRlIGxhIFBydWViYQ0KbWNycDEgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19wcnVlYmExLCBwcnVlYmEkbTFfcHVyY2hhc2UpDQptY3JwMQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gTW9kZWxvIDIuIFNWTSBSYWRpYWwgPC9zcGFuPg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCm1vZGVsbzIgPC0gdHJhaW4obTFfcHVyY2hhc2UgfiAuLCBkYXRhPWVudHJlbmFtaWVudG8sDQptZXRob2QgPSAic3ZtUmFkaWFsIiwgI0NhbWJpYXINCnByZVByb2Nlc3MgPSBjKCJzY2FsZSIsICJjZW50ZXIiKSwNCnRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2Q9ImN2IiwgbnVtYmVyPTEwKSwNCnR1bmVHcmlkID0gZGF0YS5mcmFtZShzaWdtYT0xLCBDPTEpICNDYW1iaWFyDQopDQpyZXN1bHRhZG9fZW50cmVuYW1pZW50bzIgPC0gcHJlZGljdChtb2RlbG8yLCBlbnRyZW5hbWllbnRvKQ0KcmVzdWx0YWRvX3BydWViYTIgPC0gcHJlZGljdChtb2RlbG8yLCBwcnVlYmEpDQoNCiMgTWF0cml6IGRlIENvbmZ1c2nDs24NCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbiBkZWwgUmVzdWx0YWRvIGRlbCBFbnRyZW5hbWllbnRvDQptY3JlMiA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG8yLCBlbnRyZW5hbWllbnRvJG0xX3B1cmNoYXNlKQ0KbWNyZTINCiMgTWF0cml6IGRlIENvbmZ1c2nDs24gZGVsIFJlc3VsdGFkbyBkZSBsYSBQcnVlYmENCm1jcnAyIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhMiwgcHJ1ZWJhJG0xX3B1cmNoYXNlKQ0KbWNycDINCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZSI+IE1vZGVsbyAzLiBTVk0gUG9saW7Ds21pY28gPC9zcGFuPg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCm1vZGVsbzMgPC0gdHJhaW4obTFfcHVyY2hhc2UgfiAuLCBkYXRhPWVudHJlbmFtaWVudG8sDQptZXRob2QgPSAic3ZtUG9seSIsICNDYW1iaWFyDQpwcmVQcm9jZXNzID0gYygic2NhbGUiLCAiY2VudGVyIiksDQp0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kPSJjdiIsIG51bWJlcj0xMCksDQp0dW5lR3JpZCA9IGRhdGEuZnJhbWUoZGVncmVlPTEsIHNjYWxlPTEsIEM9MSkgI0NhbWJpYXINCikNCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvMyA8LSBwcmVkaWN0KG1vZGVsbzMsIGVudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhMyA8LSBwcmVkaWN0KG1vZGVsbzMsIHBydWViYSkNCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbg0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuIGRlbCBSZXN1bHRhZG8gZGVsIEVudHJlbmFtaWVudG8NCm1jcmUzIDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzMsIGVudHJlbmFtaWVudG8kbTFfcHVyY2hhc2UpDQptY3JlMw0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuIGRlbCBSZXN1bHRhZG8gZGUgbGEgUHJ1ZWJhDQptY3JwMyA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTMsIHBydWViYSRtMV9wdXJjaGFzZSkNCm1jcnAzDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWUiPiBNb2RlbG8gNC4gw4FyYm9sIGRlIERlY2lzacOzbiA8L3NwYW4+DQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbW9kZWxvNCA8LSB0cmFpbihtMV9wdXJjaGFzZSB+IC4sIGRhdGE9ZW50cmVuYW1pZW50bywNCm1ldGhvZCA9ICJycGFydCIsICNDYW1iaWFyDQpwcmVQcm9jZXNzID0gYygic2NhbGUiLCAiY2VudGVyIiksDQp0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kPSJjdiIsIG51bWJlcj0xMCksDQp0dW5lTGVuZ3RoID0gMTAgI0NhbWJpYXINCikNCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvNCA8LSBwcmVkaWN0KG1vZGVsbzQsIGVudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhNCA8LSBwcmVkaWN0KG1vZGVsbzQsIHBydWViYSkNCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbg0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuIGRlbCBSZXN1bHRhZG8gZGVsIEVudHJlbmFtaWVudG8NCm1jcmU0IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzQsIGVudHJlbmFtaWVudG8kbTFfcHVyY2hhc2UpDQptY3JlNA0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuIGRlbCBSZXN1bHRhZG8gZGUgbGEgUHJ1ZWJhDQptY3JwNCA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTQsIHBydWViYSRtMV9wdXJjaGFzZSkNCm1jcnA0DQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWUiPiBNb2RlbG8gNS4gUmVkZXMgTmV1cm9uYWxlcyA8L3NwYW4+DQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbW9kZWxvNSA8LSB0cmFpbihtMV9wdXJjaGFzZSB+IC4sIGRhdGE9ZW50cmVuYW1pZW50bywNCm1ldGhvZCA9ICJubmV0IiwgI0NhbWJpYXINCnByZVByb2Nlc3MgPSBjKCJzY2FsZSIsICJjZW50ZXIiKSwNCnRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2Q9ImN2IiwgbnVtYmVyPTEwKQ0KI0NhbWJpYXINCikNCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvNSA8LSBwcmVkaWN0KG1vZGVsbzUsIGVudHJlbmFtaWVudG8pDQpyZXN1bHRhZG9fcHJ1ZWJhNSA8LSBwcmVkaWN0KG1vZGVsbzUsIHBydWViYSkNCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbg0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuIGRlbCBSZXN1bHRhZG8gZGVsIEVudHJlbmFtaWVudG8NCm1jcmU1IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzUsIGVudHJlbmFtaWVudG8kbTFfcHVyY2hhc2UpDQptY3JlNQ0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuIGRlbCBSZXN1bHRhZG8gZGUgbGEgUHJ1ZWJhDQptY3JwNSA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTUsIHBydWViYSRtMV9wdXJjaGFzZSkNCm1jcnA1DQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWUiPiBNb2RlbG8gNi4gQm9zcXVlcyBBbGVhdG9yaW9zIDwvc3Bhbj4NCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQptb2RlbG82IDwtIHRyYWluKG0xX3B1cmNoYXNlIH4gLiwgZGF0YT1lbnRyZW5hbWllbnRvLA0KbWV0aG9kID0gInJmIiwgI0NhbWJpYXINCnByZVByb2Nlc3MgPSBjKCJzY2FsZSIsICJjZW50ZXIiKSwNCnRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2Q9ImN2IiwgbnVtYmVyPTEwKSwNCnR1bmVHcmlkID0gZXhwYW5kLmdyaWQobXRyeSA9IGMoMiw0LDYpKSAjQ2FtYmlhcg0KKQ0KcmVzdWx0YWRvX2VudHJlbmFtaWVudG82IDwtIHByZWRpY3QobW9kZWxvNiwgZW50cmVuYW1pZW50bykNCnJlc3VsdGFkb19wcnVlYmE2IDwtIHByZWRpY3QobW9kZWxvNiwgcHJ1ZWJhKQ0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuDQoNCiMgTWF0cml6IGRlIENvbmZ1c2nDs24gZGVsIFJlc3VsdGFkbyBkZWwgRW50cmVuYW1pZW50bw0KbWNyZTYgPC0gY29uZnVzaW9uTWF0cml4KHJlc3VsdGFkb19lbnRyZW5hbWllbnRvNiwgZW50cmVuYW1pZW50byRtMV9wdXJjaGFzZSkNCm1jcmU2DQoNCiMgTWF0cml6IGRlIENvbmZ1c2nDs24gZGVsIFJlc3VsdGFkbyBkZSBsYSBQcnVlYmENCm1jcnA2IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhNiwgcHJ1ZWJhJG0xX3B1cmNoYXNlKQ0KbWNycDYNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZSI+IFRhYmxhIGRlIFJlc3VsdGFkb3MgPC9zcGFuPg0KYGBge3J9DQpyZXN1bHRhZG9zIDwtIGRhdGEuZnJhbWUoDQoic3ZtTGluZWFyIiA9IGMobWNyZTEkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDEkb3ZlcmFsbFsiQWNjdXJhY3kiXSksDQoic3ZtUmFkaWFsIiA9IGMobWNyZTIkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDIkb3ZlcmFsbFsiQWNjdXJhY3kiXSksDQoic3ZtUG9seSIgPSBjKG1jcmUzJG92ZXJhbGxbIkFjY3VyYWN5Il0sIG1jcnAzJG92ZXJhbGxbIkFjY3VyYWN5Il0pLA0KInJwYXJ0IiA9IGMobWNyZTQkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDQkb3ZlcmFsbFsiQWNjdXJhY3kiXSksDQoibm5ldCIgPSBjKG1jcmU1JG92ZXJhbGxbIkFjY3VyYWN5Il0sIG1jcnA1JG92ZXJhbGxbIkFjY3VyYWN5Il0pLA0KInJmIiA9IGMobWNyZTYkb3ZlcmFsbFsiQWNjdXJhY3kiXSwgbWNycDYkb3ZlcmFsbFsiQWNjdXJhY3kiXSkNCikNCnJvd25hbWVzKHJlc3VsdGFkb3MpIDwtIGMoIlByZWNpc2lvbiBkZSBlbnRyZW5hbWllbnRvIiwgIlByZWNpc2lvbiBkZSBwcnVlYmEiKQ0KcmVzdWx0YWRvcw0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gQ29uY2x1c2lvbmVzIDwvc3Bhbj4NCkNvbiBlc3RhIGJhc2UgZGUgZGF0b3MsIGVsIG9iamV0aXZvIGVzIHByZWRlY2lyICJtMV9wdXJjaGFzZSAoWWVzL05vKSIgYSBwYXJ0aXIgZGUNCmNhcmFjdGVyw61zdGljYXMgZGVsIHVzdWFyaW8gKHBlcmZpbCB5IHByZWZlcmVuY2lhcykgeSB2YXJpYWJsZXMgZGUgcGVyY2VwY2nDs24gc29icmUgZWwgY2hpcCBNMSBkZSBBcHBsZS4gIA0KTG9zIG1vZGVsb3Mgc2UgY29tcGFyYW4gcHJpbmNpcGFsbWVudGUgcG9yIHN1ICJBY2N1cmFjeSBlbiBwcnVlYmEiLCB5YSBxdWUgcmVmbGVqYSBtZWpvcg0KcXXDqSB0YW4gYmllbiBnZW5lcmFsaXphIGVsIG1vZGVsbyBhIGRhdG9zIG51ZXZvcy4gIA0KDQpFbCBtZWpvciBtb2RlbG8gc2VndW4gbGEgcHJ1ZWJhIGZ1ZSBSYW5kb20gRm9yZXN0LCBjb24gdW5hIHByZWNpc2nDs24gYXByb3hpbWFkYSBkZSA2OSUuIEF1bnF1ZSB2YXJpb3MgbW9kZWxvcyBtb3N0cmFyb24gYWx0YSBwcmVjaXNpw7NuIGVuIGVudHJlbmFtaWVudG8gKGhhc3RhIDk4JSksIHNlIG9ic2VydmEgdW5hIGNhw61kYSBzaWduaWZpY2F0aXZhIGVuIHBydWViYSwgbG8gcXVlIGluZGljYSBwcmVzZW5jaWEgZGUgIm92ZXJmaXR0aW5nIi4NCg0K