问题中描述的套索估计是以下优化问题的拉格朗日乘数等效项:
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⎤⎦⎥
和我们最小化ϵ21+ϵ22+ϵ23与约束abs(β1)+abs(β2)+abs(β3)≤t
图片显示:
- 红色表面描述了约束,X跨越了一个多面体。
- 绿色表面表示最小化的表面,即球体。
- 蓝线显示套索路径,即我们更改t或λ发现的解。
- 绿色矢量示出了OLS溶液ÿ(其被选择作为β 1 = β 2 = β 3 = 1或Ý = X 1 + X 2 + X 3。y^β1=β2=β3=1y^=x1+x2+x3
- 三个黑矢量x1=(0.8,0.6,0),x2=(0,0.6,0.8)和x3=(0.6,0.64,−0.48)。
我们显示三个图像:
- 在第一个图像中,只有多面体的一个点接触球体。该图像很好地说明了套索解决方案不只是OLS解决方案的倍数的原因。OLS解决方案的方向使总和更强|β|1。在这种情况下,只有一个单一的βi是非零的。
- 在第二张图像中,多义峰的脊部接触到球体(在更高维度上,我们获得了更高维度的类似物)。 在这种情况下多个βi是非零。
- 在第三个图像中,多面体的一个小平面正在接触球体。在这种情况下,所有的βi是非零。
由于它们具有简单的几何表示,因此可以容易地计算出我们具有第一和第三种情况的t或λ的范围。
案例1:只有一个单一的βi非零
非零βi是一个给其相关联的向量xi具有与协方差的绝对值最高 y^这是其中parrallelotope最接近于OLS溶液的点)。我们可以计算拉格朗日乘数λ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:所有的βi是非零。
在这种情况下,多面体的一个小面正在接触球体。然后套索路径的变化方向垂直于特定小平面的表面。
多面体具有许多方面,具有xi正负贡献。在最后的套索步骤中,当套索解决方案接近ols解决方案时,则xi的贡献必须由OLS解决方案的符号来定义。可以通过采用||β(r)||1的梯度来定义构面的法线。| β (r )| | 1,在点r处beta的和的值是:
Ñ = - ∇[R(| | β(r )| |1个)= - ∇[R(符号(β^)⋅ (XŤX)− 1XŤr )= − 符号(β^)⋅ (XŤX)− 1XŤ
而该方向的beta的等效变化为:
β⃗ 升一个小号吨= (XŤX)− 1Xn = - (XŤX)− 1XŤ[ 符号(β^)⋅ (XŤX)− 1XŤ]
which after some algebraic tricks with shifting the transposes (ATBT=[BA]T) and distribution of brackets becomes
β⃗ last=−(XTX)−1sign(β^)
we normalize this direction:
β⃗ last,normalized=β⃗ last∑β⃗ last⋅sign(β^)
To find the λmin below which all coefficients are non-zero. We only have to calculate back from the OLS solution back to the point where one of the coefficients is zero,
d=min(β^β⃗ last,normalized)with the condition that β^β⃗ last,normalized>0
,此时我们评估导数(与之前计算时一样) λ中号一个X)。我们将其用于二次函数q′(x )= 2 q(1 )x:
λ中号我Ñ= dñ| | Xβ⃗ L a s t ,n o r m a l i zË d| |22
图片
多角形的一个点接触球体,一个 β一世 不为零:
一个多面体的脊(或在多个维度上不同)正在接触球体,许多 β一世 不为零:
多面体的一个面正接触球体,所有 β一世 不为零:
代码示例:
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
注意:最后三行是最重要的
> 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撰写