Saltar al contenido

Regresión lineal, lazo y cresta con R

La regresión de cresta es una extensión de la regresión lineal en la que la función de pérdida se modifica para minimizar la complejidad del modelo. Esta modificación se hace añadiendo un parámetro de penalización que equivale al cuadrado de la magnitud de los coeficientes.

Función de pérdida = OLS + alfa * suma (valores de coeficientes cuadrados)

Regresión lineal, lazo y cresta con R
Regresión lineal, lazo y cresta con R

La regresión de la cresta también se conoce como l2 regularización . Las siguientes líneas de código construyen un modelo de regresión de la cresta. La primera línea carga la biblioteca, mientras que las dos líneas siguientes crean las matrices de datos de la regularización para las variables independientes (x) y dependientes (y).

El mismo paso se repite para el conjunto de datos de la prueba en la cuarta y quinta línea de código. La sexta línea crea una lista de valores lambda para que el modelo lo pruebe, mientras que la séptima línea construye el modelo de regresión de la cresta.

Los argumentos utilizados en el modelo son:

  1. nlambda: determina el número de parámetros de regularización a probar.
  2. alfa: determina la ponderación a utilizar. En caso de regresión de la cresta, el valor de alfa es cero.
  3. familia: determina la familia de distribución que se utilizará. Como este es un modelo de regresión, usaremos la distribución Gaussiana.
  4. lambda: determina los valores de lambda a ser probados.

La última línea de código imprime la información del modelo.

123456789101112biblioteca(glmnet)x = as.matrix(maniquíes_de_tren)y_tren = train$unemployx_test = as.matrix(maniquíes_de_prueba)y_test = test$unemploylambdas <- 10^seq(2, -3, por = -. 1)ridge_reg = glmnet(x, y_train, nlambda = 25, alpha = 0, family = $0027gaussian$0027, lambda = lambdas)summary(ridge_reg)

{r}

Salida:

12345678910111213 Modo de clase de longitud a0 51 -none- numericbeta 204 dgCMatrix S4 df 51 -none- numericdim 2 -none- numericlambda 51 -none- numericdev.ratio 51 -none- numericnulldev 1 -none- numericnpasses 1 -none- numericjerr 1 -none- numericoffset 1 -none- logicalcall 7 -none- call nobs 1 -none- numeric

Una de las principales diferencias entre los modelos de regresión lineal y regularizada es que este último implica la puesta a punto de un hiperparámetro, lambda. El código anterior ejecuta el modelo glmnet() varias veces para diferentes valores de lambda. Podemos automatizar esta tarea de encontrar el valor óptimo de lambda usando la función cv.glmnet(). Esto se realiza utilizando las líneas de código de abajo.

123cv_ridge <- cv.glmnet(x, y_train, alpha = 0, lambda = lambdas)optimal_lambda <- cv_ridge$lambda.minoptimal_lambda

{r}

Salida:

1[1] 0.001

El valor óptimo de lambda resulta ser 0,001 y se utilizará para construir el modelo de regresión de la cresta. También crearemos una función para calcular e imprimir los resultados, lo cual se hace con la función eval_results() en el siguiente código. El siguiente paso es utilizar la función de predicción para generar predicciones sobre el tren y los datos de la prueba. Finalmente, usamos la función eval_results para calcular e imprimir las métricas de evaluación.

1234567891011121314151617181920212223# Calcular R^2 a partir de valores verdaderos y predichoseval_results <- function(true, predicted, df) { SSE <- sum((predicted - true)^2) SST <- sum((true - mean(true))^2) R_square <- 1 - SSE / SST RMSE = sqrt(SSE/nrow(df)) # Métrica de rendimiento del modelo. frame( RMSE = RMSE, Rsquare = R_square) }# Predicción y evaluación en el tren datapredictions_train < - predict(ridge_reg, s = optimal_lambda, newx = x)eval_results(y_train, predictions_train, train)# Predicción y evaluación en test datapredictions_test <- predict(ridge_reg, s = optimal_lambda, newx = x_test)eval_results(y_test, predictions_test, test)

{r}

Salida:

1234 RMSE Rsquare1 0.9383428 0.8539379 RMSE Rsquare1 1.102452 0.8669624

El resultado anterior muestra que los valores RMSE y R-cuadrado del modelo de regresión de cresta en los datos de entrenamiento son 0,93 millones y 85,4 por ciento, respectivamente. Para los datos de la prueba, los resultados de estas métricas son 1,1 millones y 86,7 por ciento, respectivamente. Hay una mejora en el rendimiento en comparación con el modelo de regresión lineal.