Se a multicolinearidade for alta, os coeficientes do LASSO diminuiriam para 0?

9

Dado x2=2x1 , qual é o comportamento teórico dos coeficientes LASSO e por quê?

Um de x1 ou x2 diminuiria para 0 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
John Hass
fonte
2
Não tenho certeza se esta é uma boa simulação, porque ambos os coeficientes são de fato zero. É um pouco mais interessante observar o comportamento das estimativas de coeficiente quando há um relacionamento real.
dsaxton
1
Simulação melhorada. Eu forneço a simulação porque quero explicar qual é a minha pergunta. Eu só me interessei pelos resultados teóricos dessa questão.
John Hass
1
Eu acho que o comportamento será imprevisível porque o modelo não é identificável. Ou seja, como o procedimento de ajuste do modelo pode saber, por exemplo, que e β 2 = 0 em vez de β 1 = 0 e β 2 = 50 ? Não pode, porque qualquer um é "correto". β1=100β2=0β1=0β2=50
dsaxton
Eu concordo com o seu raciocínio. Existe uma maneira matemática de descrevê-lo?
John Hass
1
Eu acho que você quis dizer 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.
Firebug

Respostas:

8

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

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

β~=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|)}}
satisfaz . A razão pela qual os comentários à pergunta do OP são enganosos é porque há uma penalidade no modelo: aquelesβ^1=0(0,50)e coeficientes dão o mesmo erro, mas diferentes norma! Além disso, não é necessário olhar para algo como LARs: esse resultado segue imediatamente os primeiros princípios.(100,0)1

Conforme apontado pelo Firebug, a razão pela qual sua simulação mostra um resultado contraditório é que ela é glmnetdimensionada automaticamente para variar a unidade dos recursos. Ou seja, devido ao uso de glmnet, 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 .x1=x2(100,0)(0,100)(a,b)argmina,b0a+b=100

Nesse caso de recursos iguais, glmnetconvergirá em exatamente uma iteração: limiares soft o primeiro coeficiente e, em seguida, o segundo coeficiente é limiar soft a zero.

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, comoxRnx2=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, a segunda iteração de descida de coordenadas repetirá os cálculos acima. Indutivamente, vemos que para todas as iterações e . Portanto , reportará e pois o critério de parada é imediatamente atingido.β^j(i)=β^j(i)ij{1,2}glmnetβ^1=β^1(1)β^2=β^2(1)
user795305
fonte
2
glmnettem o recurso de escala ativado por padrão, tenho certeza. Portanto, e se tornam iguais no modelo. x1x2
Firebug
2
Tente isto: ridge.mod=cv.glmnet(x_train,y,alpha=1, standardize = FALSE); coef(ridge.mod)
Firebug
2
Isso foi feito! Ótimo pensamento, @Firebug! Agora, o coeficiente de é estimado como zero. Obrigado por compartilhar sua visão! x1
User795305
3

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.yxjβjycxjβjxjxkxjxkxlycxjβjxkβ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 deyx1x2x1está 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.

Matthias Schmidtblaicher
fonte