多重共線性が高い場合、LASSO係数は0に縮小されますか?


9

与えられた、LASSO係数と理由の理論的な行動は何ですか?x2=2x1

のでしょうが1やにシュリンクまたはその両方?x1x20

require(glmnet)
x1 = runif(100, 1, 2)
x2 = 2*x1
x_train = cbind(x1, x2)
y = 100*x1 + 100 + runif(1)
ridge.mod = cv.glmnet(x_train, y, alpha = 1)
coef(ridge.mod)

#3 x 1 sparse Matrix of class "dgCMatrix"
#                       1
#(Intercept) 1.057426e+02
#x1          9.680073e+01
#x2          3.122502e-15

2
両方の係数が実際にはゼロであるため、これが良いシミュレーションであるかどうかはわかりません。実際の関係がある場合の係数推定値の動作を確認することは少し興味深いです。
dsaxton 2016年

1
シミュレーションが改善されました。私の質問が何であるかを説明したいので、シミュレーションを提供します。私はこの質問の理論的な結果にのみ興味があります。
John Hass

1
モデルを特定できないため、予測できない動作になると思います。つまり、モデルフィッティング手順では、たとえば、およびではなく、およびであることをどのようにして知ることができるのでしょうか。どちらも「正しい」ため、できません。β 2 = 0 β 1 = 0 β 2 = 50β1=100β2=0β1=0β2=50
dsaxton 2016年

私はあなたの推論に同意します。それを説明する数学的な方法はありますか?
John Hass

1
そうだと思いますがy = 100*x1 + 100 + runif(100)、そうでなければ、リサイクルされて他のすべてのエントリに均一に追加される単一の乱数を取得します。
Firebug 2017

回答:


8

ことを通知

yXβ22+λβ1=yβ1x1β2x222+λ(|β1|+|β2|)=y(β1+2β2)x122+λ(|β1|+|β2|).

係数固定値の場合、ペナルティときに最小化され。これは、のペナルティが2倍に加重されているためです。これを表記すると、任意のについてを満たします。したがって、なげなわ推定器 β1+2β2|β1|+|β2|β1=0β1

β~=argminβ:β1+2β2=K|β1|+|β2|
β~1=0K
β^=argminβRpyXβ22+λβ1=argminβRpy(β1+2β2)x122+λ(|β1|+|β2|)=argβminKRminβRp:β1+2β2=KyKx122+λ(|β1|+|β2|)=argβminKR{yKx122+λminβRp:β1+2β2=K{(|β1|+|β2|)}}
は満たし。OPの質問へのコメントが誤解を招く理由は、モデルにペナルティがあるためです:それらβ^1=0(0,50)そして、の係数は同じエラーを与えるが、異なる当たり前!さらに、LARのようなものを見る必要はありません。この結果は、最初の原則からすぐに続きます。(100,0)1

Firebugによって指摘されたように、シミュレーションが矛盾した結果を示す理由はglmnet、特徴の単位分散に自動的にスケーリングするためです。つまり、の使用によりglmnet、場合に効果的になります。そこで、推定器は一意ではなくなりました:とはどちらもarg minにあります。実際、はような任意ののにあります。x1=x2(100,0)(0,100)(a,b)argmina,b0a+b=100

等しい特徴のこの場合、glmnetは1回の反復で収束します。最初の係数がソフトしきい値になり、次に2番目の係数がゼロにソフトしきい値になります。

これは、シミュレーションが特にを見つけた理由を説明しています。実際、フィーチャの順序に関係なく、2番目の係数は常にゼロになります。β^2=0

証明: WLOGは、機能が満たすと仮定します。座標降下(が使用するアルゴリズム)は、最初の反復を計算します:後に ここで。次に、xRnx2=1glmnet

β^1(1)=Sλ(xTy)
β^2(1)=Sλ[xT(yxSλ(xTy))]=Sλ[xTyxTx(xTy+T)]=Sλ[T]=0,
T={λ if xTy>λλ if xTy<λ0 otherwiseβ^2(1)=0、座標降下の2回目の反復では、上記の計算が繰り返されます。帰納的に、すべての反復およびについてであることがわかります。従って報告すると停止基準が直ちに達成されるからです。β^j(i)=β^j(i)ij{1,2}glmnetβ^1=β^1(1)β^2=β^2(1)

2
glmnet機能のスケーリングがデフォルトでオンになっています。きっと確信しています。したがって、とはモデル内で同じになります。x1x2
Firebug 2017

2
代わりにこれを試してください: ridge.mod=cv.glmnet(x_train,y,alpha=1, standardize = FALSE); coef(ridge.mod)
Firebug

2
やった!素晴らしい思考、@ Firebug!これで、の係数は実際にゼロと推定されます。あなたの洞察を共有してくれてありがとう!x1
user795305 2017

3

コードを再実行すると、の係数が数値的にゼロと区別できないことがます。x2

LASSOがその係数をゼロに設定する理由をよりよく理解するには、LASSOと最小角度回帰(LAR)の関係を調べる必要があります。LASSOは、特別な変更を加えたLARと見なすことができます。

LARのアルゴリズムは、おおよそ次のようなものです。空のモデル(切片を除く)から始めます。次に、と最も相関する予測変数、たとえば追加します。残差がおよび別の予測子変数と等しく相関するまで、その予測子の係数変更します。次に、3番目の予測子が残差 と等しく相関する まで、との両方の係数を変更します。yxjβjycxjβjxjxkxjxkxlycxjβjxkβk

LASSOは、次のようなひねりを加えたLARと見なすことができます。モデルの予測子(「アクティブな」予測子)の係数がゼロになり次第、その予測子をモデルから削除します。これは、コリニア予測子でを回帰するときに発生します。両方が同時にモデルに追加され、それらの係数が変更されると、残差とのそれぞれの相関が比例して変更されますが、予測子の1つが削除されます最初にアクティブセットからゼロにヒットするため。2つの同一線上予測子のどちらになるかはわかりません。[EDIT:あなたがの順序逆転するとと、あなたが見ることができるの係数yx1x2x1ゼロに設定されます。したがって、glmnetアルゴリズムは、最初にこれらの係数を最初にゼロに設定するように見えますが、これらは設計行列で後で順序付けされます。]

これらのことをより詳細に説明している情報源は、フリードマン、ハスティ、ティブシラーニによる「統計学習の要素」の第3章です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.