Dado , qual é o comportamento teórico dos coeficientes LASSO e por quê?
Um de ou diminuiria para ou os dois?
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
fonte
fonte
y = 100*x1 + 100 + runif(100)
, caso contrário, você recebe um único número aleatório que é reciclado e adicionado uniformemente a todas as outras entradas.Respostas:
Para qualquer valor fixo do coeficiente , a penalidadeé minimizado quando . Isso ocorre porque a penalidade em é duas vezes mais ponderada! Para colocar isso em notação,satisfaz para qualquer . Portanto, o estimador de laçoβ1+2β2 |β1|+|β2| β1=0 β1
Conforme apontado pelo Firebug, a razão pela qual sua simulação mostra um resultado contraditório é que ela éx1=x2 (100,0) (0,100) (a,b) argmin a,b≥0 a+b=100
glmnet
dimensionada automaticamente para variar a unidade dos recursos. Ou seja, devido ao uso deglmnet
, estamos efetivamente no caso em que . Lá, o estimador não é mais único: e estão ambos no arg min. De fato, está no para qualquer tal que .Isso explica por que a simulação encontrou em particular. De fato, o segundo coeficiente sempre será zero, independentemente da ordem dos recursos.β^2=0
Prova: suponha ao WLOG que o recurso satisfaça . A descida de coordenadas (o algoritmo usado por ) calcula sua primeira iteração: seguida por onde . Então, comox∈Rn ∥x∥2=1
glmnet
glmnet
fonte
glmnet
tem o recurso de escala ativado por padrão, tenho certeza. Portanto, e se tornam iguais no modelo.ridge.mod=cv.glmnet(x_train,y,alpha=1, standardize = FALSE); coef(ridge.mod)
Quando executo novamente seu código, percebo que o coeficiente de é numericamente indistinguível de zero.x2
Para entender melhor por que o LASSO define esse coeficiente como zero, você deve examinar a relação entre o LASSO e a regressão de ângulo mínimo (LAR). O LASSO pode ser visto como um LAR com uma modificação especial.
O algoritmo do LAR é mais ou menos assim: Comece com um modelo vazio (exceto por uma interceptação). Em seguida, adicione a variável preditora que é a mais correlacionada com , digamos . Altere incrementalmente o coeficiente desse preditor , até que o seja igualmente correlacionado com e outra variável preditora . Em seguida, altere os coeficientes de e até que um terceiro preditor seja igualmente correlacionado com o e assim por diante.y xj βj y−c−xjβj xj xk xj xk xl y−c−xjβj−xkβk
O LASSO pode ser visto como LAR com o seguinte toque: assim que o coeficiente de um preditor em seu modelo (um preditor "ativo") atingir zero, retire esse preditor do modelo. É o que acontece quando você regride nos preditores colineares: ambos serão adicionados ao modelo ao mesmo tempo e, à medida que seus coeficientes são alterados, sua respectiva correlação com os resíduos será alterada proporcionalmente, mas um dos preditores será descartado do conjunto ativo primeiro porque atinge zero primeiro. Quanto a qual dos dois preditores colineares será, eu não sei. [EDIT: quando você reverte a ordem de e , pode ver que o coeficiente dey x1 x2 x1 está definido como zero. Portanto, o algoritmo glmnet simplesmente parece definir esses coeficientes para zero primeiro, ordenados posteriormente na matriz de design.]
Uma fonte que explica essas coisas com mais detalhes é o capítulo 3, em "Os elementos da aprendizagem estatística", de Friedman, Hastie e Tibshirani.
fonte