35 votos

¿Por qué glmnet utiliza el "ingenuo" elastic net del artículo original de Zou & Hastie?

El documento original de elastic net Zou & Hastie (2005) Regularization and variable selection via the elastic net introdujo la función de pérdida elastic net para regresión lineal (aquí asumo que todas las variables están centradas y escaladas a varianza unitaria): $$\mathcal L = \frac{1}{n}\big\lVert y - X\beta\big\rVert^2 + \lambda_1\lVert \beta\rVert_1 + \lambda_2 \lVert \beta\rVert^2_2,$$ pero lo llamaron "naive elastic net". Argumentaron que realiza una doble contracción (lasso y ridge), tiende a contraer en exceso, y puede mejorarse al reescalar la solución resultante de la siguiente manera: $$\hat\beta^* = (1+\lambda_2)\hat\beta.$$ Dieron algunos argumentos teóricos y evidencia experimental de que esto conduce a un mejor rendimiento.

Sin embargo, el posterior artículo de glmnet Friedman, Hastie, & Tibshirani (2010) Regularization paths for generalized linear models via coordinate descent no utilizó este reescalado y solo tuvo una breve nota al pie que decía

Zou y Hastie (2005) llamaron a esta penalización el elastic net ingenuo, y prefirieron una versión reescalada que llamaron elastic net. Nosotros eliminamos esta distinción aquí.

No se da una explicación adicional allí (ni en ninguno de los libros de Hastie et al.). Encuentro esto algo desconcertante. ¿Los autores dejaron fuera el reescalado porque lo consideraron demasiado ad hoc? ¿porque funcionó peor en algunos experimentos posteriores? ¿porque no estaba claro cómo generalizarlo al caso del GLM? No tengo ni idea. Pero en cualquier caso, el paquete glmnet se volvió muy popular desde entonces y así que mi impresión es que hoy en día nadie está usando el reescalado de Zou & Hastie, y la mayoría probablemente ni siquiera está al tanto de esta posibilidad.

Pregunta: después de todo, ¿fue este reescalado una buena idea o una mala idea?

Con la parametrización de glmnet, el reescalado de Zou & Hastie debería ser $$\hat\beta^* = \big(1+\lambda(1-\alpha)\big)\hat\beta.$$

1 votos

Dado que en el documento glment, el objetivo es ajustar todo el camino de regularización, ¿posiblemente la idea es que el reescalado sería simplemente una transformación monótona del camino?

1 votos

@MatthewDrury Eso es cierto, pero si Friedman et al. creían que reescalar es una buena idea, no lo habrían dejado fuera del documento y en particular del código glmnet. No está disponible allí ni siquiera como una función opcional (su código anterior que acompañaba el documento de 2005, por supuesto, soporta el reescalado).

4 votos

Lamentablemente, el código público de glmnet es completamente ilegible...

33voto

zowens Puntos 1417

Envié esta pregunta a Zou y a Hastie y recibí la siguiente respuesta de Hastie (espero que no le importe que la cite aquí):

Creo que en Zou et al estábamos preocupados por el sesgo adicional, pero por supuesto que el reescalado aumenta la varianza. Así que simplemente desplaza uno a lo largo de la curva de intercambio de sesgo-varianza. Pronto incluiremos una versión de lasso relajado que es una mejor forma de reescalado.

Interpreto estas palabras como un respaldo de algún tipo de "reescalado" de la solución de elastic net convencional, pero Hastie parece no respaldar más el enfoque particular propuesto en Zou & Hastie 2005.


A continuación revisaré y compararé brevemente varias opciones de reescalado.

Usaré la parametrización de glmnet de la pérdida $$\mathcal L = \frac{1}{2n}\big\lVert y - \beta_0-X\beta\big\rVert^2 + \lambda\big(\alpha\lVert \beta\rVert_1 + (1-\alpha) \lVert \beta\rVert^2_2/2\big),$$ con la solución denotada como $\hat\beta$.

  1. El enfoque de Zou & Hastie consiste en usar $$\hat\beta_\text{rescaled} = \big(1+\lambda(1-\alpha)\big)\hat\beta.$$ Nótese que esto produce un reescalado no trivial para el puro ridge cuando $\alpha=0$, lo cual argumentablemente no tiene mucho sentido. Por otro lado, esto no produce ningún reescalado para el puro lasso cuando $\alpha=1$, a pesar de varias afirmaciones en la literatura de que el estimador lasso podría beneficiarse de algún reescalado (ver abajo).

  2. Para el puro lasso, Tibshirani sugirió usar un híbrido lasso-OLS, es decir, usar el estimador OLS utilizando el subconjunto de predictores seleccionado por lasso. Esto hace que el estimador sea consistente (pero deshace la contracción, lo cual puede aumentar el error esperado). Se puede usar el mismo enfoque para elastic net $$\hat\beta_\text{elastic-OLS-hybrid}= \text{OLS}(X_i\mid\hat\beta_i\ne 0)$$ pero el problema potencial es que elastic net puede seleccionar más de $n$ predictores y OLS fallará (en contraste, el lasso puro nunca selecciona más de $n$ predictores).

  3. El lasso relajado mencionado en el correo electrónico de Hastie citado anteriormente es una sugerencia de correr otro lasso en el subconjunto de predictores seleccionados por el primer lasso. La idea es utilizar dos penalizaciones diferentes y seleccionar ambos a través de validación cruzada. Se podría aplicar la misma idea a elastic net, pero parecería requerir cuatro parámetros de regularización diferentes y ajustarlos sería una pesadilla.

    Sugiero un esquema de elastic net relajado más simple: después de obtener $\hat\beta$, realizar una regresión ridge con $\alpha=0$ y el mismo $\lambda$ en el subconjunto seleccionado de predictores: $$\hat\beta_\text{relaxed-elastic-net}= \text{Ridge}(X_i\mid\hat\beta_i\ne 0).$$ Esto (a) no requiere parámetros de regularización adicionales, (b) funciona para cualquier número de predictores seleccionados, y (c) no hace nada si uno comienza con puro ridge. Suena bien para mí.

Actualmente estoy trabajando con un conjunto de datos pequeño $n\ll p$ con $n=44$ y $p=3000$, donde $y$ está bien predicho por los primeros PCs de $X$. Compararé el rendimiento de los estimadores anteriores utilizando validación cruzada repetida 100 veces en 11 subconjuntos. Como métrica de rendimiento, estoy utilizando el error de prueba, normalizado para producir algo similar a un R-cuadrado: $$R^2_\text{test} = 1-\frac{\lVert y_\text{test} - \hat\beta_0 - X_\text{test}\hat\beta\rVert^2}{\lVert y_\text{test} - \hat\beta_0\rVert^2}.$$ En la figura de abajo, las líneas punteadas corresponden al estimador de elastic net convencional $\hat\beta$ y los tres subgráficos corresponden a los tres enfoques de reescalado:

Introducir descripción de la imagen aquí

Entonces, al menos en estos datos, los tres enfoques superan al estimador de elastic net convencional, y "elastic net relajado" es el que mejor rendimiento tiene.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X