Redes Neuronales

0. Concepto

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

Ejemplos de aplicación de Redes Neuronales son:
1. La recomendación de contenido de Netflix.
2. El feed de Instagram o TikTok.
3. Determinar el número o letra escrito a mano.

1. Instalar paquetes y llamar librerías

# install.packages("neuralnet")
library(neuralnet)
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice

2. Base de datos

df <- read.csv("/Users/luisangel/Library/CloudStorage/OneDrive-InstitutoTecnologicoydeEstudiosSuperioresdeMonterrey/7th Season/M2/cancer_de_mama.csv")

3. Partir base de datos

set.seed(123)
renglones_entrenamiento <- createDataPartition(df$diagnosis,p=0.8, list=FALSE)
entrenamiento <- df[renglones_entrenamiento,]
prueba <- df[-renglones_entrenamiento,]

df$diagnosis <- ifelse(df$diagnosis=="M",1,0)

4. Generar la Red Neuronal

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

4. Predecir con la Red Neuronal

prediccion <- compute(red_neuronal, prueba)
prediccion$net.result
##          [,1]
## 13  0.3725861
## 14  0.3725861
## 15  0.3725861
## 17  0.3725861
## 22  0.3725861
## 26  0.3725861
## 30  0.3725861
## 45  0.3725861
## 46  0.3725861
## 49  0.3725861
## 51  0.3725861
## 62  0.3725861
## 68  0.3725861
## 69  0.3725861
## 71  0.3725861
## 84  0.3725861
## 89  0.3725861
## 96  0.3725861
## 100 0.3725861
## 109 0.3725861
## 118 0.3725861
## 120 0.3725861
## 130 0.3725861
## 132 0.3725861
## 134 0.3725861
## 138 0.3725861
## 141 0.3725861
## 144 0.3725861
## 147 0.3725861
## 148 0.3725861
## 151 0.3725861
## 162 0.3725861
## 163 0.3725861
## 166 0.3725861
## 169 0.3725861
## 173 0.3725861
## 189 0.3725861
## 204 0.3725861
## 213 0.3725861
## 217 0.3725861
## 229 0.3725861
## 233 0.3725861
## 240 0.3725861
## 245 0.3725861
## 247 0.3725861
## 248 0.3725861
## 258 0.3725861
## 260 0.3725861
## 265 0.3725861
## 267 0.3725861
## 269 0.3725861
## 270 0.3725861
## 278 0.3725861
## 280 0.3725861
## 282 0.3725861
## 283 0.3725861
## 284 0.3725861
## 285 0.3725861
## 289 0.3725861
## 291 0.3725861
## 293 0.3725861
## 294 0.3725861
## 295 0.3725861
## 319 0.3725861
## 324 0.3725861
## 335 0.3725861
## 336 0.3725861
## 348 0.3725861
## 350 0.3725861
## 351 0.3725861
## 353 0.3725861
## 362 0.3725861
## 365 0.3725861
## 366 0.3725861
## 368 0.3725861
## 376 0.3725861
## 385 0.3725861
## 394 0.3725861
## 395 0.3725861
## 400 0.3725861
## 402 0.3725861
## 407 0.3725861
## 409 0.3725861
## 412 0.3725861
## 414 0.3725861
## 417 0.3725861
## 423 0.3725861
## 424 0.3725861
## 436 0.3725861
## 439 0.3725861
## 445 0.3725861
## 457 0.3725861
## 474 0.3725861
## 477 0.3725861
## 481 0.3725861
## 487 0.3725861
## 495 0.3725861
## 497 0.3725861
## 508 0.3725861
## 509 0.3725861
## 510 0.3725861
## 512 0.3725861
## 514 0.3725861
## 520 0.3725861
## 525 0.3725861
## 533 0.3725861
## 541 0.3725861
## 543 0.3725861
## 550 0.3725861
## 551 0.3725861
## 556 0.3725861
## 559 0.3725861
## 565 0.3725861
probabilidad <- prediccion$net.result
resultado <- ifelse(probabilidad>0.5,1,0)
resultado
##     [,1]
## 13     0
## 14     0
## 15     0
## 17     0
## 22     0
## 26     0
## 30     0
## 45     0
## 46     0
## 49     0
## 51     0
## 62     0
## 68     0
## 69     0
## 71     0
## 84     0
## 89     0
## 96     0
## 100    0
## 109    0
## 118    0
## 120    0
## 130    0
## 132    0
## 134    0
## 138    0
## 141    0
## 144    0
## 147    0
## 148    0
## 151    0
## 162    0
## 163    0
## 166    0
## 169    0
## 173    0
## 189    0
## 204    0
## 213    0
## 217    0
## 229    0
## 233    0
## 240    0
## 245    0
## 247    0
## 248    0
## 258    0
## 260    0
## 265    0
## 267    0
## 269    0
## 270    0
## 278    0
## 280    0
## 282    0
## 283    0
## 284    0
## 285    0
## 289    0
## 291    0
## 293    0
## 294    0
## 295    0
## 319    0
## 324    0
## 335    0
## 336    0
## 348    0
## 350    0
## 351    0
## 353    0
## 362    0
## 365    0
## 366    0
## 368    0
## 376    0
## 385    0
## 394    0
## 395    0
## 400    0
## 402    0
## 407    0
## 409    0
## 412    0
## 414    0
## 417    0
## 423    0
## 424    0
## 436    0
## 439    0
## 445    0
## 457    0
## 474    0
## 477    0
## 481    0
## 487    0
## 495    0
## 497    0
## 508    0
## 509    0
## 510    0
## 512    0
## 514    0
## 520    0
## 525    0
## 533    0
## 541    0
## 543    0
## 550    0
## 551    0
## 556    0
## 559    0
## 565    0

5. Conclusiones

En este ejercicio, exploramos el uso de redes neuronales en R, utilizando el paquete neuralnet, logramos entrenar y evaluar un modelo de una pequeña muestra de datos. Los resultados obtenidos indican que, las redes neuronales pueden ser herramientas poderosas para tareas de predicción.

LS0tCnRpdGxlOiAiUmVkZXMgTmV1cm9uYWxlcyBDYW5jZXIgZGUgbWFtYSIKYXV0aG9yOiAiTHVpcyBBbmdlbCBEaWF6IgpkYXRlOiAiMjAyNC0wOC0xNSIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKICAgIHRoZW1lOiAiam91cm5hbCIKICAgIGhpZ2hsaWdodDogInB5Z21lbnRzIgotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpCmBgYAoKIVtdKC9Vc2Vycy9sdWlzYW5nZWwvTGlicmFyeS9DbG91ZFN0b3JhZ2UvT25lRHJpdmUtSW5zdGl0dXRvVGVjbm9sb2dpY295ZGVFc3R1ZGlvc1N1cGVyaW9yZXNkZU1vbnRlcnJleS83dGggU2Vhc29uL00yL3Jvc2EuZ2lmKQoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IHB1cnBsZTsiPlJlZGVzIE5ldXJvbmFsZXM8L3NwYW4+CgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHB1cnBsZTsiPjAuIENvbmNlcHRvPC9zcGFuPgpVbmEgUmVkIE5ldXJhbCBBcnRpZmljaWFsIChBTk4pIG1vZGVsYSBsYSByZWxhY2nDs24gZW50cmUgdW4gY29uanVudG8gZGUgZW50cmFkYXMgeSB1bmEgc2FsaWRhLCByZXNvbHZpZW5kbyB1biBwcm9ibGVtYSBkZSBhcHJlbmRpemFqZS4gIAoKRWplbXBsb3MgZGUgYXBsaWNhY2nDs24gZGUgUmVkZXMgTmV1cm9uYWxlcyBzb246ICAKMS4gTGEgcmVjb21lbmRhY2nDs24gZGUgY29udGVuaWRvIGRlIE5ldGZsaXguICAKMi4gRWwgZmVlZCBkZSBJbnN0YWdyYW0gbyBUaWtUb2suICAKMy4gRGV0ZXJtaW5hciBlbCBuw7ptZXJvIG8gbGV0cmEgZXNjcml0byBhIG1hbm8uICAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcHVycGxlOyI+MS4gSW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hczwvc3Bhbj4KYGBge3J9CiMgaW5zdGFsbC5wYWNrYWdlcygibmV1cmFsbmV0IikKbGlicmFyeShuZXVyYWxuZXQpCmxpYnJhcnkoY2FyZXQpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBwdXJwbGU7Ij4yLiBCYXNlIGRlIGRhdG9zPC9zcGFuPgpgYGB7cn0KZGYgPC0gcmVhZC5jc3YoIi9Vc2Vycy9sdWlzYW5nZWwvTGlicmFyeS9DbG91ZFN0b3JhZ2UvT25lRHJpdmUtSW5zdGl0dXRvVGVjbm9sb2dpY295ZGVFc3R1ZGlvc1N1cGVyaW9yZXNkZU1vbnRlcnJleS83dGggU2Vhc29uL00yL2NhbmNlcl9kZV9tYW1hLmNzdiIpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBwdXJwbGU7Ij4zLiBQYXJ0aXIgYmFzZSBkZSBkYXRvczwvc3Bhbj4KYGBge3J9CnNldC5zZWVkKDEyMykKcmVuZ2xvbmVzX2VudHJlbmFtaWVudG8gPC0gY3JlYXRlRGF0YVBhcnRpdGlvbihkZiRkaWFnbm9zaXMscD0wLjgsIGxpc3Q9RkFMU0UpCmVudHJlbmFtaWVudG8gPC0gZGZbcmVuZ2xvbmVzX2VudHJlbmFtaWVudG8sXQpwcnVlYmEgPC0gZGZbLXJlbmdsb25lc19lbnRyZW5hbWllbnRvLF0KCmRmJGRpYWdub3NpcyA8LSBpZmVsc2UoZGYkZGlhZ25vc2lzPT0iTSIsMSwwKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcHVycGxlOyI+NC4gR2VuZXJhciBsYSBSZWQgTmV1cm9uYWw8L3NwYW4+CmBgYHtyfQpyZWRfbmV1cm9uYWwgPC0gbmV1cmFsbmV0KGRpYWdub3Npc34uLCBkYXRhPWRmKQpwbG90KHJlZF9uZXVyb25hbCwgcmVwID0gImJlc3QiKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcHVycGxlOyI+NC4gUHJlZGVjaXIgY29uIGxhIFJlZCBOZXVyb25hbDwvc3Bhbj4KYGBge3J9CnByZWRpY2Npb24gPC0gY29tcHV0ZShyZWRfbmV1cm9uYWwsIHBydWViYSkKcHJlZGljY2lvbiRuZXQucmVzdWx0CnByb2JhYmlsaWRhZCA8LSBwcmVkaWNjaW9uJG5ldC5yZXN1bHQKcmVzdWx0YWRvIDwtIGlmZWxzZShwcm9iYWJpbGlkYWQ+MC41LDEsMCkKcmVzdWx0YWRvCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBwdXJwbGU7Ij41LiBDb25jbHVzaW9uZXM8L3NwYW4+CgpFbiBlc3RlIGVqZXJjaWNpbywgZXhwbG9yYW1vcyBlbCB1c28gZGUgcmVkZXMgbmV1cm9uYWxlcyBlbiBSLCB1dGlsaXphbmRvIGVsIHBhcXVldGUgbmV1cmFsbmV0LCBsb2dyYW1vcyBlbnRyZW5hciB5IGV2YWx1YXIgdW4gbW9kZWxvIGRlIHVuYSBwZXF1ZcOxYSBtdWVzdHJhIGRlIGRhdG9zLiBMb3MgcmVzdWx0YWRvcyBvYnRlbmlkb3MgaW5kaWNhbiBxdWUsIGxhcyByZWRlcyBuZXVyb25hbGVzIHB1ZWRlbiBzZXIgaGVycmFtaWVudGFzIHBvZGVyb3NhcyBwYXJhIHRhcmVhcyBkZSBwcmVkaWNjacOzbi4K