태그 보관물: lasso

lasso

데이터 행렬이 대각선 일 때 올가미 문제에 대한 닫힌 양식 솔루션 \frac{1}{n}\sum_{i=1}^{n} \left( \langle

문제가 있습니다 :

minw∈Rd(1n∑i=1n(⟨w,xi⟩−yi)2+2λ||w||1),


:

∑i=1nxixiT=diag⁡(σ12,...,σd2).

이 경우 폐쇄 형 솔루션이 있습니까?

나는 그것을 가지고있다 :

(XTX)−1=diag⁡(σ1−2,...,σd−2),

그래서 대답은 :

wj=yjmax{0,1−λn|yj|},

에 대한

yj=∑i=1nyixijσi2

하지만 확실하지 않습니다.



답변

나는 때 폐쇄 된 형태의 올가미 솔루션의 추기경의 유도 @ 통과거야

XTX=I

발견 여기에 약간의 수정과 함께.

모든 대해 이라고 가정합니다 . 우리가 을 가지고 있다면 이것은 의 번째 열 이 모두 0 이라는 것을 알려주기 때문에 그런 경우를 제외하는 것이 합리적이라고 생각합니다. 하겠습니다 . 이것은 또한 가 전체 순위이고 OLS 솔루션 가 고유하게 정의 됨을 의미합니다 .

σi2>0

i

σi2=0

i

X

XTX=D

X

β^

또한 내가 참조하고있는 답변에서 더 잘 일치하도록 표기법을 수정하려고합니다. 이를 위해

β^λ=argminβ∈Rp12||Y−Xβ||22+λ||β||1.

이것은 귀하의 문제와 동일하지만 원하는 경우 여기에 더 자세한 내용을 추가 할 수 있습니다.

의 파생에 이어, 우리는

β^λ=argmin 12(YTY−2YTXβ+βTXTXβ)+λ||β||1

=argmin −YTXβ+12βTDβ+λ||β||1.

OLS 솔루션은 이므로

β^=(XTX)−1XTY=D−1XTY

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

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

각 개별적 으로 최적화 합계의 각 항을 개별적으로 해결할 수 있습니다. 이것은 우리가 를 최소화해야한다는 것을 의미합니다. 여기서

βj

Lj

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

링크 된 답변에 대한 완전한 분석적 주장에 따르면, 우리는

(β^λ)j=sgn(β^j)(|β^j|−λσj2)+.

또한, 그래서

β^=D−1XTY⟹β^j=XjTYσj2

(|β^j|−λσj2)+=1σj2(|XjTY|−λ)+

따라서 예측 행렬 는 설계 행렬이 직교가 아닌 직교 정규형 일 때 정확히 0으로 표시됩니다. 따라서이 경우 인 경우 변수 선택은 인 경우와 다르지 않지만 실제 계수 는 예측 변수 분산에 따라 조정됩니다.

Xj

XTX=D≠I

XTX=I

β^λ

마지막으로이 솔루션을 여러분의 것과 유사한 솔루션으로 바꾸겠습니다. 이는 에 를 얻기 위해 무언가를 곱해야한다는 것을 의미합니다 . 경우 다음 우리가 그

β^

β^λ

(β^λ)j≠0

(β^λ)j=sgn(β^j)(|β^j|−λσj2)=β^j−sgn(β^j)λσj2

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

이후 .

a|a|=sgn(a)

것을주의 정확하게

(β^λ)j=0

|β^j|−λσj2≤0⟺|β^j|≤λσj2⟺1≤λσ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)))

답변