誰かがglmnetのfoldid引数が何をするか説明できますか?


8

関数で使用するアルファを決定しようとしglmnetていますが、ヘルプファイルに次のように記載されています。

cv.glmnetはアルファの値を検索しないことに注意してください。特定の値を指定する必要があります。指定しない場合、デフォルトでalpha = 1と見なされます。ユーザーがアルファも交差検証したい場合は、事前に計算されたベクトルfoldidを使用してcv.glmnetを呼び出し、次にこの同じフォールドベクトルを異なるアルファ値のcv.glmnetへの呼び出しで使用する必要があります。

しかし、私は理解していません:

  1. foldid vector / argumentとは何ですか。
  2. foldidベクトルの作成方法
  3. foldid引数の使用方法。

これでどんな援助でも大歓迎です!


異なるモデルを比較する場合、このパラメーターは意味があると思います。したがって、折り目を制御し、事前に指定する必要があります。アルファを選択するには、パラメーターの異なる値を試す必要があります。
marbel

回答:


6

fold.idユーザーがの相互検証フォールドを事前に指定できるようにしますcv.glmnet。たとえば、データがある場合

x    | y    | fold.id
-----+------+--------
0    | 1    | 1
1    | 1    | 1
0    | 0    | 2
1    | 2    | 2
.    | .    | .

次に、fold.id指定された列を引数として渡すと、cv.glmnet(たとえば)最初の2つの観測が同じフォールドに存在し、3番目と4番目の観測が同じ(異なる)フォールドに存在します。

著者は、最適なでのいくつかのエラーの相互検証推定に基づいて個別のコレクションから選択する場合、それぞれに同じフォールド構造を使用することがベストプラクティスであることを示唆しています。各決定するときの相互検証の数。αλαλα


したがって、fold.idは、入力行列(x)と同じ行数の行列である必要がありますか?そうですか?
森林生態学者2015

fold.idを設定する戦略的な方法はありますか、それとも完全に任意ですか?つまり、適切なfold.idを定義するにはどうすればよいですか?
森林生態学者2015

2
私が信じている整数のただのベクトル。しかし、はい、ベクトルには設計行列の各行に対して1つのエントリが必要です。
Matthew Drury

それはあなたのデータに依存しますが、最も単純なケースはのようなものでカバーされますrbinom(now(X), n.folds, rep(1/n.folds, n.folds))
Matthew Drury、2015

時系列データにこれを設定する最良の方法は何ですか?
フランク

1

Glmnet Vignetteによると、glmnetを設定する1つの方法foldidは次のとおりです。

foldid<-sample(1:10,size=length(y),replace=TRUE)

そして、一連のアルファに適用します。

cv1=cv.glmnet(x,y,foldid=foldid,alpha=1)
cv.5=cv.glmnet(x,y,foldid=foldid,alpha=.5)
cv0=cv.glmnet(x,y,foldid=foldid,alpha=0)

このsample()関数を使用すると、基本的に、応答変数行列yの長さに対して、指定した範囲(= 1:nfolds)の乱数のベクトルを生成できます。このようにして、入力行列の各行をランダムな(ただし設定された)分割に割り当てます。


ビネットの作成者が、印刷した4つのグラフに基づいてalpha = 1が最適であると決定した方法を誰もが理解していますか?彼らの引用:lasso(alpha = 1)はここで最高のことをすることがわかります。また、使用されるラムダの範囲がアルファによって異なることもわかります。 "... alpha = 1が最適であると彼らがどのように判断したのかわからない??
森林生態学者

その理由は、変数の使用量が最も少ないためだと思います。これは「最も単純な」モデルであり、より一般化する必要があります。
marbel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.