이 질문에 설명 된 올가미 추정치는 다음 최적화 문제와 동등한 lagrange multiplier입니다.
minimize f(β) subject to g(β)≤t
f(β)g(β)=12n||y−Xβ||22=||β||1
이 최적화는 다차원 구체와 폴리 토프 (X의 벡터로 스팬) 사이의 접촉점을 찾는 기하학적 표현을 가지고 있습니다. 폴리 토프의 표면은 나타냅니다 . 구의 반지름의 제곱은 함수 나타내며 표면이 접촉 할 때 최소화됩니다.g(β)f(β)
아래 이미지는 그래픽 설명을 제공합니다. 이미지는 길이가 3 인 벡터에 대해 다음과 같은 간단한 문제를 사용했습니다 (그림을 만들 수 있도록 단순함).
⎡⎣⎢y1y2y3⎤⎦⎥=⎡⎣⎢1.41.840.32⎤⎦⎥=β1⎡⎣⎢0.80.60⎤⎦⎥+β2⎡⎣⎢00.60.8⎤⎦⎥+β3⎡⎣⎢0.60.64−0.48⎤⎦⎥+⎡⎣⎢ϵ1ϵ2ϵ3⎤⎦⎥
ε 2 1 + ϵ 2 2 + ϵ 2 3
그리고 우리는 최소화ϵ21+ϵ22+ϵ23 제약 조건 를 합니다abs(β1)+abs(β2)+abs(β3)≤t
이미지는 다음과 같습니다.
- 빨간색 표면은 제약 조건, X에 의해 스팬 된 폴리 토프를 나타냅니다.
- 그리고 녹색 표면은 최소화 된 표면 인 구를 나타냅니다.
- 파란색 선은 우리가 또는 변경할 때 찾은 올가미 경로를 보여줍니다 .tλ
- 녹색 벡터는 OLS 솔루션 ( 또는 냅니다.y^β1=β2=β3=1 , Y =X1+X2+X3y^=x1+x2+x3
- 3 개의 검은 벡터는 , 및 입니다.x1=(0.8,0.6,0)x2=(0,0.6,0.8)x3=(0.6,0.64,−0.48)
우리는 세 가지 이미지를 보여줍니다 :
- 첫 번째 이미지 에서는 폴리 토프의 한 지점 만 구에 닿아 있습니다. 이 이미지는 올가미 솔루션이 여러 OLS 솔루션이 아닌 이유를 잘 보여줍니다. OLS 솔루션의 방향은 합계에 더 강력합니다 . 이 경우 단일|β|1β iβi 0이 아닙니다.
- 두 번째 이미지 에서 폴리 토프의 융기 부분이 구에 닿고 있습니다 (높은 치수에서는 더 높은 치수의 유사체를 얻습니다). 이 경우 여러βi 는 0이 아닙니다.
- 세 번째 이미지 에서 폴리 토프의 패싯은 구에 닿아 있습니다. 이 경우 모든 는 0이βi .
또는 의 범위tλ첫 번째와 세 번째 사례가있는 간단한 기하학적 표현으로 인해 쉽게 계산할 수 있습니다.
사례 1 : 단일βi 0이 아닌
0이 아닌 는 연관된 벡터 가 와의 공분산의 절대 값이 가장 높은 것입니다 (이것은 OLS 솔루션에 가장 가까운 parrallelotope의 지점입니다). 우리는 ( 를 음의 방향으로 증가시키는 지 또는 양의 방향으로 증가시키는 지에 따라 부호) 를 취함으로써 적어도 0이 아닌 를 갖는 Lagrange multiplier 계산할 수 있습니다 .βixiY λ m X β ± β 나 β Iy^λmaxβ±βiβi
∂(12n||y−Xβ||22−λ||β||1)±∂βi=0
이로 인해
λmax=(12n∂(||y−Xβ||22±∂βi)(||β||1)±∂βi)=±∂(12n||y−Xβ||22∂βi=±1nxi⋅y
이것은 주석에 언급 된 와 같습니다 .||XTy||∞
여기서 우리는 폴리 토프의 끝이 구체에 닿는 특수한 경우에만 사실입니다 ( 따라서 일반화는 간단하지만 일반적인 해결책은 아닙니다 ).
사례 3 : 모든 는 0이 아닙니다.βi
이 경우 폴리 토프의면이 구에 닿아 있습니다. 그런 다음 올가미 경로의 변경 방향은 특정 패싯의 표면에 수직 입니다.
폴리 토프에는 의 양수 및 음수 기여를 가진 많은 측면이 있습니다. 마지막 올가미 단계의 경우 올가미 솔루션이 ols 솔루션에 가까울 때 의 기여 는 OLS 솔루션의 부호로 정의해야합니다. 패싯의 법선이 함수의 기울기 고려하여 정의 될 수 , 점에서 베타의 합계 값 이다 :xixi||β(r)||1r
n=−∇r(||β(r)||1)=−∇r(sign(β^)⋅(XTX)−1XTr)=−sign(β^)⋅(XTX)−1XT
이 방향에 대한 베타 변경은 다음과 같습니다.
β⃗ last=(XTX)−1Xn=−(XTX)−1XT[sign(β^)⋅(XTX)−1XT]
조옮김 ( ) 을 변경하여 대수적 트릭을 사용한 후 대괄호 분포는ATBT=[BA]T
β⃗ last=−(XTX)−1sign(β^)
우리는이 방향을 정규화합니다 :
β⃗ last,normalized=β⃗ last∑β⃗ last⋅sign(β^)
아래에서 모든 계수가 0이 아닌 을 찾으십시오 . OLS 솔루션에서 계수 중 하나가 0 인 지점으로 다시 계산하면됩니다.λmin
d=min(β^β⃗ last,normalized)with the condition that β^β⃗ last,normalized>0
이 시점에서 미분을 평가합니다 (이전의 계산할 때와 같이 ). 우리는 이차 함수에 대해 :λmaxq′(x)=2q(1)x
λmin=dn||Xβ⃗ last,normalized||22
이미지
폴리 토프의 한 점이 구에 닿아 있고 단일 가 0이 아닙니다.βi
폴리 토프의 융기 부분 (또는 여러 치수가 다름)이 구에 있으며 많은 가 0이 아닙니다.βi
폴리 토프의 패싯이 구에 있으며 모든 가 0이 아닙니다.βi
코드 예 :
library(lars)
data(diabetes)
y <- diabetes$y - mean(diabetes$y)
x <- diabetes$x
# models
lmc <- coef(lm(y~0+x))
modl <- lars(diabetes$x, diabetes$y, type="lasso")
# matrix equation
d_x <- matrix(rep(x[,1],9),length(x[,1])) %*% diag(sign(lmc[-c(1)]/lmc[1]))
x_c = x[,-1]-d_x
y_c = -x[,1]
# solving equation
cof <- coefficients(lm(y_c~0+x_c))
cof <- c(1-sum(cof*sign(lmc[-c(1)]/lmc[1])),cof)
# alternatively the last direction of change in coefficients is found by:
solve(t(x) %*% x) %*% sign(lmc)
# solution by lars package
cof_m <-(coefficients(modl)[13,]-coefficients(modl)[12,])
# last step
dist <- x %*% (cof/sum(cof*sign(lmc[])))
#dist_m <- x %*% (cof_m/sum(cof_m*sign(lmc[]))) #for comparison
# calculate back to zero
shrinking_set <- which(-lmc[]/cof>0) #only the positive values
step_last <- min((-lmc/cof)[shrinking_set])
d_err_d_beta <- step_last*sum(dist^2)
# compare
modl[4] #all computed lambda
d_err_d_beta # lambda last change
max(t(x) %*% y) # lambda first change
enter code here
참고 : 마지막 3 줄이 가장 중요합니다
> modl[4] # all computed lambda by algorithm
$lambda
[1] 949.435260 889.315991 452.900969 316.074053 130.130851 88.782430 68.965221 19.981255 5.477473 5.089179
[11] 2.182250 1.310435
> d_err_d_beta # lambda last change by calculating only last step
xhdl
1.310435
> max(t(x) %*% y) # lambda first change by max(x^T y)
[1] 949.4353
StackExchangeStrike에 의해 작성