14

私は、一連の出来事が結果に及ぼす潜在的な影響を示すプロジェクトに取り組んでいます。私は 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 (おそらくデフォルト) を指定すると正常に動作する理由も不明ですが、省略した場合はそうではありませんか?

前もって感謝します!

4

2 に答える 2

21

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

cv.glmnet() は交差検証を実行します。デフォルトでは 10 倍で、nfolds を使用して調整できます。10 倍の CV は、観測をほぼ同じサイズの重複しない 10 個のグループ/フォールドにランダムに分割します。最初のフォールドは検証セットに使用され、モデルは 9 つのフォールドに適合します。バイアス分散の利点は、通常、このようなモデル検証方法を使用する動機です。なげなわモデルとリッジ モデルの場合、CV は調整パラメーター ラムダの値を選択するのに役立ちます。

あなたの例では、plot(reg) OR reg$lambda.min を実行して、CV エラーが最小になるラムダの値を確認できます。次に、ラムダのその値のテスト MSE を導出できます。デフォルトでは、 glmnet() は、自動的に選択されたラムダの範囲に対して Ridge または Lasso 回帰を実行しますが、これは最小のテスト MSE を与えない可能性があります。お役に立てれば!

お役に立てれば!

于 2015-03-28T21:23:39.033 に答える
2

reg$lambda.min と reg$lambda.1se の間; lambda.min は明らかに最小の MSE を提供しますが、エラーにどれだけ柔軟に対応できるかによっては、reg$lambda.1se を選択することをお勧めします。ラムダ値として reg$lambda.min と reg$lambda.1se の平均を選択することもできます。

于 2016-05-07T11:22:33.677 に答える