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:

Instalar paquetes y llamar librerías

#install.packages("neuralnet")
library(neuralnet)
library(caret)
## Cargando paquete requerido: ggplot2
## Cargando paquete requerido: lattice
library(ggplot2)
library(lattice)
library(rpart)
library(rpart.plot)

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

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

Cáncer de Mama

Importar base de datos

df <- read.csv("C:\\Users\\Adrián\\Downloads\\cancer_de_mama.csv")
df$diagnosis <- as.factor(df$diagnosis)

Dividir la 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)

Generar la Red Neuronal

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

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

Conclusiones

El uso de redes neuronales puede ser una alternativa en el caso de la elaboración predicciones a otro tipo de métodos de predicción como lo son los árboles de decisión o la regresión logística. Es importante evaluar y comparar entre diferentes modelos con la finalidad de identificar el modelo más óptimo para la elaboración de predicciones.