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 son:

  • La recomendación de contenido de Netflix

  • El feed de Instagram o Tiktok

  • Determinar el nĆŗmero o letra escrito a mano

Calificaciones: Ejemplo Clase

Instalar paquetes y llamar librerĆ­as

# install.packages("neuralnet")
library(neuralnet)
library(caret)

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")

Predecir 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,] 0.3344104
## [2,] 0.3344104
## [3,] 0.3344104
probabilidad <- prediccion$net.result
resultado <- ifelse(probabilidad>0.5,1,0)
resultado
##      [,1]
## [1,]    0
## [2,]    0
## [3,]    0

CƔncer de mama

Importar la base de datos: cancer_de_mama

df1 <- read.csv("/Users/marielgarza/Downloads/cancer_de_mama.csv")
df1 <- data.frame(df1)
df1$diagnosis <- ifelse(df1$diagnosis == "M", 1, 0)
df1_scaled <- as.data.frame(scale(df1[ , !names(df1) %in% "diagnosis"]))
df1_scaled$diagnosis <- df1$diagnosis

Generar la Red Neuronal

red_neuronal <- neuralnet(df1_scaled$diagnosis ~ ., data=df1_scaled, 
                          hidden=c(10,5), linear.output=FALSE)
plot(red_neuronal, rep="best")

Predecir la Red Neuronal

set.seed(123)
renglones_entrenamiento <- createDataPartition(df1_scaled$diagnosis, p=0.8, list=FALSE) 
entrenamiento <- df1_scaled[renglones_entrenamiento, ]
prueba <- df1_scaled[-renglones_entrenamiento, ]
prediccion <- compute(red_neuronal, prueba[,-1])  
probabilidad <- prediccion$net.result             
resultado <- ifelse(probabilidad > 0.4, 1, 0) 
resultado
##     [,1]
## 1      1
## 9      1
## 15     1
## 17     1
## 18     1
## 28     1
## 35     1
## 44     1
## 46     1
## 56     0
## 58     1
## 60     0
## 65     1
## 68     0
## 71     1
## 79     1
## 82     1
## 86     1
## 95     1
## 99     0
## 101    1
## 109    1
## 124    0
## 133    1
## 138    0
## 140    0
## 142    1
## 157    1
## 162    1
## 171    0
## 173    1
## 183    1
## 188    0
## 189    1
## 193    1
## 201    1
## 203    1
## 206    0
## 207    0
## 216    1
## 220    1
## 227    0
## 233    0
## 240    1
## 242    0
## 247    0
## 251    1
## 256    1
## 259    1
## 261    1
## 262    1
## 275    1
## 284    1
## 293    0
## 296    0
## 303    1
## 305    0
## 317    0
## 318    1
## 320    1
## 323    0
## 329    1
## 332    0
## 340    1
## 341    0
## 352    1
## 354    1
## 358    0
## 359    0
## 369    1
## 370    1
## 371    1
## 375    0
## 386    1
## 387    0
## 394    1
## 400    0
## 405    0
## 407    0
## 412    0
## 417    1
## 418    1
## 429    0
## 432    1
## 434    1
## 437    0
## 453    0
## 454    0
## 466    0
## 481    0
## 484    0
## 487    0
## 492    0
## 510    1
## 515    0
## 518    1
## 520    0
## 522    1
## 529    1
## 531    1
## 532    0
## 541    0
## 545    0
## 547    0
## 551    0
## 554    1
## 556    1
## 557    0
## 558    1
## 560    1
## 561    1
## 562    0
## 564    1

Matriz de Confusión

mcrp <- confusionMatrix(
  as.factor(resultado),       
  as.factor(prueba$diagnosis) 
)

mcrp
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  0  1
##          0 46  2
##          1 14 51
##                                           
##                Accuracy : 0.8584          
##                  95% CI : (0.7803, 0.9168)
##     No Information Rate : 0.531           
##     P-Value [Acc > NIR] : 1.597e-13       
##                                           
##                   Kappa : 0.7194          
##                                           
##  Mcnemar's Test P-Value : 0.00596         
##                                           
##             Sensitivity : 0.7667          
##             Specificity : 0.9623          
##          Pos Pred Value : 0.9583          
##          Neg Pred Value : 0.7846          
##              Prevalence : 0.5310          
##          Detection Rate : 0.4071          
##    Detection Prevalence : 0.4248          
##       Balanced Accuracy : 0.8645          
##                                           
##        'Positive' Class : 0               
## 
LS0tCnRpdGxlOiAiUmVkZXMgTmV1cm9uYWxlcyIKYXV0aG9yOiAiTWFyaWVsIEdhcnphIEEwMTI4NTE3NSIKZGF0ZTogIjIwMjUtMDgtMjUiCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogVHJ1ZQogICAgdG9jX2Zsb2F0OiBUcnVlCiAgICBjb2RlX2Rvd25sb2FkOiBUcnVlCiAgICB0aGVtZTogInNwYWNlbGFiIgotLS0KPGNlbnRlcj4KIVtdKGh0dHBzOi8vaW1hZ2VzLnNxdWFyZXNwYWNlLWNkbi5jb20vY29udGVudC92MS81ZDBjNzQ1NDhjOGU4ZjAwMDFiZTczYmEvMTYyNTA5Mzc2ODIyMC1EWFdaUERJVFQzUkEyUTc3VlBPRi9ScmVkZXMrbmV1cm9uYWxlcytncmFmb3MuZ2lmKQo8L2NlbnRlcj4KCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPiBUZW9yw61hIDwvc3Bhbj4KVW5hICoqUmVkIE5ldXJvbmFsIEFydGlmaWNpYWwgKEFOTikqKiBtb2RlbGEgbGEgcmVsYWNpw7NuIGVudHJlIHVuIGNvbmp1bnRvIApkZSBlbnRyYWRhcyB5IHVuYSBzYWxpZGEsIHJlc29sdmllbmRvIHVuIHByb2JsZW1hIGRlIGFwcmVuZGl6YWplLgoKRWplbXBsb3MgcHLDoWN0aWNvcyBkZSBhcGxpY2FjacOzbiBkZSBSZWRlcyBOZXVyb25hbGVzIHNvbjoKCiogTGEgcmVjb21lbmRhY2nDs24gZGUgY29udGVuaWRvIGRlIE5ldGZsaXgKCiogRWwgZmVlZCBkZSBJbnN0YWdyYW0gbyBUaWt0b2sKCiogRGV0ZXJtaW5hciBlbCBuw7ptZXJvIG8gbGV0cmEgZXNjcml0byBhIG1hbm8KCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWU7Ij4gQ2FsaWZpY2FjaW9uZXM6IEVqZW1wbG8gQ2xhc2UgPC9zcGFuPgoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPiBJbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXLDrWFzIDwvc3Bhbj4KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBpbnN0YWxsLnBhY2thZ2VzKCJuZXVyYWxuZXQiKQpsaWJyYXJ5KG5ldXJhbG5ldCkKbGlicmFyeShjYXJldCkKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+IEFsaW1lbnRhciBjb24gZWplbXBsb3MgPC9zcGFuPgpgYGB7cn0KZXhhbWVuIDwtIGMoMjAsMTAsMzAsMjAsODAsMzApCnByb3llY3RvIDwtIGMoOTAsMjAsNDAsNTAsNTAsODApCmVzdGF0dXMgPC0gYygxLDAsMCwwLDAsMSkKZGYgPC0gZGF0YS5mcmFtZShleGFtZW4scHJveWVjdG8sZXN0YXR1cykKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+IEdlbmVyYXIgbGEgUmVkIE5ldXJvbmFsIDwvc3Bhbj4KYGBge3J9CnJlZF9uZXVyb25hbCA8LSBuZXVyYWxuZXQoZXN0YXR1c34uLCBkYXRhPWRmKQpwbG90KHJlZF9uZXVyb25hbCwgcmVwPSJiZXN0IikKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+IFByZWRlY2lyIGxhIFJlZCBOZXVyb25hbCA8L3NwYW4+CmBgYHtyfQpwcnVlYmFfZXhhbWVuIDwtIGMoMzAsNDAsODUpCnBydWViYV9wcm95ZWN0byA8LSBjKDg1LDUwLDQwKQpwcnVlYmEgPC0gZGF0YS5mcmFtZShwcnVlYmFfZXhhbWVuLCBwcnVlYmFfcHJveWVjdG8pCnByZWRpY2Npb24gPC0gY29tcHV0ZShyZWRfbmV1cm9uYWwsIHBydWViYSkKcHJlZGljY2lvbiRuZXQucmVzdWx0CnByb2JhYmlsaWRhZCA8LSBwcmVkaWNjaW9uJG5ldC5yZXN1bHQKcmVzdWx0YWRvIDwtIGlmZWxzZShwcm9iYWJpbGlkYWQ+MC41LDEsMCkKcmVzdWx0YWRvCmBgYAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZTsiPiBDw6FuY2VyIGRlIG1hbWEgPC9zcGFuPgoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWU7Ij4gSW1wb3J0YXIgbGEgYmFzZSBkZSBkYXRvczogY2FuY2VyX2RlX21hbWEgPC9zcGFuPgpgYGB7cn0KZGYxIDwtIHJlYWQuY3N2KCIvVXNlcnMvbWFyaWVsZ2FyemEvRG93bmxvYWRzL2NhbmNlcl9kZV9tYW1hLmNzdiIpCmRmMSA8LSBkYXRhLmZyYW1lKGRmMSkKZGYxJGRpYWdub3NpcyA8LSBpZmVsc2UoZGYxJGRpYWdub3NpcyA9PSAiTSIsIDEsIDApCmRmMV9zY2FsZWQgPC0gYXMuZGF0YS5mcmFtZShzY2FsZShkZjFbICwgIW5hbWVzKGRmMSkgJWluJSAiZGlhZ25vc2lzIl0pKQpkZjFfc2NhbGVkJGRpYWdub3NpcyA8LSBkZjEkZGlhZ25vc2lzCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPiBHZW5lcmFyIGxhIFJlZCBOZXVyb25hbCA8L3NwYW4+CmBgYHtyfQpyZWRfbmV1cm9uYWwgPC0gbmV1cmFsbmV0KGRmMV9zY2FsZWQkZGlhZ25vc2lzIH4gLiwgZGF0YT1kZjFfc2NhbGVkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49YygxMCw1KSwgbGluZWFyLm91dHB1dD1GQUxTRSkKcGxvdChyZWRfbmV1cm9uYWwsIHJlcD0iYmVzdCIpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPiBQcmVkZWNpciBsYSBSZWQgTmV1cm9uYWwgPC9zcGFuPgpgYGB7cn0Kc2V0LnNlZWQoMTIzKQpyZW5nbG9uZXNfZW50cmVuYW1pZW50byA8LSBjcmVhdGVEYXRhUGFydGl0aW9uKGRmMV9zY2FsZWQkZGlhZ25vc2lzLCBwPTAuOCwgbGlzdD1GQUxTRSkgCmVudHJlbmFtaWVudG8gPC0gZGYxX3NjYWxlZFtyZW5nbG9uZXNfZW50cmVuYW1pZW50bywgXQpwcnVlYmEgPC0gZGYxX3NjYWxlZFstcmVuZ2xvbmVzX2VudHJlbmFtaWVudG8sIF0KYGBgCgpgYGB7cn0KcHJlZGljY2lvbiA8LSBjb21wdXRlKHJlZF9uZXVyb25hbCwgcHJ1ZWJhWywtMV0pICAKcHJvYmFiaWxpZGFkIDwtIHByZWRpY2Npb24kbmV0LnJlc3VsdCAgICAgICAgICAgICAKcmVzdWx0YWRvIDwtIGlmZWxzZShwcm9iYWJpbGlkYWQgPiAwLjQsIDEsIDApIApyZXN1bHRhZG8KCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPiBNYXRyaXogZGUgQ29uZnVzacOzbiA8L3NwYW4+CmBgYHtyfQptY3JwIDwtIGNvbmZ1c2lvbk1hdHJpeCgKICBhcy5mYWN0b3IocmVzdWx0YWRvKSwgICAgICAgCiAgYXMuZmFjdG9yKHBydWViYSRkaWFnbm9zaXMpIAopCgptY3JwCmBgYAo=