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
# install.packages("neuralnet")
library(neuralnet)
# install.packages("caret") # Algortimos de aprendizaje automático
library(caret)
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)
red_neuronal <- neuralnet(estatus~., data=df)
plot(red_neuronal, rep="best")
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.3334164
## [2,] 0.3334164
## [3,] 0.3334164
probabilidad <- prediccion$net.result
resultado <- ifelse(probabilidad>0.5,1,0)
resultado
## [,1]
## [1,] 0
## [2,] 0
## [3,] 0
df1 <- read.csv("/Users/ximenabbm/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
red_neuronal <- neuralnet(df1_scaled$diagnosis ~ ., data=df1_scaled,
hidden=c(10,5), linear.output=FALSE)
plot(red_neuronal, rep="best")
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 0
## 193 0
## 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 0
## 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 0
## 434 1
## 437 0
## 453 1
## 454 0
## 466 0
## 481 0
## 484 0
## 487 0
## 492 0
## 510 1
## 515 0
## 518 1
## 520 0
## 522 1
## 529 0
## 531 1
## 532 1
## 541 0
## 545 0
## 547 0
## 551 0
## 554 0
## 556 1
## 557 0
## 558 1
## 560 1
## 561 1
## 562 0
## 564 1
mcrp <- confusionMatrix(
as.factor(resultado),
as.factor(prueba$diagnosis)
)
mcrp
## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 50 2
## 1 10 51
##
## Accuracy : 0.8938
## 95% CI : (0.8218, 0.9439)
## No Information Rate : 0.531
## P-Value [Acc > NIR] : < 2e-16
##
## Kappa : 0.7887
##
## Mcnemar's Test P-Value : 0.04331
##
## Sensitivity : 0.8333
## Specificity : 0.9623
## Pos Pred Value : 0.9615
## Neg Pred Value : 0.8361
## Prevalence : 0.5310
## Detection Rate : 0.4425
## Detection Prevalence : 0.4602
## Balanced Accuracy : 0.8978
##
## 'Positive' Class : 0
##