A estimativa do laço descrita na pergunta é o equivalente multiplicador de lagrange do seguinte problema de otimização:
minimize f(β) subject to g(β)≤t
f(β)g(β)=12n||y−Xβ||22=||β||1
Essa otimização tem uma representação geométrica de encontrar o ponto de contato entre uma esfera multidimensional e um politopo (estendido pelos vetores de X). A superfície do politopo representa . O quadrado do raio da esfera representa a função e é minimizado quando as superfícies entram em contato.g(β)f(β)
As imagens abaixo fornecem uma explicação gráfica. As imagens utilizaram o seguinte problema simples com vetores de comprimento 3 (para simplificar, a fim de poder fazer um desenho):
⎡⎣⎢y1y2y3⎤⎦⎥=⎡⎣⎢1.41.840.32⎤⎦⎥=β1⎡⎣⎢0.80.60⎤⎦⎥+β2⎡⎣⎢00.60.8⎤⎦⎥+β3⎡⎣⎢0.60.64−0.48⎤⎦⎥+⎡⎣⎢ϵ1ϵ2ϵ3⎤⎦⎥
e minimizamos com a restriçãoϵ21+ϵ22+ϵ23abs(β1)+abs(β2)+abs(β3)≤t
As imagens mostram:
- A superfície vermelha representa a restrição, um politopo estendido por X.
- E a superfície verde representa a superfície minimalizada, uma esfera.
- A linha azul mostra o caminho do laço, as soluções que encontramos quando mudamos ou .tλ
- O vetor verde mostra a solução OLS (que foi escolhida como ou .y^β1=β2=β3=1 y =x1+x2+x3y^=x1+x2+x3
- Os três vetores pretos são , e .x1=(0.8,0.6,0)x2=(0,0.6,0.8)x3=(0.6,0.64,−0.48)
Mostramos três imagens:
- Na primeira imagem, apenas um ponto do politopo está tocando a esfera . Esta imagem demonstra muito bem por que a solução laço não é apenas um múltiplo da solução OLS. A direção da solução OLS é mais forte na soma . Nesse caso, apenas um único é diferente de zero.|β|1βi
- Na segunda imagem, uma crista do politopo está tocando a esfera (em dimensões mais altas, obtemos análogos dimensionais mais altos). Nesse caso, vários são diferentes de zero.βi
- Na terceira imagem, uma faceta do politopo está tocando a esfera . Nesse caso, todos os são diferentes de zeroβi .
O intervalo de ou para o qual temos o primeiro e o terceiro casos pode ser facilmente calculado devido à sua representação geométrica simples.tλ
Caso 1: apenas um único diferente de zeroβi
O diferente de zero é aquele para o qual o vetor associado tem o valor absoluto mais alto da covariância com (este é o ponto do paralelotopo mais próximo da solução OLS). Podemos calcular o multiplicador de Lagrange abaixo do qual temos pelo menos um diferente de zero usando a derivada comβixiy λ m um x β ± β i β iy^λmaxβ±βi (o sinal depende se aumentamos o na direção negativa ou positiva):βi
∂(12n||y−Xβ||22−λ||β||1)±∂βi=0
o que leva a
λmax=(12n∂(||y−Xβ||22±∂βi)(||β||1)±∂βEu)= ±∂(12 n||y-Xβ||22∂βEu= ±1nxEu⋅ y
que é igual a| | XTy| |∞ mencionado nos comentários.
onde devemos notar que isso só é verdade para o caso especial em que a ponta do politopo está tocando a esfera ( portanto, essa não é uma solução geral , embora a generalização seja direta).
Caso 3: Todos os são diferentes de zero.βEu
Nesse caso, uma faceta do politopo está tocando a esfera. Então a direção da mudança do caminho do laço é normal para a superfície da faceta específica.
O politopo tem muitas facetas, com contribuições positivas e negativas do . No caso da última etapa do laço, quando a solução do laço estiver próxima da solução ols, as contribuições do deverão ser definidas pelo sinal da solução OLS. O normal da faceta pode ser definido tomando o gradiente da função , o valor da soma de beta no pontoxEuxEu| | β( R ) | |1r , que é:
n=−∇r(||β(r)||1)=−∇r(sign(β^)⋅(XTX)−1XTr)=−sign(β^)⋅(XTX)−1XT
e a mudança equivalente de beta para essa direção é:
β⃗ last=(XTX)−1Xn=−(XTX)−1XT[sign(β^)⋅(XTX)−1XT]
que depois de alguns truques algébricos com a mudança das transposições (ATBT=[BA]T ) e a distribuição de colchetes se torna
β⃗ last=−(XTX)−1sign(β^)
normalizamos esta direção:
β⃗ last,normalized=β⃗ last∑β⃗ last⋅sign(β^)
Para encontrar oλmin abaixo do qual todos os coeficientes são diferentes de zero. Só precisamos calcular novamente a partir da solução OLS até o ponto em que um dos coeficientes é zero,
d=min(β^β⃗ last,normalized)with the condition that β^β⃗ last,normalized>0
, e neste momento avaliamos a derivada (como antes, quando calculamos ). Usamos que, para uma função quadrática, temos :λmaxq′(x)=2q(1)x
λmin=dn||Xβ⃗ last,normalized||22
Imagens
um ponto do politopo está tocando a esfera, um único é diferente de zero:βi
uma crista (ou difere em várias dimensões) do pólipo está tocando a esfera, muitos são diferentes de zero:βi
uma faceta do politopo está tocando a esfera, todos são diferentes de zero:βi
Exemplo de código:
library(lars)
data(diabetes)
y <- diabetes$y - mean(diabetes$y)
x <- diabetes$x
# models
lmc <- coef(lm(y~0+x))
modl <- lars(diabetes$x, diabetes$y, type="lasso")
# matrix equation
d_x <- matrix(rep(x[,1],9),length(x[,1])) %*% diag(sign(lmc[-c(1)]/lmc[1]))
x_c = x[,-1]-d_x
y_c = -x[,1]
# solving equation
cof <- coefficients(lm(y_c~0+x_c))
cof <- c(1-sum(cof*sign(lmc[-c(1)]/lmc[1])),cof)
# alternatively the last direction of change in coefficients is found by:
solve(t(x) %*% x) %*% sign(lmc)
# solution by lars package
cof_m <-(coefficients(modl)[13,]-coefficients(modl)[12,])
# last step
dist <- x %*% (cof/sum(cof*sign(lmc[])))
#dist_m <- x %*% (cof_m/sum(cof_m*sign(lmc[]))) #for comparison
# calculate back to zero
shrinking_set <- which(-lmc[]/cof>0) #only the positive values
step_last <- min((-lmc/cof)[shrinking_set])
d_err_d_beta <- step_last*sum(dist^2)
# compare
modl[4] #all computed lambda
d_err_d_beta # lambda last change
max(t(x) %*% y) # lambda first change
enter code here
nota: essas últimas três linhas são as mais importantes
> modl[4] # all computed lambda by algorithm
$lambda
[1] 949.435260 889.315991 452.900969 316.074053 130.130851 88.782430 68.965221 19.981255 5.477473 5.089179
[11] 2.182250 1.310435
> d_err_d_beta # lambda last change by calculating only last step
xhdl
1.310435
> max(t(x) %*% y) # lambda first change by max(x^T y)
[1] 949.4353
Escrito por StackExchangeStrike