Yanıtlar:
Ben burada , küçük değişiklikler ile bulundu @ kapalı kardiyak kement çözüm @ cardinal türetmek geçeceğim .
Ben varsayarak olacağım herkes için . Bu bir haklı çünkü bir varsa, bu bize sütununun 0 olduğunu söyler ve böyle bir durumu hariç tutmanın makul olduğunu düşünüyorum. izin vereceğim . Bunun, tam sıralama olduğunu ve OLS çözümü benzersiz bir şekilde tanımlandığı anlamına geldiğini unutmayın .
Ayrıca gösterimi, atıfta bulunduğum yanıtta daha iyi eşleşecek şekilde değiştireceğim. Bu amaçla
Bu sorununuzla aynı, ancak isterseniz daha fazla ayrıntı ekleyebilirim.
@ Cardinal'in türevini takiben
OLS çözümünün ,
Her bir ayrı ayrı optimize ediyoruz , böylece bu toplamın her bir terimini ayrı ayrı çözebiliriz. Bu, değerini en aza gerektiği anlamına gelir, burada
Bağlantılı yanıta tamamen benzer bir argümanın ardından,
Ayrıca, böylece
bu nedenle, öngörücüsünün , tasarım matrisinin yalnızca dikey değil, dikey olduğu zaman tam olarak sıfırlandığı ortaya çıkıyor . Bu nedenle, ile bu durumda , değişken seçiminin farklı olmadığını görebiliriz , ancak gerçek katsayılar öngörücü varyanslarına göre ölçeklendirilir.
Son bir not olarak, bu çözümü kendinize benzeyen bir çözüm haline getireceğim, yani almak için bir şeyle . Eğer ise
çünkü .
İfade eden tam
alternatif olarak
Yani bu sahip olduğunuza çok yakın ama tam olarak aynı değil.
Mümkünse, bu tür türevleri mümkünse iyi bilinen kütüphanelere karşı kontrol etmek isterim, bu yüzden R'de bir örnek:
## generating `x`
set.seed(1)
n = 1000
p = 5
sigma2s = 1:p
x = svd(matrix(rnorm(n * p), n, p))$u %*% diag(sqrt(sigma2s))
## check this
# t(x) %*% x
## generating `y`
betas = 1:p
y = x %*% betas + rnorm(nrow(x), 0, .5)
lambda = 2
## using a well-known library to fit lasso
library(penalized)
penalized(y, x, lambda1 = lambda)@penalized
## using closed form solution
betahat = lm(y ~ x - 1)$coef
ifelse(betahat > 0, 1, -1) * sapply(abs(betahat) - lambda / sigma2s, function(v) max(c(0, v)))