データ行列が対角である場合の投げ縄問題の閉形式解


13

minwRd(1ni=1n(w,xiyi)2+2λ||w||1),
i=1nxixiT=diag(σ12,...,σd2).

この場合、閉じた形式のソリューションはありますか?

私はそれを持っています:そして、答えは:^ J = Y \ \ W、^ J \最大\左\ {0,1- \ラムダ\ FRAC {N} {| y ^ J |} \右\}、のためにY \、^ J = \ displaystyle \ sum_ {i = 1} ^ n \ frac {y_ix_i \、^ j} {\ sigma_i ^ 2}ですが、わかりません。W

(XTX)1=diag(σ12,...,σd2),
y
wj=yjmax{0,1λn|yj|},
yj=i=1nyixijσi2

回答:


9

ここで見つかったX ^ TX = Iのとき、@ cardinalの閉じた形式のLassoソリューションの派生を少し修正して説明します。バツTバツ=

すべてのiについて\ sigma ^ 2_i> 0と仮定します。これは、\ sigma ^ 2_i = 0がある場合、Xのi番目の列がすべて0であることがわかり、そのようなケースを除外するのが妥当だと思うためです。私は聞かせてよX ^ TX = D。これは、Xがフルランクであり、OLSソリューション\ hat \ betaが一意に定義されることも意味することに注意してください。σ2>0σ2=0バツバツTバツ=Dバツβ^

また、私が参照している回答の表記法とより一致するように表記法を変更します。そのために、

β^λ=argminβRp12||Yバツβ||22+λ||β||1

これは問題と同じですが、必要に応じてここに詳細を追加できます。

の派生に続いて、を解く必要があり

β^λ=argmin 12YTY2YTバツβ+βTバツTバツβ+λ||β||1

=argmin YTバツβ+12βTDβ+λ||β||1

OLSソリューションがである ことに注目すると、 β λ=argmin  - β TDβ+1β^=バツTバツ1バツTY=D1バツTY

β^λ=argmin β^TDβ+12βTDβ+λ||β||1

=argmin j=1pβ^jβjσj2+σj22βj2+λ|βj|

各個別に最適化するため、この合計の各項を個別に解決できます。、 を最小化する必要がありますLの j個のLの J = - β J β J σ 2 J + σ 2 JβjLj

Lj=β^jβjσj2+σj22βj2+λ|βj|

リンクされた答えへの完全に類似した引数の後、

β^λj=sgnβ^j|β^j|λσj2+

さらに、なので、 β^=D1バツTYβ^j=バツjTYσj2

|β^j|λσj2+=1σj2|バツjTY|λ+

そのため、予測は、設計行列が直交ではなく正規直交である場合に正確にゼロになります。したがって、この場合場合、変数選択は場合と変わりませんが、実際の係数は予測子の分散に従ってスケーリングされます。バツjバツTバツ=DバツTバツ=β^λ

最後の注意として、このソリューションをあなたのものに似たものに変えます。つまり、にを得るために何かを掛ける必要があります。もし、我々はそれを持っている β^β^λβ^λj0

β^λj=sgnβ^j|β^j|λσj2=β^jsgnβ^jλσj2

=β^j(1λσj2|β^j|)

以降。a|a|=sgn(a)

ことを指摘正確 (β^λ)j=0

|β^j|λσj20|β^j|λσj21λσj2|β^j|1λσj2|β^j|0,

あるいは、をとして 表現できることがわかります。β^λ

(β^λ)j=β^j(1λσj2|β^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)))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.