¿Cómo se calcula la intercepción en GLMnet?

8

He estado implementando la versión GLMNET de red elástica para regresión lineal con otro software que no sea R. Comparé mis resultados con la función R glmnet en modo lazo con datos de diabetes .

La selección de variables está bien cuando se varía el valor del parámetro (lambda) pero obtengo valores de coeficientes ligeramente diferentes. Por esta y otras razones, creo que proviene de la intercepción en el ciclo de actualización, cuando calculo el ajuste actual, porque no varío la intercepción (que tomo como la media de la variable objetivo) en todo el algoritmo: como explicado en el artículo de Trevor Hastie ( Rutas de regularización para modelos lineales generalizados a través del descenso coordinado , página 7, sección 2.6):

la intersección no está regularizada, [...] para todos los valores de [...] lambda [el parámetro de restricción L1]

Pero a pesar del artículo, la función R glmnet proporciona diferentes valores para la intercepción a lo largo de la ruta de regularización (los diferentes valores lambda). ¿Alguien tiene idea de cómo se calculan los valores de la intercepción?

yelh
fuente

Respuestas:

8

Descubrí que la intercepción en GLMnet se calcula después de que las nuevas actualizaciones de coeficientes hayan convergido. La intersección se calcula con los medios deyi's y la media de la xij's. La fórmula es similar a la anterior que di pero con elβjdespués del ciclo de actualización: β0=y¯j=1pβj^xj¯.

En python esto da algo como:

        self.intercept_ = ymean - np.dot(Xmean, self.coef_.T)

que encontré aquí en la página de scikit-learn.

EDITAR: los coeficientes deben estandarizarse antes de:

        self.coef_ = self.coef_ / X_std

β0=y¯j=1pβj^xj¯i=1nxij2.

yelh
fuente
Debo agregar que esta es una forma estándar de calcular la intersección, suponiendo que el modelo es lineal y que los errores tienen una media cero.
mpiktas
De hecho, sin embargo, los autores dijeron explícitamente en su artículo: β0=y¯ para todos los valores de α y λy, además, no dicen en qué punto del algoritmo se computa
yelh
Como los autores suponen que x¯=0entonces esto es cierto. Tenga en cuenta que al comienzo de la página 3, dicen que suponemos que los predictores están centrados, pero esto no es restrictivo, ya que los "... resultados se generalizan naturalmente ..." a un caso no confirmado. La fórmula que encuentras es esta generalización natural.
mpiktas
Sin embargo, incluso cuando se aplica la estandarización (y, por lo tanto, el centrado medio) en los predictores en el algoritmo, toman los datos no estandarizados (por lo tanto x¯0, en general) para adaptarse a las diferentes intersecciones mostradas por glmnet. Ellos usan lo mismoβ0=constant=y¯para actualizar los coeficientes pero ajustan una intersección con los datos en bruto, y lo hacen a posteriori.
Yelh
3

que tomo como la media de la variable objetivo

Creo que aquí es donde te estás equivocando: a diferencia del modelo lineal, no puedes volver a parametrizar los predictores de modo que siempre sean ortogonales a la intersección, por lo tanto, la intersección no puede calcularse simplemente como la media.

Simon Byrne
fuente
Tomé la media de la variable explicada porque en el artículo que cité, los autores de este método escriben que sí usan la media de Y_i (las observaciones de la variable explicada) para todos los valores de alfa y lambda. Ahora, mirando la salida de la función glmnet, supongo que no es el caso para todas las lambdas. Entonces eso no me dice cómo calcular las intersecciones para cada parámetro de regularización lambda.
yelh
Supongo que usan la media ponderada (ya que los pesos cambiarán con λ)
Simon Byrne
¿Podría precisar su idea por favor? ¿Qué expresión de pesas debo considerar?
yelh
En el documento, cada "bucle interno" es un problema de mínimos cuadrados ponderados, con los pesos definidos por el valor ajustado anterior a través de la ecuación 17.
Simon Byrne
1
Está bien, encontré la respuesta mirando el código de Python scikit-learn (porque el código fuente de glmnet está en Fortran y no es mi taza de té). Lo compartiré más tarde si alguien está interesado. Gracias de cualquier manera !
Yelh