ElasticNet

ElasticNet combina las penalizaciones \(L_1\) (Lasso) y \(L_2\) (Ridge) en una sola función de pérdida. Hereda las ventajas de ambos: fuerza algunos coeficientes exactamente a cero como Lasso y agrupa predictores correlacionados como Ridge. Es el método de regularización más flexible cuando no se sabe a priori si el modelo verdadero es denso (muchos predictores pequeños) o disperso (pocos predictores grandes).

El estimador ElasticNet

\[\hat{\boldsymbol{\beta}}^{\text{EN}} = \arg\min_{\boldsymbol{\beta}} \left\{\|\mathbf{y} - \mathbf{X}\boldsymbol{\beta}\|^2 + \lambda\left[\alpha\|\boldsymbol{\beta}\|_1 + \frac{1-\alpha}{2}\|\boldsymbol{\beta}\|_2^2\right]\right\}\]

El parámetro \(\alpha \in [0,1]\) controla la mezcla:

  • \(\alpha = 1\): Lasso puro (selección de variables, puede ser inestable con predictores correlacionados).
  • \(\alpha = 0\): Ridge puro (encogimiento sin anular coeficientes).
  • \(\alpha \in (0,1)\): ElasticNet (selección de variables + agrupamiento).

Valores habituales: \(\alpha = 0{,}5\) para comenzar; afinar con validación cruzada en una rejilla de \(\alpha\).

El efecto de agrupamiento

La principal ventaja de ElasticNet sobre Lasso es el efecto de agrupamiento: cuando dos predictores \(x_j\) y \(x_k\) están altamente correlacionados, ElasticNet tiende a incluirlos o excluirlos juntos y asignarles coeficientes similares. Lasso puede seleccionar uno y excluir el otro de forma arbitraria, lo que dificulta la interpretación.

Tres gráficos de barras comparando los coeficientes seleccionados por Lasso, Ridge y ElasticNet con predictores correlacionados

Con \(x_1, x_2, x_3\) altamente correlacionados (los tres deberían tener coeficiente \(\approx 2\), en azul oscuro), Lasso suele elegir solo uno y anular los otros. ElasticNet los selecciona todos con coeficientes similares. Ridge los incluye todos pero con coeficientes más pequeños.

Selección de hiperparámetros: rejilla sobre alpha y lambda

ElasticNet tiene dos hiperparámetros: \(\alpha\) y \(\lambda\). La selección estándar usa una rejilla bidimensional con validación cruzada:

Mapa de calor del error de validación cruzada para una rejilla de valores de alpha y lambda en ElasticNet

Resumen: Ridge, Lasso y ElasticNet

Método Penalización Coeficientes a cero Predictores correlacionados
Ridge \(L_2\): \(\sum\beta_j^2\) No (solo se encogen) Agrupa, coeficientes similares
Lasso \(L_1\): \(\sum|\beta_j|\) Sí (selección automática) Selecciona uno, anula los demás
ElasticNet \(\alpha L_1 + (1-\alpha) L_2\) Sí (con \(\alpha > 0\)) Agrupa y selecciona

Cuándo usar cada uno: - Ridge: muchos predictores con efectos pequeños; gran multicolinealidad; el objetivo es predicción, no interpretabilidad. - Lasso: sospechas de dispersión (pocos predictores relevantes); se desea un modelo interpretable. - ElasticNet: grupos de predictores correlacionados; incertidumbre sobre la dispersión del modelo; número de predictores mayor que \(n\).

💡 ElasticNet en R

library(glmnet)

# ElasticNet con alpha fijo
cv_en <- cv.glmnet(X, y, alpha=0.5, nfolds=10)
coef(cv_en, s="lambda.min")
plot(cv_en)

# Búsqueda en rejilla de alpha y lambda
alphas <- seq(0, 1, by=0.1)
results <- sapply(alphas, function(a) {
  min(cv.glmnet(X, y, alpha=a, nfolds=10)$cvm)
})
best_alpha <- alphas[which.min(results)]

# Ajuste final con mejor alpha
cv_final <- cv.glmnet(X, y, alpha=best_alpha, nfolds=10)
coef(cv_final, s="lambda.min")