Redes neuronales multicapa en programación R

Una serie o conjunto de algoritmos que intentan reconocer la relación subyacente en un conjunto de datos a través de un proceso definido que imita el funcionamiento del cerebro humano se conoce como Red Neural . Por lo tanto, las redes neuronales podrían referirse a las neuronas del ser humano, ya sean de naturaleza artificial u orgánica. Una red neuronal puede adaptarse fácilmente a la entrada cambiante para lograr o generar el mejor resultado posible para la red y no necesita rediseñar los criterios de salida.

Tipos de red neuronal

Las redes neuronales se pueden clasificar en varios tipos según sus capas y filtros de activación de profundidad, estructura, neuronas utilizadas, densidad de neuronas, flujo de datos, etc. Los tipos de Redes Neuronales son los siguientes: 

  • perceptrón
  • Perceptrón multicapa o red neuronal multicapa
  • Redes neuronales de avance
  • Redes neuronales convolucionales
  • Función de base radial Redes neuronales
  • Redes neuronales recurrentes
  • Modelo de secuencia a secuencia
  • Red neuronal modular

Red neuronal multicapa

Para ser precisos, una red neuronal multicapa totalmente conectada se conoce como perceptrón multicapa. Una red neuronal multicapa consta de múltiples capas de neuronas o Nodes artificiales. A diferencia de las redes neuronales de una sola capa, en los últimos tiempos la mayoría de las redes tienen redes neuronales de varias capas. El siguiente diagrama es una visualización de una red neuronal multicapa.

multi-layer-neural-network

Explicación:  Aquí los Nodes marcados como «1» se conocen como unidades de polarización . La capa más a la izquierda o Capa 1 es la capa de entrada , la capa intermedia o Capa 2 es la capa oculta y la capa más a la derecha o Capa 3 es la capa de salida . Puede decir que el diagrama anterior tiene 3 unidades de entrada (dejando la unidad de polarización), 1 unidad de salida y 4 unidades ocultas (no se incluye 1 unidad de polarización).

Una red neuronal multicapa es un ejemplo típico de la red neuronal de avance . El número de neuronas y el número de capas consiste en los hiperparámetros de las redes neuronales que necesitan ajuste. Para encontrar valores ideales para los hiperparámetros, se deben usar algunas técnicas de validación cruzada. Mediante la técnica Back-Propagation se realiza un entrenamiento de ajuste de peso.

Fórmula para red neuronal multicapa

Supongamos que tenemos x n entradas (x 1 , x 2 ….x n ) y una unidad de polarización. Deje que el peso aplicado sea w 1 , w 2 …..w n. Luego encuentre la unidad de suma y sesgo al realizar el producto escalar entre entradas y pesos como: 

r = Σmi=1 wixi + bias

Al introducir r en la función de activación F(r), encontramos la salida para las capas ocultas. Para la primera capa oculta h 1 , la neurona se puede calcular como:  

h11 = F(r)

Para todas las demás capas ocultas, repita el mismo procedimiento. Siga repitiendo el proceso hasta llegar al último peso establecido. 

Implementación de una red neuronal multicapa en R

En R Language , instale el paquete neuralnet para trabajar en los conceptos de Neural Network. El paquete de red neuronal exige una array o marco de datos totalmente numérico. Controle las capas ocultas mencionando el valor contra el parámetro oculto de la función neuralnet() que puede ser un vector para muchas capas ocultas. Utilice la función set.seed() cada vez que genere números aleatorios.

Ejemplo: Use el paquete de neuralnet para ajustar un modelo lineal. Veamos los pasos para ajustar una red neuronal multicapa en R.

Paso 1: El primer paso es elegir el conjunto de datos. Aquí, en este ejemplo, trabajemos en el conjunto de datos de Boston del paquete MASS . Este conjunto de datos generalmente se ocupa de los valores de las viviendas en las afueras o los suburbios de Boston. El objetivo es encontrar los valores medv o mediana de las casas ocupadas por su propietario utilizando todas las demás variables continuas disponibles. Utilice la función set.seed() para generar números aleatorios. 

r

set.seed(500)
library(MASS)
data <- Boston

Paso 2: Luego verifique si faltan valores o puntos de datos en el conjunto de datos. Si los hay, arregle los puntos de datos que faltan. 

r

apply(data, 2, function(x) sum(is.na(x)))

Producción: 

crim      zn   indus    chas     nox      rm     age     dis     rad     tax ptratio   black   lstat    medv 
  0       0       0       0       0       0       0       0       0       0       0       0       0       0 

Paso 3: Dado que no faltan puntos de datos, proceda a preparar el conjunto de datos . Ahora divida aleatoriamente los datos en dos conjuntos, Conjunto de entrenamiento y Conjunto de prueba. Al preparar los datos, intente ajustar los datos en un modelo de regresión lineal y luego pruébelos en el conjunto de prueba.

r

index <- sample(1 : nrow(data),
                round(0.75 * nrow(data)))
train <- data[index, ]
test <- data[-index, ]
lm.fit <- glm(medv~., data = train)
summary(lm.fit)
pr.lm <- predict(lm.fit, test)
MSE.lm <- sum((pr.lm - test$medv)^2) / nrow(test)

Producción:

Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-14.9143   -2.8607   -0.5244    1.5242   25.0004  

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  43.469681   6.099347   7.127 5.50e-12 ***
crim         -0.105439   0.057095  -1.847 0.065596 .  
zn            0.044347   0.015974   2.776 0.005782 ** 
indus         0.024034   0.071107   0.338 0.735556    
chas          2.596028   1.089369   2.383 0.017679 *  
nox         -22.336623   4.572254  -4.885 1.55e-06 ***
rm            3.538957   0.472374   7.492 5.15e-13 ***
age           0.016976   0.015088   1.125 0.261291    
dis          -1.570970   0.235280  -6.677 9.07e-11 ***
rad           0.400502   0.085475   4.686 3.94e-06 ***
tax          -0.015165   0.004599  -3.297 0.001072 ** 
ptratio      -1.147046   0.155702  -7.367 1.17e-12 ***
black         0.010338   0.003077   3.360 0.000862 ***
lstat        -0.524957   0.056899  -9.226  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 23.26491)

    Null deviance: 33642  on 379  degrees of freedom
Residual deviance:  8515  on 366  degrees of freedom
AIC: 2290

Number of Fisher Scoring iterations: 2

Paso 4: ahora normalice el conjunto de datos antes de entrenar una red neuronal. Por lo tanto, escalar y dividir los datos. La función scale() devuelve una array que debe ser forzada en el marco de datos. 

r

maxs <- apply(data, 2, max)
mins <- apply(data, 2, min)
scaled <- as.data.frame(scale(data,
                              center = mins,
                              scale = maxs - mins))
train_ <- scaled[index, ]
test_ <- scaled[-index, ]

Paso 5: ahora ajuste los datos en la red neuronal. Usa el paquete neuralnet .

r

library(neuralnet)
n <- names(train_)
f <- as.formula(paste("medv ~",
                paste(n[!n %in% "medv"],
                collapse = " + ")))
nn <- neuralnet(f,
               data = train_,
               hidden = c(4, 2),
               linear.output = T)

Ahora nuestro modelo está ajustado a la red neuronal multicapa. Ahora combine todos los pasos y también trace la red neuronal para visualizar el resultado. Use la función plot() para hacerlo. 

r

# R program to illustrate
# Multi Layered Neural Networks
 
# Use the set.seed() function
# To generate random numbers
set.seed(500)
 
# Import required library
library(MASS)
 
# Working on the Boston dataset
data <- Boston
apply(data, 2, function(x) sum(is.na(x)))
index <- sample(1 : nrow(data),
                round(0.75 * nrow(data)))
train <- data[index, ]
test <- data[-index, ]
lm.fit <- glm(medv~., data = train)
summary(lm.fit)
pr.lm <- predict(lm.fit, test)
MSE.lm <- sum((pr.lm - test$medv)^2) / nrow(test)
maxs <- apply(data, 2, max)
mins <- apply(data, 2, min)
scaled <- as.data.frame(scale(data,
                              center = mins,
                              scale = maxs - mins))
train_ <- scaled[index, ]
test_ <- scaled[-index, ]
 
# Applying Neural network concepts
library(neuralnet)
n <- names(train_)
f <- as.formula(paste("medv ~",
                       paste(n[!n %in% "medv"],
                       collapse = " + ")))
nn <- neuralnet(f, data = train_,
                   hidden = c(4, 2),
                   linear.output = T)
 
# Plotting the graph
plot(nn)

Producción: 

graph-output

Publicación traducida automáticamente

Artículo escrito por shaonim8 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *