Rのパッケージ「lars」を次のコードで使用しています。
> library(lars)
> set.seed(3)
> n <- 1000
> x1 <- rnorm(n)
> x2 <- x1+rnorm(n)*0.5
> x3 <- rnorm(n)
> x4 <- rnorm(n)
> x5 <- rexp(n)
> y <- 5*x1 + 4*x2 + 2*x3 + 7*x4 + rnorm(n)
> x <- cbind(x1,x2,x3,x4,x5)
> cor(cbind(y,x))
y x1 x2 x3 x4 x5
y 1.00000000 0.74678534 0.743536093 0.210757777 0.59218321 0.03943133
x1 0.74678534 1.00000000 0.892113559 0.015302566 -0.03040464 0.04952222
x2 0.74353609 0.89211356 1.000000000 -0.003146131 -0.02172854 0.05703270
x3 0.21075778 0.01530257 -0.003146131 1.000000000 0.05437726 0.01449142
x4 0.59218321 -0.03040464 -0.021728535 0.054377256 1.00000000 -0.02166716
x5 0.03943133 0.04952222 0.057032700 0.014491422 -0.02166716 1.00000000
> m <- lars(x,y,"step",trace=T)
Forward Stepwise sequence
Computing X'X .....
LARS Step 1 : Variable 1 added
LARS Step 2 : Variable 4 added
LARS Step 3 : Variable 3 added
LARS Step 4 : Variable 2 added
LARS Step 5 : Variable 5 added
Computing residuals, RSS etc .....
5つの連続変数を持つデータセットがあり、モデルを単一の(従属)変数yに適合させようとしています。私の予測因子のうちの2つは、互いに非常に相関しています(x1、x2)。
上記の例でわかるように、 'stepwise'オプションを使用したlars関数は、最初にyと最も相関のある変数を選択します。モデルに入る次の変数は、残差と最も相関する変数です。実際、x4です。
> round((cor(cbind(resid(lm(y~x1)),x))[1,3:6]),4)
x2 x3 x4 x5
0.1163 0.2997 0.9246 0.0037
さて、「投げ縄」オプションを実行すると:
> m <- lars(x,y,"lasso",trace=T)
LASSO sequence
Computing X'X ....
LARS Step 1 : Variable 1 added
LARS Step 2 : Variable 2 added
LARS Step 3 : Variable 4 added
LARS Step 4 : Variable 3 added
LARS Step 5 : Variable 5 added
最初の2つのステップで、両方の相関変数をモデルに追加します。これは、私がいくつかの論文で読んだものと反対です。そのほとんどが、相関が非常に高い変数のグループがある場合、「投げ縄」はグループからランダムに1つの変数のみを選択する傾向があると言います。
誰かがこの動作の例を提供できますか?または、変数x1、x2が次々に(一緒に)モデルに追加される理由を説明してください。
R
OPが行っている呼び出しと彼が提供する関連出力を見ると、彼が実際に投げ縄を使用していることがわかります。ご存知のとおり、larsアルゴリズムの小さな調整により、投げ縄正則化パスが生成されます。