Teoría

Una Red Neuronal Artificial (ANN) modela la relación entre un conjunto de entradas y una salida, resolviendo un problema de aprendizaje.

Ejemplos prácticos de aplicación de Redes Neuronales:

  • La recomendación de contenido de Netflix
  • El feed de Instagram o TikTok
  • Determinar el número o letra escrito a mano

Instalar paquetes y llamar librerias

# install.packages("neuralnet")
library(neuralnet)
# install.packages("ggplot2")
library(ggplot2)
# install.packages("lattice")
library(lattice)
# install.packages("caret")
library(caret)
# install.packages("datasets")
library(datasets)
# install.packages("DataExplorer")
library(DataExplorer)

Alimentar con ejemplos

examen <- c(20,10,30,20,80,30)
proyecto <- c(90,20,40,50,50,80)
estatus <- c(1,0,0,0,0,1)
df <- data.frame(examen,proyecto,estatus)

Generar la Red Neuronal

red_neuronal <- neuralnet(estatus~., data= df)
plot(red_neuronal, rep="best")

Generar la Red Neuronal

prueba_examen <- c(30,40,85)
prueba_proyecto <- c(85,50,40)
prueba <- data.frame(prueba_examen,prueba_proyecto)
prediccion <- compute(red_neuronal,prueba)
prediccion$net.result
##             [,1]
## [1,]  1.03395239
## [2,] -0.02240248
## [3,] -0.02240248
probabilidad <- prediccion$net.result
resultado <- ifelse(probabilidad > 0.5,1,0)
resultado
##      [,1]
## [1,]    1
## [2,]    0
## [3,]    0

Practica: Cancer de Mama

data <- read.csv("C:/Users/corsa/OneDrive - CORSA Transportes SA de CV/Descargas/cancer_de_mama (1).csv")

Convertir a factor

data$diagnosis <- as.factor(data$diagnosis)

Partir los datos

# Normalmente 80-20
set.seed(123)
renglones_entrenamiento <- createDataPartition(data$diagnosis,p=0.8,list=FALSE)
entrenamiento <- data[renglones_entrenamiento, ]
prueba <- data[-renglones_entrenamiento, ]

Modelo Arbol de Decision

modelo4 <- train(diagnosis ~ ., data=entrenamiento, 
                 method = "rpart",
                 preProcess = c("scale","center"),
                 trControl = trainControl(method="cv",number=10),
                 tuneLength=10
                 )

resultado_entrenamiento4 <- predict(modelo4,entrenamiento)
resultado_prueba4 <- predict(modelo4,prueba)

# Matriz de Confusión
# Es una tabla de evaluacion que desglosa el rendimiento del modelo de clasificacion.

# Matriz de Confusión del Resultado del Entrenamiento
mcre4 <- confusionMatrix(resultado_entrenamiento4,entrenamiento$diagnosis)
mcre4
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   B   M
##          B 270   9
##          M  16 161
##                                           
##                Accuracy : 0.9452          
##                  95% CI : (0.9201, 0.9642)
##     No Information Rate : 0.6272          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.8837          
##                                           
##  Mcnemar's Test P-Value : 0.2301          
##                                           
##             Sensitivity : 0.9441          
##             Specificity : 0.9471          
##          Pos Pred Value : 0.9677          
##          Neg Pred Value : 0.9096          
##              Prevalence : 0.6272          
##          Detection Rate : 0.5921          
##    Detection Prevalence : 0.6118          
##       Balanced Accuracy : 0.9456          
##                                           
##        'Positive' Class : B               
## 
# Matriz de Confusión del Resultado de Prueba1
mcrp4 <- confusionMatrix(resultado_prueba4,prueba$diagnosis)
mcrp4
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  B  M
##          B 62  4
##          M  9 38
##                                           
##                Accuracy : 0.885           
##                  95% CI : (0.8113, 0.9373)
##     No Information Rate : 0.6283          
##     P-Value [Acc > NIR] : 8.286e-10       
##                                           
##                   Kappa : 0.7595          
##                                           
##  Mcnemar's Test P-Value : 0.2673          
##                                           
##             Sensitivity : 0.8732          
##             Specificity : 0.9048          
##          Pos Pred Value : 0.9394          
##          Neg Pred Value : 0.8085          
##              Prevalence : 0.6283          
##          Detection Rate : 0.5487          
##    Detection Prevalence : 0.5841          
##       Balanced Accuracy : 0.8890          
##                                           
##        'Positive' Class : B               
## 

Modelo Redes Neuronales

modelo5 <- train(diagnosis ~ ., data=entrenamiento, 
                 method = "nnet",
                 preProcess = c("scale","center"),
                 trControl = trainControl(method="cv",number=10)
                 )
## # weights:  33
## initial  value 275.998898 
## iter  10 value 30.521126
## iter  20 value 16.892187
## iter  30 value 7.487588
## iter  40 value 6.637537
## iter  50 value 6.564171
## iter  60 value 6.556942
## iter  70 value 6.555469
## iter  80 value 6.555228
## iter  90 value 6.555004
## iter 100 value 6.554973
## final  value 6.554973 
## stopped after 100 iterations
## # weights:  97
## initial  value 350.645783 
## iter  10 value 17.463538
## iter  20 value 3.623620
## iter  30 value 0.293011
## iter  40 value 0.071928
## iter  50 value 0.002108
## iter  60 value 0.000520
## final  value 0.000069 
## converged
## # weights:  161
## initial  value 253.010368 
## iter  10 value 13.528826
## iter  20 value 3.494878
## iter  30 value 0.033021
## iter  40 value 0.000612
## final  value 0.000068 
## converged
## # weights:  33
## initial  value 282.421480 
## iter  10 value 71.578133
## iter  20 value 38.905638
## iter  30 value 28.542089
## iter  40 value 27.255899
## iter  50 value 27.253389
## iter  50 value 27.253389
## iter  50 value 27.253389
## final  value 27.253389 
## converged
## # weights:  97
## initial  value 267.598163 
## iter  10 value 28.654290
## iter  20 value 23.912149
## iter  30 value 22.247739
## iter  40 value 21.088159
## iter  50 value 20.241773
## iter  60 value 20.171894
## final  value 20.168471 
## converged
## # weights:  161
## initial  value 396.125347 
## iter  10 value 78.050372
## iter  20 value 32.336759
## iter  30 value 20.144663
## iter  40 value 18.610968
## iter  50 value 18.117495
## iter  60 value 17.995837
## iter  70 value 17.902925
## iter  80 value 17.856227
## iter  90 value 17.849165
## iter 100 value 17.848931
## final  value 17.848931 
## stopped after 100 iterations
## # weights:  33
## initial  value 265.214791 
## iter  10 value 75.036465
## iter  20 value 70.385667
## iter  30 value 59.572163
## iter  40 value 59.526901
## iter  50 value 40.037154
## iter  60 value 39.625183
## iter  70 value 35.867633
## iter  80 value 27.512388
## iter  90 value 22.625657
## iter 100 value 22.600065
## final  value 22.600065 
## stopped after 100 iterations
## # weights:  97
## initial  value 292.151253 
## iter  10 value 21.995170
## iter  20 value 6.273787
## iter  30 value 0.291543
## iter  40 value 0.174070
## iter  50 value 0.165038
## iter  60 value 0.155689
## iter  70 value 0.149400
## iter  80 value 0.145892
## iter  90 value 0.142093
## iter 100 value 0.140820
## final  value 0.140820 
## stopped after 100 iterations
## # weights:  161
## initial  value 299.290636 
## iter  10 value 19.673884
## iter  20 value 3.974816
## iter  30 value 0.300306
## iter  40 value 0.245302
## iter  50 value 0.207972
## iter  60 value 0.177294
## iter  70 value 0.157909
## iter  80 value 0.146513
## iter  90 value 0.137165
## iter 100 value 0.129139
## final  value 0.129139 
## stopped after 100 iterations
## # weights:  33
## initial  value 273.424203 
## iter  10 value 71.913015
## iter  20 value 19.931429
## iter  30 value 9.562690
## iter  40 value 2.475503
## iter  50 value 0.003667
## final  value 0.000042 
## converged
## # weights:  97
## initial  value 276.767987 
## iter  10 value 29.196954
## iter  20 value 10.000372
## iter  30 value 0.396747
## iter  40 value 0.038944
## iter  50 value 0.012340
## iter  60 value 0.002336
## iter  70 value 0.000576
## iter  80 value 0.000441
## final  value 0.000100 
## converged
## # weights:  161
## initial  value 324.126721 
## iter  10 value 24.947745
## iter  20 value 9.057573
## iter  30 value 6.199734
## iter  40 value 5.551519
## iter  50 value 3.683237
## iter  60 value 1.405142
## iter  70 value 0.110780
## iter  80 value 0.036725
## iter  90 value 0.009446
## iter 100 value 0.003279
## final  value 0.003279 
## stopped after 100 iterations
## # weights:  33
## initial  value 318.358768 
## iter  10 value 55.169016
## iter  20 value 32.511700
## iter  30 value 29.579076
## iter  40 value 29.501747
## final  value 29.501670 
## converged
## # weights:  97
## initial  value 280.559061 
## iter  10 value 32.477772
## iter  20 value 27.598927
## iter  30 value 26.294211
## iter  40 value 25.013635
## iter  50 value 24.595297
## iter  60 value 24.588117
## final  value 24.587994 
## converged
## # weights:  161
## initial  value 300.907822 
## iter  10 value 32.085987
## iter  20 value 21.578340
## iter  30 value 20.675820
## iter  40 value 20.113104
## iter  50 value 19.712787
## iter  60 value 19.477257
## iter  70 value 19.461146
## iter  80 value 19.460753
## final  value 19.460743 
## converged
## # weights:  33
## initial  value 268.288269 
## iter  10 value 57.938360
## iter  20 value 31.562140
## iter  30 value 23.571004
## iter  40 value 20.829308
## iter  50 value 20.817344
## iter  60 value 20.810467
## iter  70 value 20.793502
## iter  80 value 20.789423
## iter  90 value 20.782604
## iter 100 value 20.757249
## final  value 20.757249 
## stopped after 100 iterations
## # weights:  97
## initial  value 231.889568 
## iter  10 value 30.428563
## iter  20 value 14.231688
## iter  30 value 6.852545
## iter  40 value 6.521815
## iter  50 value 6.289251
## iter  60 value 5.789203
## iter  70 value 4.285936
## iter  80 value 3.449510
## iter  90 value 3.040118
## iter 100 value 2.341541
## final  value 2.341541 
## stopped after 100 iterations
## # weights:  161
## initial  value 328.507146 
## iter  10 value 27.207700
## iter  20 value 3.670020
## iter  30 value 0.193572
## iter  40 value 0.157942
## iter  50 value 0.147963
## iter  60 value 0.137429
## iter  70 value 0.129155
## iter  80 value 0.123858
## iter  90 value 0.118795
## iter 100 value 0.116373
## final  value 0.116373 
## stopped after 100 iterations
## # weights:  33
## initial  value 339.071080 
## iter  10 value 27.122536
## iter  20 value 14.005994
## iter  30 value 12.052883
## iter  40 value 11.750208
## iter  50 value 11.726918
## iter  60 value 11.720505
## iter  70 value 11.720234
## iter  80 value 11.719849
## final  value 11.719808 
## converged
## # weights:  97
## initial  value 292.776086 
## iter  10 value 39.139277
## iter  20 value 17.619340
## iter  30 value 8.523359
## iter  40 value 3.551056
## iter  50 value 2.827679
## iter  60 value 2.780955
## iter  70 value 2.775676
## iter  80 value 2.774006
## iter  90 value 2.773095
## iter 100 value 2.772837
## final  value 2.772837 
## stopped after 100 iterations
## # weights:  161
## initial  value 337.662652 
## iter  10 value 35.513359
## iter  20 value 11.335189
## iter  30 value 3.493333
## iter  40 value 1.516191
## iter  50 value 0.773291
## iter  60 value 0.054379
## iter  70 value 0.019447
## iter  80 value 0.012219
## iter  90 value 0.008004
## iter 100 value 0.005025
## final  value 0.005025 
## stopped after 100 iterations
## # weights:  33
## initial  value 315.979714 
## iter  10 value 73.939356
## iter  20 value 43.040693
## iter  30 value 34.227521
## iter  40 value 30.573617
## iter  50 value 30.370540
## final  value 30.370206 
## converged
## # weights:  97
## initial  value 274.646392 
## iter  10 value 34.428514
## iter  20 value 27.211483
## iter  30 value 24.956093
## iter  40 value 23.259159
## iter  50 value 21.798003
## iter  60 value 21.209930
## iter  70 value 20.828151
## iter  80 value 20.711196
## iter  90 value 20.704998
## final  value 20.704913 
## converged
## # weights:  161
## initial  value 340.782584 
## iter  10 value 26.686498
## iter  20 value 20.617506
## iter  30 value 19.685721
## iter  40 value 19.507345
## iter  50 value 19.442964
## iter  60 value 19.397076
## iter  70 value 19.389178
## iter  80 value 19.388686
## final  value 19.388661 
## converged
## # weights:  33
## initial  value 254.766757 
## iter  10 value 33.102178
## iter  20 value 12.538301
## iter  30 value 11.947829
## iter  40 value 11.921068
## iter  50 value 11.913502
## iter  60 value 11.909733
## iter  70 value 11.907765
## iter  80 value 11.906945
## iter  90 value 11.905427
## iter 100 value 11.904227
## final  value 11.904227 
## stopped after 100 iterations
## # weights:  97
## initial  value 233.657278 
## iter  10 value 23.099420
## iter  20 value 12.348781
## iter  30 value 10.602912
## iter  40 value 9.609898
## iter  50 value 7.456064
## iter  60 value 7.003786
## iter  70 value 6.436754
## iter  80 value 5.655291
## iter  90 value 5.555793
## iter 100 value 5.290668
## final  value 5.290668 
## stopped after 100 iterations
## # weights:  161
## initial  value 344.514075 
## iter  10 value 15.950737
## iter  20 value 5.352738
## iter  30 value 0.455525
## iter  40 value 0.386224
## iter  50 value 0.288002
## iter  60 value 0.262541
## iter  70 value 0.248084
## iter  80 value 0.223502
## iter  90 value 0.194867
## iter 100 value 0.164612
## final  value 0.164612 
## stopped after 100 iterations
## # weights:  33
## initial  value 299.713185 
## iter  10 value 26.955999
## iter  20 value 7.305041
## iter  30 value 6.645907
## iter  40 value 6.562104
## iter  50 value 6.555079
## iter  60 value 6.554895
## iter  60 value 6.554895
## iter  60 value 6.554895
## final  value 6.554895 
## converged
## # weights:  97
## initial  value 276.442511 
## iter  10 value 24.550543
## iter  20 value 8.547076
## iter  30 value 3.762047
## iter  40 value 1.659066
## iter  50 value 0.309429
## iter  60 value 0.128948
## iter  70 value 0.028906
## iter  80 value 0.007296
## iter  90 value 0.001929
## iter 100 value 0.000884
## final  value 0.000884 
## stopped after 100 iterations
## # weights:  161
## initial  value 272.875552 
## iter  10 value 15.599733
## iter  20 value 1.279912
## iter  30 value 0.055386
## iter  40 value 0.006596
## final  value 0.000090 
## converged
## # weights:  33
## initial  value 345.395404 
## iter  10 value 54.233262
## iter  20 value 27.568786
## iter  30 value 25.686661
## iter  40 value 25.670102
## final  value 25.670101 
## converged
## # weights:  97
## initial  value 330.002861 
## iter  10 value 83.414542
## iter  20 value 30.409348
## iter  30 value 19.426493
## iter  40 value 18.815383
## iter  50 value 18.676712
## iter  60 value 18.664858
## iter  70 value 18.657390
## iter  80 value 18.656134
## final  value 18.656115 
## converged
## # weights:  161
## initial  value 317.259966 
## iter  10 value 29.968613
## iter  20 value 22.779502
## iter  30 value 22.064079
## iter  40 value 19.559240
## iter  50 value 18.510413
## iter  60 value 18.241281
## iter  70 value 18.200612
## iter  80 value 18.160864
## iter  90 value 18.154712
## iter 100 value 18.154596
## final  value 18.154596 
## stopped after 100 iterations
## # weights:  33
## initial  value 275.382395 
## iter  10 value 70.385496
## iter  20 value 16.561636
## iter  30 value 11.943838
## iter  40 value 11.859954
## iter  50 value 11.852018
## iter  60 value 11.848284
## iter  70 value 11.846383
## iter  80 value 11.845597
## iter  90 value 11.845141
## iter 100 value 11.844669
## final  value 11.844669 
## stopped after 100 iterations
## # weights:  97
## initial  value 266.234908 
## iter  10 value 49.449370
## iter  20 value 13.886371
## iter  30 value 7.269242
## iter  40 value 2.525727
## iter  50 value 0.557149
## iter  60 value 0.212094
## iter  70 value 0.203484
## iter  80 value 0.184928
## iter  90 value 0.172134
## iter 100 value 0.163563
## final  value 0.163563 
## stopped after 100 iterations
## # weights:  161
## initial  value 324.519289 
## iter  10 value 14.011223
## iter  20 value 0.800256
## iter  30 value 0.220010
## iter  40 value 0.199692
## iter  50 value 0.177107
## iter  60 value 0.166079
## iter  70 value 0.155302
## iter  80 value 0.145797
## iter  90 value 0.140874
## iter 100 value 0.134864
## final  value 0.134864 
## stopped after 100 iterations
## # weights:  33
## initial  value 279.531097 
## iter  10 value 32.598777
## iter  20 value 24.751501
## iter  30 value 24.748250
## iter  40 value 24.747616
## iter  50 value 24.747015
## iter  60 value 24.746824
## iter  70 value 24.746686
## iter  80 value 24.745058
## iter  90 value 24.741764
## iter 100 value 21.342032
## final  value 21.342032 
## stopped after 100 iterations
## # weights:  97
## initial  value 305.848181 
## iter  10 value 30.092908
## iter  20 value 11.656501
## iter  30 value 8.652024
## iter  40 value 7.485757
## iter  50 value 6.814372
## iter  60 value 6.613440
## iter  70 value 6.562661
## iter  80 value 6.537230
## iter  90 value 6.525032
## iter 100 value 6.518359
## final  value 6.518359 
## stopped after 100 iterations
## # weights:  161
## initial  value 261.736670 
## iter  10 value 18.893221
## iter  20 value 5.578271
## iter  30 value 1.370243
## iter  40 value 0.125045
## iter  50 value 0.024484
## iter  60 value 0.007507
## iter  70 value 0.001699
## iter  80 value 0.000494
## iter  90 value 0.000307
## iter 100 value 0.000220
## final  value 0.000220 
## stopped after 100 iterations
## # weights:  33
## initial  value 352.808520 
## iter  10 value 50.216889
## iter  20 value 34.654734
## iter  30 value 31.385112
## iter  40 value 30.792453
## iter  50 value 30.767568
## final  value 30.767524 
## converged
## # weights:  97
## initial  value 311.806361 
## iter  10 value 85.681177
## iter  20 value 38.990995
## iter  30 value 25.404647
## iter  40 value 23.382125
## iter  50 value 22.556339
## iter  60 value 22.460685
## iter  70 value 22.439611
## iter  80 value 22.437716
## final  value 22.437707 
## converged
## # weights:  161
## initial  value 311.991515 
## iter  10 value 30.484131
## iter  20 value 23.389867
## iter  30 value 22.232274
## iter  40 value 21.958182
## iter  50 value 21.747833
## iter  60 value 21.123427
## iter  70 value 20.440795
## iter  80 value 20.192537
## iter  90 value 20.086437
## iter 100 value 20.066358
## final  value 20.066358 
## stopped after 100 iterations
## # weights:  33
## initial  value 401.768982 
## iter  10 value 86.850594
## iter  20 value 31.966843
## iter  30 value 16.892349
## iter  40 value 16.567413
## iter  50 value 16.538869
## iter  60 value 16.530598
## iter  70 value 16.518473
## iter  80 value 16.508747
## iter  90 value 16.182818
## iter 100 value 12.058521
## final  value 12.058521 
## stopped after 100 iterations
## # weights:  97
## initial  value 295.389925 
## iter  10 value 21.253836
## iter  20 value 12.141020
## iter  30 value 9.532368
## iter  40 value 6.651336
## iter  50 value 5.098491
## iter  60 value 4.398941
## iter  70 value 2.219046
## iter  80 value 0.326932
## iter  90 value 0.286936
## iter 100 value 0.265529
## final  value 0.265529 
## stopped after 100 iterations
## # weights:  161
## initial  value 274.877265 
## iter  10 value 17.352541
## iter  20 value 3.932245
## iter  30 value 0.363593
## iter  40 value 0.272774
## iter  50 value 0.240694
## iter  60 value 0.217790
## iter  70 value 0.205552
## iter  80 value 0.189608
## iter  90 value 0.176682
## iter 100 value 0.170082
## final  value 0.170082 
## stopped after 100 iterations
## # weights:  33
## initial  value 306.284143 
## iter  10 value 40.429850
## iter  20 value 27.800141
## iter  30 value 21.270745
## iter  40 value 17.154577
## iter  50 value 16.416097
## iter  60 value 16.383392
## iter  70 value 16.376012
## iter  80 value 11.773602
## iter  90 value 11.728873
## iter 100 value 11.724902
## final  value 11.724902 
## stopped after 100 iterations
## # weights:  97
## initial  value 333.091236 
## iter  10 value 29.696859
## iter  20 value 11.861005
## iter  30 value 2.308943
## iter  40 value 0.023228
## iter  50 value 0.000168
## final  value 0.000043 
## converged
## # weights:  161
## initial  value 239.616021 
## iter  10 value 18.363280
## iter  20 value 2.023144
## iter  30 value 0.023553
## iter  40 value 0.000482
## final  value 0.000096 
## converged
## # weights:  33
## initial  value 267.069403 
## iter  10 value 35.968473
## iter  20 value 31.422739
## iter  30 value 30.552536
## final  value 30.551897 
## converged
## # weights:  97
## initial  value 275.770592 
## iter  10 value 56.285102
## iter  20 value 29.474405
## iter  30 value 22.325068
## iter  40 value 21.272026
## iter  50 value 21.240166
## iter  60 value 21.234137
## iter  70 value 21.233853
## final  value 21.233852 
## converged
## # weights:  161
## initial  value 293.883920 
## iter  10 value 38.474812
## iter  20 value 25.678462
## iter  30 value 23.377080
## iter  40 value 21.621527
## iter  50 value 20.878186
## iter  60 value 20.510278
## iter  70 value 20.292783
## iter  80 value 19.968118
## iter  90 value 19.951615
## iter 100 value 19.951385
## final  value 19.951385 
## stopped after 100 iterations
## # weights:  33
## initial  value 270.406880 
## iter  10 value 49.673028
## iter  20 value 27.166472
## iter  30 value 13.891087
## iter  40 value 11.981655
## iter  50 value 11.956489
## iter  60 value 11.949206
## iter  70 value 11.942937
## iter  80 value 11.933469
## iter  90 value 11.928619
## iter 100 value 11.919527
## final  value 11.919527 
## stopped after 100 iterations
## # weights:  97
## initial  value 274.941998 
## iter  10 value 25.422855
## iter  20 value 9.555207
## iter  30 value 7.046244
## iter  40 value 6.937305
## iter  50 value 6.913073
## iter  60 value 6.886534
## iter  70 value 6.858187
## iter  80 value 6.832657
## iter  90 value 6.798121
## iter 100 value 6.756018
## final  value 6.756018 
## stopped after 100 iterations
## # weights:  161
## initial  value 234.401883 
## iter  10 value 16.563723
## iter  20 value 6.312462
## iter  30 value 2.127394
## iter  40 value 1.652306
## iter  50 value 1.623655
## iter  60 value 1.017077
## iter  70 value 0.275940
## iter  80 value 0.240571
## iter  90 value 0.228396
## iter 100 value 0.217557
## final  value 0.217557 
## stopped after 100 iterations
## # weights:  33
## initial  value 255.564161 
## iter  10 value 49.870240
## iter  20 value 31.207801
## iter  30 value 30.404616
## iter  40 value 30.303067
## iter  50 value 30.274337
## iter  60 value 30.268574
## iter  70 value 30.266307
## iter  80 value 30.266066
## iter  90 value 30.265865
## final  value 30.265620 
## converged
## # weights:  97
## initial  value 320.609429 
## iter  10 value 23.573761
## iter  20 value 9.606715
## iter  30 value 4.007404
## iter  40 value 3.659845
## iter  50 value 3.456729
## iter  60 value 3.276671
## iter  70 value 3.104147
## iter  80 value 3.016149
## iter  90 value 2.648794
## iter 100 value 2.502830
## final  value 2.502830 
## stopped after 100 iterations
## # weights:  161
## initial  value 289.479148 
## iter  10 value 13.648745
## iter  20 value 1.412409
## iter  30 value 0.018902
## final  value 0.000079 
## converged
## # weights:  33
## initial  value 317.164259 
## iter  10 value 83.897696
## iter  20 value 41.115703
## iter  30 value 30.232407
## iter  40 value 28.517083
## iter  50 value 28.514651
## final  value 28.514651 
## converged
## # weights:  97
## initial  value 332.158156 
## iter  10 value 37.551382
## iter  20 value 24.066124
## iter  30 value 22.035076
## iter  40 value 21.825935
## iter  50 value 21.545050
## iter  60 value 21.432357
## final  value 21.429235 
## converged
## # weights:  161
## initial  value 259.004422 
## iter  10 value 27.220113
## iter  20 value 20.180953
## iter  30 value 18.782211
## iter  40 value 18.457754
## iter  50 value 18.355749
## iter  60 value 18.349731
## iter  70 value 18.349510
## final  value 18.349493 
## converged
## # weights:  33
## initial  value 331.903973 
## iter  10 value 31.321324
## iter  20 value 13.895070
## iter  30 value 10.692874
## iter  40 value 6.990163
## iter  50 value 6.729053
## iter  60 value 6.717970
## iter  70 value 6.714656
## iter  80 value 6.713498
## iter  90 value 6.712739
## iter 100 value 6.712337
## final  value 6.712337 
## stopped after 100 iterations
## # weights:  97
## initial  value 356.333796 
## iter  10 value 19.155088
## iter  20 value 6.279157
## iter  30 value 3.283195
## iter  40 value 2.633579
## iter  50 value 0.326405
## iter  60 value 0.252720
## iter  70 value 0.239266
## iter  80 value 0.216118
## iter  90 value 0.198284
## iter 100 value 0.182766
## final  value 0.182766 
## stopped after 100 iterations
## # weights:  161
## initial  value 289.313949 
## iter  10 value 12.646971
## iter  20 value 1.711733
## iter  30 value 0.215401
## iter  40 value 0.181912
## iter  50 value 0.165675
## iter  60 value 0.149676
## iter  70 value 0.139276
## iter  80 value 0.129727
## iter  90 value 0.123228
## iter 100 value 0.118980
## final  value 0.118980 
## stopped after 100 iterations
## # weights:  33
## initial  value 313.961005 
## iter  10 value 54.180007
## iter  20 value 25.372670
## iter  30 value 24.766051
## iter  40 value 24.749060
## iter  50 value 24.747184
## iter  60 value 24.746561
## final  value 24.746560 
## converged
## # weights:  97
## initial  value 222.322936 
## iter  10 value 27.783384
## iter  20 value 16.692179
## iter  30 value 12.905102
## iter  40 value 9.780729
## iter  50 value 7.886774
## iter  60 value 4.863727
## iter  70 value 3.264137
## iter  80 value 2.518601
## iter  90 value 0.106332
## iter 100 value 0.013462
## final  value 0.013462 
## stopped after 100 iterations
## # weights:  161
## initial  value 290.889365 
## iter  10 value 18.952602
## iter  20 value 2.821763
## iter  30 value 0.020677
## iter  40 value 0.000355
## final  value 0.000100 
## converged
## # weights:  33
## initial  value 267.820562 
## iter  10 value 69.211429
## iter  20 value 43.311671
## iter  30 value 31.600878
## iter  40 value 30.654529
## iter  50 value 30.650762
## final  value 30.650602 
## converged
## # weights:  97
## initial  value 402.016361 
## iter  10 value 63.391327
## iter  20 value 35.454523
## iter  30 value 27.186212
## iter  40 value 23.922872
## iter  50 value 22.700202
## iter  60 value 21.942905
## iter  70 value 21.462998
## iter  80 value 21.419118
## iter  90 value 21.416137
## iter 100 value 21.415774
## final  value 21.415774 
## stopped after 100 iterations
## # weights:  161
## initial  value 240.463544 
## iter  10 value 31.007047
## iter  20 value 25.592256
## iter  30 value 22.770520
## iter  40 value 22.175053
## iter  50 value 21.779054
## iter  60 value 21.050726
## iter  70 value 20.981204
## iter  80 value 20.979705
## final  value 20.979703 
## converged
## # weights:  33
## initial  value 306.087770 
## iter  10 value 58.912876
## iter  20 value 15.363925
## iter  30 value 8.169851
## iter  40 value 7.106389
## iter  50 value 6.876432
## iter  60 value 6.829904
## iter  70 value 6.810498
## iter  80 value 6.792301
## iter  90 value 6.779632
## iter 100 value 6.774269
## final  value 6.774269 
## stopped after 100 iterations
## # weights:  97
## initial  value 324.391897 
## iter  10 value 30.581290
## iter  20 value 11.190305
## iter  30 value 4.239997
## iter  40 value 3.133842
## iter  50 value 2.977079
## iter  60 value 2.294446
## iter  70 value 0.372910
## iter  80 value 0.283825
## iter  90 value 0.262377
## iter 100 value 0.245555
## final  value 0.245555 
## stopped after 100 iterations
## # weights:  161
## initial  value 290.629442 
## iter  10 value 18.689106
## iter  20 value 4.740596
## iter  30 value 0.337905
## iter  40 value 0.271989
## iter  50 value 0.249219
## iter  60 value 0.230903
## iter  70 value 0.215947
## iter  80 value 0.202488
## iter  90 value 0.191071
## iter 100 value 0.185257
## final  value 0.185257 
## stopped after 100 iterations
## # weights:  33
## initial  value 345.290687 
## iter  10 value 64.733095
## iter  20 value 36.604133
## iter  30 value 23.539459
## iter  40 value 22.658058
## iter  50 value 22.449445
## iter  60 value 18.471376
## iter  70 value 17.774629
## iter  80 value 17.753909
## iter  90 value 17.747127
## iter 100 value 17.746386
## final  value 17.746386 
## stopped after 100 iterations
## # weights:  97
## initial  value 302.879906 
## iter  10 value 38.244466
## iter  20 value 15.923646
## iter  30 value 6.115832
## iter  40 value 0.743754
## iter  50 value 0.043831
## iter  60 value 0.011471
## iter  70 value 0.003884
## iter  80 value 0.001904
## iter  90 value 0.000505
## final  value 0.000083 
## converged
## # weights:  161
## initial  value 250.829604 
## iter  10 value 22.050144
## iter  20 value 8.317096
## iter  30 value 7.402939
## iter  40 value 5.110249
## iter  50 value 4.616511
## iter  60 value 4.309188
## iter  70 value 3.757335
## iter  80 value 3.300289
## iter  90 value 2.969666
## iter 100 value 2.154628
## final  value 2.154628 
## stopped after 100 iterations
## # weights:  33
## initial  value 286.735821 
## iter  10 value 58.505131
## iter  20 value 43.838997
## iter  30 value 34.163825
## iter  40 value 30.868565
## iter  50 value 30.813108
## iter  60 value 30.805874
## final  value 30.805872 
## converged
## # weights:  97
## initial  value 261.394605 
## iter  10 value 30.307410
## iter  20 value 23.861932
## iter  30 value 22.759163
## iter  40 value 22.066185
## iter  50 value 21.740540
## iter  60 value 21.693415
## iter  70 value 21.693089
## iter  70 value 21.693089
## iter  70 value 21.693089
## final  value 21.693089 
## converged
## # weights:  161
## initial  value 296.955140 
## iter  10 value 40.023630
## iter  20 value 25.085221
## iter  30 value 21.144361
## iter  40 value 20.215675
## iter  50 value 20.083063
## iter  60 value 20.039797
## iter  70 value 20.038109
## iter  80 value 20.038095
## final  value 20.038094 
## converged
## # weights:  33
## initial  value 275.046057 
## iter  10 value 34.012004
## iter  20 value 26.113471
## iter  30 value 24.901886
## iter  40 value 23.755759
## iter  50 value 20.803958
## iter  60 value 20.796865
## iter  70 value 20.794190
## iter  80 value 20.790126
## iter  90 value 20.557105
## iter 100 value 17.499939
## final  value 17.499939 
## stopped after 100 iterations
## # weights:  97
## initial  value 449.443222 
## iter  10 value 33.243409
## iter  20 value 17.721296
## iter  30 value 14.187760
## iter  40 value 7.112640
## iter  50 value 6.585820
## iter  60 value 6.297382
## iter  70 value 4.909035
## iter  80 value 2.189756
## iter  90 value 0.529127
## iter 100 value 0.465349
## final  value 0.465349 
## stopped after 100 iterations
## # weights:  161
## initial  value 347.206065 
## iter  10 value 18.417863
## iter  20 value 1.968475
## iter  30 value 0.451406
## iter  40 value 0.373896
## iter  50 value 0.338801
## iter  60 value 0.323210
## iter  70 value 0.305303
## iter  80 value 0.288216
## iter  90 value 0.277223
## iter 100 value 0.271178
## final  value 0.271178 
## stopped after 100 iterations
## # weights:  33
## initial  value 309.205709 
## iter  10 value 45.259741
## iter  20 value 27.157080
## iter  30 value 26.709956
## iter  40 value 26.693846
## iter  50 value 22.417875
## iter  60 value 22.398332
## iter  70 value 22.392330
## iter  80 value 22.391678
## iter  90 value 22.388162
## iter 100 value 22.387508
## final  value 22.387508 
## stopped after 100 iterations
## # weights:  97
## initial  value 269.753537 
## iter  10 value 30.561985
## iter  20 value 7.228053
## iter  30 value 3.080570
## iter  40 value 2.222693
## iter  50 value 1.955277
## iter  60 value 1.670174
## iter  70 value 1.416601
## iter  80 value 1.405071
## iter  90 value 1.395248
## iter 100 value 1.391600
## final  value 1.391600 
## stopped after 100 iterations
## # weights:  161
## initial  value 293.746197 
## iter  10 value 23.969241
## iter  20 value 8.399806
## iter  30 value 2.360855
## iter  40 value 0.284828
## iter  50 value 0.051548
## iter  60 value 0.031353
## iter  70 value 0.018714
## iter  80 value 0.005227
## iter  90 value 0.001890
## iter 100 value 0.000268
## final  value 0.000268 
## stopped after 100 iterations
## # weights:  33
## initial  value 348.586681 
## iter  10 value 68.992488
## iter  20 value 35.200869
## iter  30 value 30.598553
## iter  40 value 29.407747
## final  value 29.405231 
## converged
## # weights:  97
## initial  value 298.950904 
## iter  10 value 59.409879
## iter  20 value 28.135119
## iter  30 value 23.305450
## iter  40 value 22.157933
## iter  50 value 21.993239
## iter  60 value 21.990932
## final  value 21.990932 
## converged
## # weights:  161
## initial  value 335.172797 
## iter  10 value 29.675088
## iter  20 value 23.212793
## iter  30 value 21.897507
## iter  40 value 20.670359
## iter  50 value 19.884396
## iter  60 value 19.816024
## iter  70 value 19.807582
## iter  80 value 19.807436
## final  value 19.807409 
## converged
## # weights:  33
## initial  value 270.283817 
## iter  10 value 64.196983
## iter  20 value 22.952917
## iter  30 value 22.559291
## iter  40 value 18.590801
## iter  50 value 17.954065
## iter  60 value 17.895843
## iter  70 value 17.883711
## iter  80 value 17.881650
## iter  90 value 17.880617
## iter 100 value 17.878469
## final  value 17.878469 
## stopped after 100 iterations
## # weights:  97
## initial  value 328.956304 
## iter  10 value 38.420942
## iter  20 value 17.345140
## iter  30 value 4.543695
## iter  40 value 2.323675
## iter  50 value 2.129782
## iter  60 value 2.105720
## iter  70 value 1.209083
## iter  80 value 0.271663
## iter  90 value 0.225799
## iter 100 value 0.209947
## final  value 0.209947 
## stopped after 100 iterations
## # weights:  161
## initial  value 221.687481 
## iter  10 value 18.628850
## iter  20 value 3.532138
## iter  30 value 0.449831
## iter  40 value 0.345715
## iter  50 value 0.261712
## iter  60 value 0.202783
## iter  70 value 0.178047
## iter  80 value 0.162314
## iter  90 value 0.150774
## iter 100 value 0.145657
## final  value 0.145657 
## stopped after 100 iterations
## # weights:  161
## initial  value 343.597544 
## iter  10 value 122.241273
## iter  20 value 38.490157
## iter  30 value 24.719215
## iter  40 value 22.050819
## iter  50 value 21.231478
## iter  60 value 20.873136
## iter  70 value 20.775119
## iter  80 value 20.749658
## iter  90 value 20.741289
## iter 100 value 20.739536
## final  value 20.739536 
## stopped after 100 iterations
resultado_entrenamiento5 <- predict(modelo5,entrenamiento)
resultado_prueba5 <- predict(modelo5,prueba)

# Matriz de Confusión
# Es una tabla de evaluacion que desglosa el rendimiento del modelo de clasificacion.

# Matriz de Confusión del Resultado del Entrenamiento
mcre5 <- confusionMatrix(resultado_entrenamiento5,entrenamiento$diagnosis)
# mcre5

# Matriz de Confusión del Resultado de Prueba1
mcrp5 <- confusionMatrix(resultado_prueba5,prueba$diagnosis)
mcrp5
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  B  M
##          B 69  1
##          M  2 41
##                                           
##                Accuracy : 0.9735          
##                  95% CI : (0.9244, 0.9945)
##     No Information Rate : 0.6283          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9434          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9718          
##             Specificity : 0.9762          
##          Pos Pred Value : 0.9857          
##          Neg Pred Value : 0.9535          
##              Prevalence : 0.6283          
##          Detection Rate : 0.6106          
##    Detection Prevalence : 0.6195          
##       Balanced Accuracy : 0.9740          
##                                           
##        'Positive' Class : B               
## 

Conclusion

Podemos ver que el modelo con mayor precision es el de redes neuronales, superó por mucho el de arbol de decisiones. Aunque ambos son buenos modelos.

LS0tDQp0aXRsZTogIlJlZGVzIE5ldXJvbmFsZXMiDQphdXRob3I6ICJFdWdlbmlvIFZpbGxhcnJlYWwiDQpkYXRlOiAiMjAyNS0wOC0yNSINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KICAgIHRoZW1lOiAic3BhY2VsYWIiDQotLS0NCg0KIVtdKGh0dHBzOi8vY2RuLWljb25zLWdpZi5mbGF0aWNvbi5jb20vMTExODQvMTExODQxNTcuZ2lmKQ0KDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gVGVvcsOtYSA8L3NwYW4+DQpVbmEgKipSZWQgTmV1cm9uYWwgQXJ0aWZpY2lhbCAoQU5OKSoqIG1vZGVsYSBsYSByZWxhY2nDs24gZW50cmUgdW4gY29uanVudG8gZGUgZW50cmFkYXMgeSB1bmEgc2FsaWRhLCByZXNvbHZpZW5kbyB1biBwcm9ibGVtYSBkZSBhcHJlbmRpemFqZS4gDQoNCkVqZW1wbG9zIHByw6FjdGljb3MgZGUgYXBsaWNhY2nDs24gZGUgUmVkZXMgTmV1cm9uYWxlczoNCg0KKiBMYSByZWNvbWVuZGFjacOzbiBkZSBjb250ZW5pZG8gZGUgTmV0ZmxpeA0KKiBFbCBmZWVkIGRlIEluc3RhZ3JhbSBvIFRpa1Rvaw0KKiBEZXRlcm1pbmFyIGVsIG7Dum1lcm8gbyBsZXRyYSBlc2NyaXRvIGEgbWFubw0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZSI+IEluc3RhbGFyIHBhcXVldGVzIHkgbGxhbWFyIGxpYnJlcmlhcyA8L3NwYW4+DQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJuZXVyYWxuZXQiKQ0KbGlicmFyeShuZXVyYWxuZXQpDQojIGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJsYXR0aWNlIikNCmxpYnJhcnkobGF0dGljZSkNCiMgaW5zdGFsbC5wYWNrYWdlcygiY2FyZXQiKQ0KbGlicmFyeShjYXJldCkNCiMgaW5zdGFsbC5wYWNrYWdlcygiZGF0YXNldHMiKQ0KbGlicmFyeShkYXRhc2V0cykNCiMgaW5zdGFsbC5wYWNrYWdlcygiRGF0YUV4cGxvcmVyIikNCmxpYnJhcnkoRGF0YUV4cGxvcmVyKQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gQWxpbWVudGFyIGNvbiBlamVtcGxvcyA8L3NwYW4+DQpgYGB7cn0NCmV4YW1lbiA8LSBjKDIwLDEwLDMwLDIwLDgwLDMwKQ0KcHJveWVjdG8gPC0gYyg5MCwyMCw0MCw1MCw1MCw4MCkNCmVzdGF0dXMgPC0gYygxLDAsMCwwLDAsMSkNCmRmIDwtIGRhdGEuZnJhbWUoZXhhbWVuLHByb3llY3RvLGVzdGF0dXMpDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWUiPiBHZW5lcmFyIGxhIFJlZCBOZXVyb25hbCA8L3NwYW4+DQpgYGB7cn0NCnJlZF9uZXVyb25hbCA8LSBuZXVyYWxuZXQoZXN0YXR1c34uLCBkYXRhPSBkZikNCnBsb3QocmVkX25ldXJvbmFsLCByZXA9ImJlc3QiKQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gR2VuZXJhciBsYSBSZWQgTmV1cm9uYWwgPC9zcGFuPg0KYGBge3J9DQpwcnVlYmFfZXhhbWVuIDwtIGMoMzAsNDAsODUpDQpwcnVlYmFfcHJveWVjdG8gPC0gYyg4NSw1MCw0MCkNCnBydWViYSA8LSBkYXRhLmZyYW1lKHBydWViYV9leGFtZW4scHJ1ZWJhX3Byb3llY3RvKQ0KcHJlZGljY2lvbiA8LSBjb21wdXRlKHJlZF9uZXVyb25hbCxwcnVlYmEpDQpwcmVkaWNjaW9uJG5ldC5yZXN1bHQNCnByb2JhYmlsaWRhZCA8LSBwcmVkaWNjaW9uJG5ldC5yZXN1bHQNCnJlc3VsdGFkbyA8LSBpZmVsc2UocHJvYmFiaWxpZGFkID4gMC41LDEsMCkNCnJlc3VsdGFkbw0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gUHJhY3RpY2E6IENhbmNlciBkZSBNYW1hIDwvc3Bhbj4NCmBgYHtyfQ0KZGF0YSA8LSByZWFkLmNzdigiQzovVXNlcnMvY29yc2EvT25lRHJpdmUgLSBDT1JTQSBUcmFuc3BvcnRlcyBTQSBkZSBDVi9EZXNjYXJnYXMvY2FuY2VyX2RlX21hbWEgKDEpLmNzdiIpDQpgYGANCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gQ29udmVydGlyIGEgZmFjdG9yIDwvc3Bhbj4NCg0KYGBge3J9DQpkYXRhJGRpYWdub3NpcyA8LSBhcy5mYWN0b3IoZGF0YSRkaWFnbm9zaXMpDQpgYGANCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gUGFydGlyIGxvcyBkYXRvcyA8L3NwYW4+DQpgYGB7cn0NCiMgTm9ybWFsbWVudGUgODAtMjANCnNldC5zZWVkKDEyMykNCnJlbmdsb25lc19lbnRyZW5hbWllbnRvIDwtIGNyZWF0ZURhdGFQYXJ0aXRpb24oZGF0YSRkaWFnbm9zaXMscD0wLjgsbGlzdD1GQUxTRSkNCmVudHJlbmFtaWVudG8gPC0gZGF0YVtyZW5nbG9uZXNfZW50cmVuYW1pZW50bywgXQ0KcHJ1ZWJhIDwtIGRhdGFbLXJlbmdsb25lc19lbnRyZW5hbWllbnRvLCBdDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWUiPiBNb2RlbG8gQXJib2wgZGUgRGVjaXNpb24gPC9zcGFuPg0KYGBge3J9DQptb2RlbG80IDwtIHRyYWluKGRpYWdub3NpcyB+IC4sIGRhdGE9ZW50cmVuYW1pZW50bywgDQogICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJycGFydCIsDQogICAgICAgICAgICAgICAgIHByZVByb2Nlc3MgPSBjKCJzY2FsZSIsImNlbnRlciIpLA0KICAgICAgICAgICAgICAgICB0ckNvbnRyb2wgPSB0cmFpbkNvbnRyb2wobWV0aG9kPSJjdiIsbnVtYmVyPTEwKSwNCiAgICAgICAgICAgICAgICAgdHVuZUxlbmd0aD0xMA0KICAgICAgICAgICAgICAgICApDQoNCnJlc3VsdGFkb19lbnRyZW5hbWllbnRvNCA8LSBwcmVkaWN0KG1vZGVsbzQsZW50cmVuYW1pZW50bykNCnJlc3VsdGFkb19wcnVlYmE0IDwtIHByZWRpY3QobW9kZWxvNCxwcnVlYmEpDQoNCiMgTWF0cml6IGRlIENvbmZ1c2nDs24NCiMgRXMgdW5hIHRhYmxhIGRlIGV2YWx1YWNpb24gcXVlIGRlc2dsb3NhIGVsIHJlbmRpbWllbnRvIGRlbCBtb2RlbG8gZGUgY2xhc2lmaWNhY2lvbi4NCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbiBkZWwgUmVzdWx0YWRvIGRlbCBFbnRyZW5hbWllbnRvDQptY3JlNCA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX2VudHJlbmFtaWVudG80LGVudHJlbmFtaWVudG8kZGlhZ25vc2lzKQ0KbWNyZTQNCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbiBkZWwgUmVzdWx0YWRvIGRlIFBydWViYTENCm1jcnA0IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fcHJ1ZWJhNCxwcnVlYmEkZGlhZ25vc2lzKQ0KbWNycDQNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZSI+IE1vZGVsbyBSZWRlcyBOZXVyb25hbGVzIDwvc3Bhbj4NCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQptb2RlbG81IDwtIHRyYWluKGRpYWdub3NpcyB+IC4sIGRhdGE9ZW50cmVuYW1pZW50bywgDQogICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJubmV0IiwNCiAgICAgICAgICAgICAgICAgcHJlUHJvY2VzcyA9IGMoInNjYWxlIiwiY2VudGVyIiksDQogICAgICAgICAgICAgICAgIHRyQ29udHJvbCA9IHRyYWluQ29udHJvbChtZXRob2Q9ImN2IixudW1iZXI9MTApDQogICAgICAgICAgICAgICAgICkNCg0KcmVzdWx0YWRvX2VudHJlbmFtaWVudG81IDwtIHByZWRpY3QobW9kZWxvNSxlbnRyZW5hbWllbnRvKQ0KcmVzdWx0YWRvX3BydWViYTUgPC0gcHJlZGljdChtb2RlbG81LHBydWViYSkNCg0KIyBNYXRyaXogZGUgQ29uZnVzacOzbg0KIyBFcyB1bmEgdGFibGEgZGUgZXZhbHVhY2lvbiBxdWUgZGVzZ2xvc2EgZWwgcmVuZGltaWVudG8gZGVsIG1vZGVsbyBkZSBjbGFzaWZpY2FjaW9uLg0KDQojIE1hdHJpeiBkZSBDb25mdXNpw7NuIGRlbCBSZXN1bHRhZG8gZGVsIEVudHJlbmFtaWVudG8NCm1jcmU1IDwtIGNvbmZ1c2lvbk1hdHJpeChyZXN1bHRhZG9fZW50cmVuYW1pZW50bzUsZW50cmVuYW1pZW50byRkaWFnbm9zaXMpDQojIG1jcmU1DQoNCiMgTWF0cml6IGRlIENvbmZ1c2nDs24gZGVsIFJlc3VsdGFkbyBkZSBQcnVlYmExDQptY3JwNSA8LSBjb25mdXNpb25NYXRyaXgocmVzdWx0YWRvX3BydWViYTUscHJ1ZWJhJGRpYWdub3NpcykNCm1jcnA1DQpgYGANCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlIj4gQ29uY2x1c2lvbiA8L3NwYW4+DQpQb2RlbW9zIHZlciBxdWUgZWwgbW9kZWxvIGNvbiBtYXlvciBwcmVjaXNpb24gZXMgZWwgZGUgcmVkZXMgbmV1cm9uYWxlcywgc3VwZXLDsyBwb3IgbXVjaG8gZWwgZGUgYXJib2wgZGUgZGVjaXNpb25lcy4gQXVucXVlIGFtYm9zIHNvbiBidWVub3MgbW9kZWxvcy4gDQo=