Dado , ¿cuál es el comportamiento teórico de los coeficientes LASSO y por qué?
¿Uno de o reduciría a o ambos?
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
lasso
multicollinearity
John Hass
fuente
fuente
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.Respuestas:
Observe que
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
Como lo señala Firebug, la razón por la cual su simulación muestra un resultado contradictorio es quex1=x2 (100,0) (0,100) (a,b) argmin a,b≥0 a+b=100
glmnet
se ajusta automáticamente a las características de la varianza unitaria. Es decir, debido al uso deglmnet
, 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 .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, desdex∈Rn ∥x∥2=1
glmnet
glmnet
fuente
glmnet
tiene la función de escala activada por defecto, estoy bastante seguro. Entonces y vuelven lo mismo en el modelo.ridge.mod=cv.glmnet(x_train,y,alpha=1, standardize = FALSE); coef(ridge.mod)
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.y xj βj y−c−xjβj xj xk xj xk xl y−c−xjβj−xkβ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 dey x1 x2 x1 está 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.
fuente