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