回答:
ここで見つかったX ^ TX = Iのとき、@ cardinalの閉じた形式のLassoソリューションの派生を少し修正して説明します。
すべてのiについて\ sigma ^ 2_i> 0と仮定します。これは、\ sigma ^ 2_i = 0がある場合、Xのi番目の列がすべて0であることがわかり、そのようなケースを除外するのが妥当だと思うためです。私は聞かせてよX ^ TX = D。これは、Xがフルランクであり、OLSソリューション\ hat \ betaが一意に定義されることも意味することに注意してください。
また、私が参照している回答の表記法とより一致するように表記法を変更します。そのために、
これは問題と同じですが、必要に応じてここに詳細を追加できます。
の派生に続いて、を解く必要があり
OLSソリューションがである ことに注目すると、 β λ=argmin - β TDβ+1
各個別に最適化するため、この合計の各項を個別に解決できます。、 を最小化する必要がありますLの j個のLの J = - β J β J σ 2 J + σ 2 J
リンクされた答えへの完全に類似した引数の後、
さらに、なので、
そのため、予測は、設計行列が直交ではなく正規直交である場合に正確にゼロになります。したがって、この場合場合、変数選択は場合と変わりませんが、実際の係数は予測子の分散に従ってスケーリングされます。
最後の注意として、このソリューションをあなたのものに似たものに変えます。つまり、にを得るために何かを掛ける必要があります。もし、我々はそれを持っている
以降。
ことを指摘正確
あるいは、をとして 表現できることがわかります。
したがって、これはあなたが持っていたものに非常に近いですが、まったく同じではありません。
できれば、よく知られているライブラリに対してこのような派生をチェックするのが好きなので、ここに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)))