Si la multicolinealidad es alta, ¿se reducirían los coeficientes LASSO a 0?

9

Dado , ¿cuál es el comportamiento teórico de los coeficientes LASSO y por qué?x2=2x1

¿Uno de o reduciría a o ambos?x1x20

require(glmnet)
x1 = runif(100, 1, 2)
x2 = 2*x1
x_train = cbind(x1, x2)
y = 100*x1 + 100 + runif(1)
ridge.mod = cv.glmnet(x_train, y, alpha = 1)
coef(ridge.mod)

#3 x 1 sparse Matrix of class "dgCMatrix"
#                       1
#(Intercept) 1.057426e+02
#x1          9.680073e+01
#x2          3.122502e-15
John Hass
fuente
2
No estoy seguro si esta es una buena simulación porque ambos coeficientes son de hecho cero. Es un poco más interesante observar el comportamiento de las estimaciones de coeficientes cuando hay una relación real.
dsaxton
1
Simulación mejorada. Proporciono la simulación porque quiero explicar cuál es mi pregunta. Solo me interesan los resultados teóricos de esta pregunta.
John Hass
1
Creo que el comportamiento será impredecible porque el modelo no es identificable. Es decir, ¿cómo puede saber el procedimiento de ajuste del modelo, por ejemplo, que y lugar de y ? No puede, porque cualquiera de los dos es "correcto". β1=100β2=0β1=0β2=50
dsaxton
Estoy de acuerdo con tu razonamiento. ¿Hay una manera matemática de describirlo?
John Hass
1
Creo que quisiste decir y = 100*x1 + 100 + runif(100), de lo contrario, obtienes un único número aleatorio que se recicla y se agrega de manera uniforme a todas las demás entradas.
Firebug

Respuestas:

8

Observe que

yXβ22+λβ1=yβ1x1β2x222+λ(|β1|+|β2|)=y(β1+2β2)x122+λ(|β1|+|β2|).

Para cualquier valor fijo del coeficiente , la penalizaciónse minimiza cuando . Esto se debe a que la penalización en es dos veces mayor. Para poner esto en notación,satisface para cualquier . Por lo tanto, el estimador de lazo β1+2β2|β1|+|β2|β1=0β1

β~=argminβ:β1+2β2=K|β1|+|β2|
β~1=0K
β^=argminβRpyXβ22+λβ1=argminβRpy(β1+2β2)x122+λ(|β1|+|β2|)=argβminKRminβRp:β1+2β2=KyKx122+λ(|β1|+|β2|)=argβminKR{yKx122+λminβRp:β1+2β2=K{(|β1|+|β2|)}}
satisface . La razón por la cual los comentarios a la pregunta de OP son engañosos es porque hay una penalización en el modelo: esosβ^1=0(0,50)y coeficientes dan el mismo error, ¡pero diferente norma! Además, no es necesario mirar nada parecido a los LAR: este resultado se deduce inmediatamente de los primeros principios.(100,0)1

Como lo señala Firebug, la razón por la cual su simulación muestra un resultado contradictorio es que glmnetse ajusta automáticamente a las características de la varianza unitaria. Es decir, debido al uso de glmnet, estamos efectivamente en el caso de que . Allí, el estimador ya no es único: y están en el argumento min. De hecho, está en para cualquier tal que .x1=x2(100,0)(0,100)(a,b)argmina,b0a+b=100

En este caso de características iguales, glmnetconvergerá exactamente en una iteración: aplica un umbral suave al primer coeficiente y luego el segundo coeficiente se aplica un umbral suave a cero.

Esto explica por qué la simulación encontró en particular. De hecho, el segundo coeficiente siempre será cero, independientemente del orden de las características.β^2=0

Prueba: suponga WLOG que la función satisface . El descenso coordinado (el algoritmo usado por ) calcula para su primera iteración: seguido de donde . Entonces, desdexRnx2=1glmnet

β^1(1)=Sλ(xTy)
β^2(1)=Sλ[xT(yxSλ(xTy))]=Sλ[xTyxTx(xTy+T)]=Sλ[T]=0,
T={λ if xTy>λλ if xTy<λ0 otherwiseβ^2(1)=0, la segunda iteración de descenso de coordenadas repetirá los cálculos anteriores. Inductivamente, vemos que para todas las iteraciones y . Por lo tanto , informará y ya que se alcanza inmediatamente el criterio de detención.β^j(i)=β^j(i)ij{1,2}glmnetβ^1=β^1(1)β^2=β^2(1)
usuario795305
fuente
2
glmnettiene la función de escala activada por defecto, estoy bastante seguro. Entonces y vuelven lo mismo en el modelo. x1x2
Firebug
2
Pruebe esto en su lugar: ridge.mod=cv.glmnet(x_train,y,alpha=1, standardize = FALSE); coef(ridge.mod)
Firebug
2
Eso lo hizo! Gran pensamiento, @Firebug! Ahora el coeficiente de se estima como cero. ¡Gracias por compartir tu visión! x1
user795305
3

Cuando vuelvo a ejecutar su código, obtengo que el coeficiente de es numéricamente indistinguible de cero.x2

Para comprender mejor por qué LASSO establece ese coeficiente en cero, debe observar la relación entre LASSO y la Regresión de ángulo mínimo (LAR). LASSO puede verse como un LAR con una modificación especial.

El algoritmo de LAR es más o menos así: comience con un modelo vacío (excepto por una intercepción). Luego agregue la variable predictora que esté más correlacionada con , digamos . Cambie el coeficiente de ese predictor , hasta que el residual esté igualmente correlacionado con y otra variable de predicción . Luego cambie los coeficientes de y hasta que un tercer predictor esté igualmente correlacionado con el residual y así sucesivamente.yxjβjycxjβjxjxkxjxkxlycxjβjxkβk

LASSO puede verse como LAR con el siguiente giro: tan pronto como el coeficiente de un predictor en su modelo (un predictor "activo") llegue a cero, elimine ese predictor del modelo. Esto es lo que sucede cuando una regresión sobre los predictores colineales: ambos se agregarán al modelo al mismo tiempo y, como se cambian sus coeficientes, su respectiva correlación con los residuos va a cambiar proporcionalmente, pero uno de los predictores se abandonará del conjunto activo primero porque llega a cero primero. En cuanto a cuál de los dos predictores colineales será, no lo sé. [EDITAR: cuando invierte el orden de y , puede ver que el coeficiente deyx1x2x1está puesto a cero. Entonces, el algoritmo glmnet simplemente parece establecer esos coeficientes a cero primero que se ordenan más adelante en la matriz de diseño.]

Una fuente que explica estas cosas con más detalle es el Capítulo 3 en "Los elementos del aprendizaje estadístico" de Friedman, Hastie y Tibshirani.

Matthias Schmidtblaicher
fuente