Regularización Ridge en R

Autor: | Última modificación: 18 de abril de 2024 | Tiempo de Lectura: 3 minutos
Temas en este post:

Algunos de nuestros reconocimientos:

Premios KeepCoding

La regularización Ridge en R es bastante similar a la regularización Lasso. Ambas tienen algo en común: introducen un factor de penalización; no obstante, mientras la regularización Lasso toma la magnitud de los coeficientes del modelo, la regularización Ridge en R puede ajustar modelos tomando el cuadrado.

¿En qué consiste la regularización Ridge en R?

Ahora vamos a aplicar una regularización L2 o regularización Ridge en R, añadamos el término:

regularización ridge en R

De los coeficientes ẞ, no tenemos en cuenta la intersección. Ten en cuenta que:

  • Cuando λ → 0, entonces BRIDGE Boriginalmínimoscuadrados
  • Cuando λ → , entonces BRIDGE → 0

Tratamos de minimizar la suma de todos los demás:

In [ ] : lambda <- 10
#lambda <- 1000
loss_ridge <- function (beta) {
mean ((df$y - myfunction (df [ , c ('x1', 'x2', 'x3')], beta)) ^ 2) + lambda * sum (beta (c (2, 3, 4)] ^ 2)
}

x_historico <- optim_beta (myfunction, loss_ridge, maxiter = 1e4, delta = 0.0005)

In [33] : options (repr.plot.height = 4, repr.plot.width = 8)
library (ggplot2)

g1 <- ggplot (x_historico, aes (x = step)) + geom_line (aes (y = beta1), color = 'red') + theme (axis.text.x = element_text (angle = 45)) + geom_hline (yintercept = beta_real [1], color = 'black')
g2 <- ggplot (x_historico, aes (x = step)) + geom_line (aes (y = beta2), color = 'blue') + theme (axis.text.x = element_text (angle = 45)) + geom_hline (yintercept = beta_real [2],color = 'black")
g3 <- ggplot (x_historico, aes (x = step)) + geom_line (aes (y = beta3), color = 'green') + theme (axis.text.x = element_text (angle = 45)) + geom_hline (yintercept = beta real [3], color = 'black')

library (egg)
grid.arrange (g1, g2, g3, g4, nrow = 1)
gráfico

La regularización Ridge en R acerca los coeficientes de las variables más correlacionadas.

También podemos usar el paquete glmnet, en este caso con a=0, ya que utiliza la siguiente función de coste:

función
In [34] : library (glmnet)
model <- glmnet (as.matrix (df [ , c ('x1, x2, x3')]), as.matrix (df [, 'y']), lambda = 20, alpha = 0, standardize = F)
coefficients (model)

4 x 1 sparse Matrix of class «dgCMatrix»

s0

(Intercept) : 4.271284

x1 : 0.153316

x2 : -5.002668

x3 : 3.988487

In [ ] : fit <- glmnet (as.matrix (df [ , c ('x1, x2, x3)]), as.matrix (df [ , 'y' ]), alpha = 0, standardize = F)
par (mfrow = c (1, 3))
plot (fit, label = TRUE)
plot (fit, label = TRUE, xvar = "lambda")
plot (fit, label = TRUE, xvar = "dev")
grid ()
#print (fit)
gráfica 2
In [36] : cvfit <- cv.glmnet (as.matrix (df [ , c ('x1', 'x2', 'x3')]),
as.matrix (df [ , 'y']),
nfolds = 10, alpha = 0, standardize = F)
plot (cvfit)
gráfica 3

Siguiendo con el ejemplo de la regularización Ridge en R, el modelo que tiene un error cuadrático medio más bajo aparece en la variable cvfitSlambda.min.

El modelo que tiene un mayor valor de λ cuya varianza del error está dentro de 1 desviación típica del mínimo aparece en la variable cvfitSlambda. 1se.

Al hacer cross-validation, el MSE no será un valor único, sino que tendremos nfolds diferentes. De todos estos MSE podemos calcular la media y la desviación típica. El valor de lambda. 1 significa que el modelo más sencillo (A más alto) no se diferencia considerablemente del mínimo.

In [37] : cvfit$lambda.min
cvfitslambda.1se

170.653343234195

521.150651794727

In [ ] : coef(cvfit, s = "lambda.lse")

In [ ] : cvfit$gimnet.fit$dev.ratio [which (cvfit$glmnet.fit$lambda == cvfit$lambda.Ise)]

En resumen, para hacer una predicción Ridge con glmnet haríamos:

In [41] : cvfit <- cv.glmnet (as.matrix (df [ , c ('x1', 'x2', 'x3')]), as.matrix (dfl, 'y']), nfolds = 10, alpha = 0, standardize = F)
cvfit
cvfit$lambda.Ise
Regularización Ridge en R
In [ ] : df_test <- get_example_data_frame (n = 100)

df_test [ , c ("pred")] <- predict (cvfit, newx = as.matrix (df test [ , c ('x1', 'x2', 'x3')]) , s = cvfit$lambda.Ise)
head (df_test)
caret::postResample (df_test$y, df_test$pred)

x1x2x3ypred
<dbl><dbl><dbl><dbl><dbl [, 1]>
1-2.73790828.393723-14.879855-205.550223-188.330195
29.8563487.85731848.472010154.448127157.071228
34.514493-4.0543399.60632863.95454959.799378
4-7.0155916.995925-41.248978-203.017480-193.015263
51.8380408.6346108.515860-5.368973-4.458573
66.97471016.532167-3.598633-98.342603-85.151113

RMSE: 10.5959099900708

Rsquared: 0.988084053671031

MAE: 8.27069388317708

Sabemos que al principio cuesta entender esto de la regularización Ridge en R y todos sus ejemplos, sin embargo, es solo cuestión de práctica que te vuelvas un experto en ello y des el siguiente paso en el mundo del Big Data y el data mining.

¿Te gustó este post?

Recuerda que si quieres seguir aprendiendo sobre la regularización Ridge en R y otras temáticas relacionadas, en Keepcoding tenemos a los mejores profesionales para que te acompañen en tu proceso. Con el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, en unos pocos meses aprenderás todo lo necesario para incursionar en un mercado laboral lleno de oportunidades de empleo que te cambiarán la vida. ¡No sigas esperando para solicitar más información y cambia tu futuro ahora!

Posts Relacionados

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado