Risposte:
Esaminerò la derivazione di @ cardinale della soluzione di lazo in forma chiusa quando , trovato qui , con lievi modifiche.
che per tutti . Questo è giustificato perché se abbiamo un questo ci dice che l' colonna di è tutto 0, e penso che sia ragionevole escludere un caso del genere. Ti lascio . Si noti che ciò significa anche che è al completo e che la soluzione OLS è definita in modo univoco.i σ 2 i = 0 i X X T X = D X β
Modificherò anche la tua notazione per adattarla meglio alla risposta a cui mi riferisco. A tal fine, risolverò
Questo è identico al tuo problema, ma posso aggiungere ulteriori dettagli qui se lo desideri.
Seguendo la derivazione di @ cardinale, dobbiamo risolvere
Notando che la soluzione OLS è , abbiamo quel β À=argmin - β TDβ+1
Stiamo ottimizzando su ciascun separatamente, quindi possiamo risolvere ogni termine di questa somma separatamente. Ciò significa che dobbiamo ridurre al minimo dove
Seguendo un argomento completamente analogo alla risposta collegata, troviamo che
Inoltre, quindi abbiamo
quindi si scopre che un predittore viene azzerato esattamente quando sarebbe se la matrice di design fosse ortonormale, non solo ortogonale. Quindi possiamo vedere che in questo caso con , la selezione della variabile non è diversa rispetto a se , ma i coefficienti effettivi sono ridimensionati in base alle varianze del predittore.
Come nota finale, trasformerò questa soluzione in una simile alla tua, il che significa che dobbiamo moltiplicare per qualcosa per ottenere . Se allora abbiamo quello
poiché .
Notando che esattamente quando
vediamo che potremmo in alternativa esprimere come
Quindi questo è molto vicino a quello che avevi ma non esattamente lo stesso.
Mi piace sempre controllare le derivazioni come questa rispetto alle librerie ben note, se possibile, quindi ecco un esempio in R:
## 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)))