¿Cómo se utilizan las redes neuronales para la regresión en la programación R?

Las redes neuronales consisten en unidades simples de entrada/salida llamadas neuronas (inspiradas en las neuronas del cerebro humano). Estas unidades de entrada/salida están interconectadas y cada conexión tiene un peso asociado. Las redes neuronales son flexibles y se pueden utilizar tanto para la clasificación como para la regresión. En este artículo, veremos cómo se pueden aplicar las redes neuronales a problemas de regresión.

La regresión ayuda a establecer una relación entre una variable dependiente y una o más variables independientes. Los modelos de regresión funcionan bien solo cuando la ecuación de regresión se ajusta bien a los datos. La mayoría de los modelos de regresión no se ajustarán perfectamente a los datos. Aunque las redes neuronales son complejas y computacionalmente costosas, son flexibles y pueden elegir dinámicamente el mejor tipo de regresión , y si eso no es suficiente, se pueden agregar capas ocultas para mejorar la predicción. 

Implementación Stey by Step en R

Ahora construyamos una red neuronal en programación R que resuelva un problema de regresión. Usaremos el conjunto de datos de Boston para predecir el valor medio de las viviendas ocupadas por sus propietarios (por cada 1000 dólares). 

Paso 1: Cargue el conjunto de datos de la siguiente manera

R

# Import Required packages
set.seed(500)
library(neuralnet)
library(MASS)
  
# Boston dataset from MASS
data <- Boston

Paso 2: antes de introducir los datos en una red neuronal, es una buena práctica realizar la normalización. Hay varias formas de realizar la normalización. Usaremos el método min-max y escalaremos los datos en el intervalo [0,1]. Luego, los datos se dividen en conjuntos de entrenamiento (75 %) y de prueba (25 %).

R

# Normalize the data
maxs <- apply(data, 2, max) 
mins <- apply(data, 2, min)
scaled <- as.data.frame(scale(data, center = mins, 
                              scale = maxs - mins))
  
# Split the data into training and testing set
index <- sample(1:nrow(data), round(0.75 * nrow(data)))
train_ <- scaled[index,]
test_ <- scaled[-index,]

Paso 3: Ahora, podemos crear una red neuronal utilizando la red neuronalbiblioteca. Modifique los parámetros y calcule el error cuadrático medio (MSE) . Utilice los parámetros con el MSE mínimo. Usaremos dos capas ocultas que tienen 5 y 3 neuronas. El número de neuronas debe estar entre el tamaño de la capa de entrada y el tamaño de la capa de salida, generalmente 2/3 del tamaño de entrada. Sin embargo, modificar y probar la red neuronal, una y otra vez, es la mejor manera de encontrar los parámetros que mejor se ajusten a su modelo. Cuando se entrena esta red neuronal, realizará un descenso de gradiente para encontrar coeficientes que se ajusten a los datos hasta llegar a los pesos óptimos (en este caso, coeficientes de regresión) para el modelo.

R

# Build Neural Network
nn <- neuralnet(medv ~ crim + zn + indus + chas + nox 
                + rm + age + dis + rad + tax + 
                ptratio + black + lstat, 
                data = train_, hidden = c(5, 3), 
                linear.output = TRUE)
  
# Predict on test data
pr.nn <- compute(nn, test_[,1:13])
  
# Compute mean squared error
pr.nn_ <- pr.nn$net.result * (max(data$medv) - min(data$medv)) 
                                              + min(data$medv)
test.r <- (test_$medv) * (max(data$medv) - min(data$medv)) + 
                                              min(data$medv)
MSE.nn <- sum((test.r - pr.nn_)^2) / nrow(test_)
  
# Plot the neural network
plot(nn)

Producción:

 Neural Networks are used for Regression in R Programming Output

Paso 4: Podemos ver en el gráfico que las líneas negras muestran conexiones entre cada capa con sus pesos y las líneas azules muestran el sesgo agregado en cada paso. La red neuronal es esencialmente una caja negra, por lo que no podemos decir mucho sobre los pesos.

R

# Plot regression line
plot(test$medv, pr.nn_, col = "red", 
     main = 'Real vs Predicted')
abline(0, 1, lwd = 2)

Producción:

 Neural Networks are used for Regression in R Programming Output

Podemos ver que las predicciones (círculos rojos) realizadas por la red neuronal se concentran en general alrededor de la línea (una alineación perfecta con la línea indicaría un MSE de 0 y, por lo tanto, una predicción ideal).

Publicación traducida automáticamente

Artículo escrito por akshisaxena 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 *