Teoría

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

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

Instalar paquetes y llamar librerías

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

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 con la red neuronal

set.seed(123)
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.3993807
## [2,]  0.3993807
## [3,] -0.4420136
probabilidad <- prediccion$net.result
resultado <- ifelse(probabilidad > 0.5, 1, 0)
resultado
##      [,1]
## [1,]    0
## [2,]    0
## [3,]    0

Ejemplo Cancer de Mama

cancer <- read.csv("/Users/RigobertoGB/Desktop/Inteligencia Artificial con Impacto Empresarial/M2/Base de datos/cancer_de_mama.csv")

Crear factor

# M = 1 y B = 0 
cancer$diagnosis_factor <- factor(ifelse(cancer$diagnosis == "M", 1, 0),
                               levels = c(0, 1))

Partir la base de datos

#Normalmente 80-20
library(lattice)
library(caret)
## Loading required package: ggplot2
set.seed(123)  # para reproducibilidad
renglones_entrenamiento <- createDataPartition(cancer$diagnosis_factor, p=0.8, list=FALSE)

entrenamiento <- cancer[renglones_entrenamiento, ]
prueba_cancer <- cancer[-renglones_entrenamiento, ]

Red Neuronal Cancer

entrenamiento <- subset(entrenamiento, select = -diagnosis)
red_neuronal2 <- neuralnet(diagnosis_factor~.,data=entrenamiento)
plot(red_neuronal2, rep="best")

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