Perkiraan laso yang dijelaskan dalam pertanyaan adalah persamaan pengali lagrange dari masalah optimisasi berikut:
minimize f(β) subject to g(β)≤t
f(β)g(β)=12n||y−Xβ||22=||β||1
Optimizazion ini memiliki representasi geometris untuk menemukan titik kontak antara bola multidimensi dan polytope (direntang oleh vektor X). Permukaan polytope mewakili g(β) . Kuadrat jari-jari bola mewakili fungsi f(β) dan diminimalkan ketika permukaan kontak.
Gambar di bawah ini memberikan penjelasan grafis. Gambar memanfaatkan masalah sederhana berikut dengan vektor dengan panjang 3 (untuk kesederhanaan agar dapat membuat gambar):
⎡⎣⎢y1y2y3⎤⎦⎥=⎡⎣⎢1.41.840.32⎤⎦⎥=β1⎡⎣⎢0.80.60⎤⎦⎥+β2⎡⎣⎢00.60.8⎤⎦⎥+β3⎡⎣⎢0.60.64−0.48⎤⎦⎥+⎡⎣⎢ϵ1ϵ2ϵ3⎤⎦⎥
dan kami kecilkanϵ21+ϵ22+ϵ23 dengan batasanabs(β1)+abs(β2)+abs(β3)≤t
Gambar menunjukkan:
- Permukaan merah menggambarkan kendala, sebuah polytope membentang oleh X.
- Dan permukaan hijau menggambarkan permukaan yang diminimalkan, sebuah bola.
- Garis biru menunjukkan jalur laso, solusi yang kami temukan saat kami mengubah t atau λ .
- Menunjukkan vektor hijau solusi OLS y (yang dipilih sebagai β 1 = β 2 = β 3 = 1 atau y = x 1 + x 2 + x 3y^β1=β2=β3=1y^=x1+x2+x3 .
- Tiga vektor hitam adalah x1=(0.8,0.6,0) , x2=(0,0.6,0.8) dan x3=(0.6,0.64,−0.48) .
Kami menampilkan tiga gambar:
- Pada gambar pertama hanya satu titik dari polytope yang menyentuh bola . Gambar ini menunjukkan dengan sangat baik mengapa solusi laso bukan hanya kelipatan dari solusi OLS. Arah solusi OLS menambah kuat jumlah |β|1 . Dalam hal ini hanya βi tunggal yang bukan nol.
- Pada gambar kedua punggungan dari polytope menyentuh bola (dalam dimensi yang lebih tinggi kita mendapatkan analog dimensi yang lebih tinggi). Dalam hal ini beberapa βi tidak nol.
- Pada gambar ketiga sisi polytope menyentuh bola . Dalam hal ini semua βi adalah nol .
Kisaran t atau λ yang kita miliki memiliki kasus pertama dan ketiga dapat dengan mudah dihitung karena representasi geometrisnya yang sederhana.
Kasus 1: Hanya βi tunggal yang bukan nol
The non-nol βi adalah salah satu yang vektor terkait xi memiliki nilai absolut tertinggi dari kovarians dengan y^ adalah titik parrallelotope yang paling dekat dengan solusi OLS). Kita dapat menghitung pengali Lagrange λmax bawah ini yang kita miliki setidaknya β nol dengan mengambil turunan dengan ±βi (tanda tergantung pada apakah kita meningkatkan βi dalam arah negatif atau positif):
∂(12n||y−Xβ||22−λ||β||1)±∂βi=0
yang mengarah ke
λmax=(12n∂(||y−Xβ||22±∂βi)(||β||1)±∂βi)=±∂(12n||y−Xβ||22∂βi=±1nxi⋅y
which equals the ||XTy||∞ mentioned in the comments.
where we should notice that this is only true for the special case in which the tip of the polytope is touching the sphere (so this is not a general solution, although generalization is straightforward).
Case 3: All βi are non-zero.
In this case that a facet of the polytope is touching the sphere. Then the direction of change of the lasso path is normal to the surface of the particular facet.
The polytope has many facets, with positive and negative contributions of the xi. In the case of the last lasso step, when the lasso solution is close to the ols solution, then the contributions of the xi must be defined by the sign of the OLS solution. The normal of the facet can be defined by taking the gradient of the function ||β(r)||1, the value of the sum of beta at the point r, which is:
n=−∇r(||β(r)||1)=−∇r(sign(β^)⋅(XTX)−1XTr)=−sign(β^)⋅(XTX)−1XT
and the equivalent change of beta for this direction is:
β⃗ last=(XTX)−1Xn=−(XTX)−1XT[sign(β^)⋅(XTX)−1XT]
which after some algebraic tricks with shifting the transposes (ATBT=[BA]T) and distribution of brackets becomes
β⃗ last=−(XTX)−1sign(β^)
we normalize this direction:
β⃗ last,normalized=β⃗ last∑β⃗ last⋅sign(β^)
To find the λmin below which all coefficients are non-zero. We only have to calculate back from the OLS solution back to the point where one of the coefficients is zero,
d=min(β^β⃗ last,normalized)with the condition that β^β⃗ last,normalized>0
,and at this point we evaluate the derivative (as before when we calculate λmax). We use that for a quadratic function we have q′(x)=2q(1)x:
λmin=dn||Xβ⃗ last,normalized||22
Images
a point of the polytope is touching the sphere, a single βi is non-zero:
a ridge (or differen in multiple dimensions) of the polytope is touching the sphere, many βi are non-zero:
a facet of the polytope is touching the sphere, all βi are non-zero:
Code example:
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
note: those last three lines are the most important
> 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
Written by StackExchangeStrike