web-dev-qa-db-ja.com

Rのglmnet()とcv.glmnet()の違いは?

イベントのグループが結果に与える潜在的な影響を示すプロジェクトに取り組んでいます。私はglmnet()パッケージを使用しており、特にポアソン機能を使用しています。これが私のコードです:

# de <- data imported from sql connection        
x <- model.matrix(~.,data = de[,2:7])
y <- (de[,1])
reg <- cv.glmnet(x,y, family = "poisson", alpha = 1)
reg1 <- glmnet(x,y, family = "poisson", alpha = 1)

**Co <- coef(?reg or reg1?,s=???)**

summ <- summary(Co)
c <- data.frame(Name= rownames(Co)[summ$i],
       Lambda= summ$x)
c2 <- c[with(c, order(-Lambda)), ]

最初は、SQLでデータベースから大量のデータをインポートします。次に、それを行列形式にして、応答を予測子から分離します。

ここで私は混乱しています。glmnet()関数とcv.glmnet()関数の違いを正確に理解することはできません。 cv.glmnet()関数はglmnet()のk分割交差検定であることに気付きましたが、実際にはどういう意味ですか?それらはラムダに同じ値を提供しますが、2つの違いについて重要な何かを見逃していないことを確認したいと思います。

また、alpha = 1(おそらくデフォルト)を指定すると正常に動作する理由もわかりませんが、省略した場合は違いますか?

前もって感謝します!

11
Sean Branchaw

glmnet()は、回帰モデル、なげなわモデルなどに適合させるために使用できるRパッケージです。アルファ引数は、どのタイプのモデルが適合するかを決定します。 alpha = 0の場合、Ridge Modelが適合し、alpha = 1の場合、なげなわモデルが適合します。

cv.glmnet()は相互検証を実行します。デフォルトでは10倍で、nfoldを使用して調整できます。 10倍のCVは、観測値をほぼ同じサイズの10の重複しないグループ/フォールドにランダムに分割します。最初の折り目は検証セットに使用され、モデルは9つの折り目に適合します。偏りと分散の利点は、通常、このようなモデル検証方法を使用する背後にある動機です。なげなわモデルと尾根モデルの場合、CVはチューニングパラメーターlambdaの値を選択するのに役立ちます。

あなたの例では、plot(reg)OR reg $ lambda.minを実行して、CVエラーが最小になるラムダの値を確認できます。次に、その値のテストMSEを導出できます。デフォルトでは、glmnet()は、自動的に選択されたラムダの範囲に対してリッジまたはラッソ回帰を実行します。これにより、最低のテストMSEが得られない場合があります。これがお役に立てば幸いです。

お役に立てれば!

15
Amrita Sawant

Reg $ lambda.minとreg $ lambda.1seの間; lambda.minは明らかに最小のMSEを提供しますが、エラーに対する柔軟性に応じて、reg $ lambda.1seを選択することをお勧めします。これは、この値によって予測子の数がさらに減少するためです。ラムダ値としてreg $ lambda.minとreg $ lambda.1seの平均を選択することもできます。

1
user3698581