Probemos si una RNA puede calcular probabilidades, sin saber la fórmula de como hacerlo. Por ejemplo, simula probabilidades de alguna distribución normal o distribución binomial y analiza que tan cerca puede estimar sus probabilidades
Ejemplos de datos simulados
set.seed(1234)
data <- data.frame(
x <- round(seq(-3,3,length=100),1),
y <- round(pnorm(x),4))
data$Hyp <- sqrt(data$x^2 + data$y^2)
head(data)
## x....round.seq..3..3..length...100...1. y....round.pnorm.x...4. Hyp
## 1 -3.0 0.0013 3.000000
## 2 -2.9 0.0019 2.900001
## 3 -2.9 0.0019 2.900001
## 4 -2.8 0.0026 2.800001
## 5 -2.8 0.0026 2.800001
## 6 -2.7 0.0035 2.700002
Los datos son divididos en 4 partes. De estas 4 partes 3 serán utilizadas para entrenamiento y 1 para prueba.
N <- nrow(data)
n <- round(N*0.75)
set.seed(1234)
indices <- sample(1:N,n)
entrenamiento <- data[indices,]
prueba <- data[-indices,]
Luego de dividir los datos, se entrena la red neuronal artificial
library(neuralnet)
RNA2 <- neuralnet(Hyp ~ x....round.seq..3..3..length...100...1. + y....round.pnorm.x...4., entrenamiento, hidden = 6, rep = 3)
plot(RNA2, rep = "best")
Una vez se tenga la red entrenada, se realizan nuevas entradas para asi poder obtener una predicción del resultado que debería aparecerde la función aprendida.
output <- compute(RNA2, prueba[ , c("x....round.seq..3..3..length...100...1.", "y....round.pnorm.x...4.")], rep = 1)
data.frame(
Real = round(prueba$Hyp,3),
Pred =round(output$net.result,3),
Error = round(abs(prueba$Hyp - output$net.result)/prueba$Hyp,3))
## Real Pred Error
## 11 2.400 2.412 0.005
## 13 2.300 2.313 0.006
## 15 2.200 2.214 0.006
## 18 2.000 2.013 0.006
## 24 1.601 1.602 0.001
## 30 1.206 1.187 0.015
## 33 1.108 1.087 0.020
## 34 1.013 0.989 0.023
## 36 0.919 0.896 0.025
## 39 0.741 0.728 0.018
## 44 0.528 0.547 0.035
## 53 0.613 0.591 0.036
## 55 0.687 0.663 0.035
## 59 0.853 0.845 0.010
## 61 0.942 0.944 0.003
## 68 1.399 1.402 0.002
## 69 1.399 1.402 0.002
## 74 1.675 1.659 0.009
## 75 1.767 1.749 0.010
## 82 2.134 2.130 0.002
## 83 2.226 2.229 0.001
## 87 2.411 2.425 0.006
## 95 2.878 2.880 0.001
## 97 2.972 2.960 0.004
## 100 3.162 3.106 0.018
Nota importante: averigua como agregar más de una capa oculta en la red neuronal.
RNA3 <- neuralnet(Hyp ~ x....round.seq..3..3..length...100...1. + y....round.pnorm.x...4., entrenamiento, hidden = c(4, 3))
plot(RNA3, rep = "best")