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")