質問で説明されている投げ縄推定は、次の最適化問題に相当するラグランジュ乗数です。
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+ϵ23a b s (β1)+ a b s (β2)+ a b s (β3)≤ トン
画像が示しています:
- 赤い面は、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)
3つの画像を表示します。
- 最初の画像では、ポリトープの点のみが球体に接触しています。この画像は、投げ縄ソリューションがOLSソリューションの単なる倍数ではない理由を非常によく示しています。OLSソリューションの方向により、和がより強くなります。この場合、単一ののみがゼロ以外です。|β|1βi
- 2番目の画像では、ポリトープの尾根が球体に接触しています(高次元では、高次元の類似物が得られます)。 この場合、複数のはゼロ以外です。βi
- 3番目の画像では、ポリトープのファセットが球体に接触しています。この場合、すべてのはゼロ以外βiです。
最初のケースと3番目のケースがあるまたはの範囲は、単純な幾何学的表現のために簡単に計算できます。tλ
ケース1:ゼロ以外の単一ののみβi
ゼロ以外のは、関連するベクトルがとの共分散の最高絶対値を持つものです (これは、OLS解に最も近いparrallelotopeの点です)。ラグランジュ乗数を計算するには、(負または正の方向にを増やすかどうかに応じた微分)を使用して、少なくともゼロ以外のがあります。βixiY λ M A X β ± β I β 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:すべてのはゼロ以外です。β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(β^)
この方向を正規化します。
β⃗ l a s t 、n o r m a l i ze d= β⃗ L A S TΣのβ⃗ L A S T⋅ S I Gn (β^)
すべての係数がゼロ以外のを見つけるため。OLSソリューションから、係数の1つがゼロになるポイントまで計算するだけです。λM I nは
d= m i n (β^β⃗ l a s t 、n o r m a l i ze d)βという条件で ^β⃗ l a s t 、n o r m a l i ze d> 0
、そしてこの時点で微分を評価します(以前のようにを計算するとき)。二次関数にはます:λmは、Xがq′(x )= 2 q(1 )x
λM I nは= dn||Xβ⃗ last,normalized||22
画像
ポリトープの点が球に接触している場合、単一のはゼロ以外です:βi
ポリトープの尾根(または複数の次元が異なる)が球に接触しているため、多くのはゼロではありません:βi
ポリトープのファセットが球体に接触している場合、すべてのはゼロ以外です:β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によって書かれました。