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.
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: