Bisakah seseorang menjelaskan apa argumen foldid di glmnet?

8

Saya mencoba menentukan alfa apa yang akan digunakan dalam glmnetfungsi saya , tetapi file bantuan memberitahu saya:

Perhatikan bahwa cv.glmnet TIDAK mencari nilai untuk alpha. Nilai spesifik harus diberikan, jika alpha = 1 diasumsikan secara default. Jika pengguna ingin memvalidasi silang alpha juga, mereka harus memanggil cv.glmnet dengan vektor foldid yang sudah dihitung sebelumnya , dan kemudian menggunakan vektor lipatan yang sama ini dalam panggilan terpisah ke cv.glmnet dengan nilai alpha yang berbeda.

Namun, saya tidak mengerti:

  1. Apa vektor / argumen foldid itu.
  2. Cara membuat vektor foldid
  3. Cara menggunakan argumen foldid.

Setiap bantuan dengan ini akan sangat dihargai!

ahli hutan
sumber
Saya pikir parameter ini masuk akal ketika Anda membandingkan model yang berbeda. jadi Anda ingin mengontrol lipatan dan menentukannya terlebih dahulu. Untuk memilih alpha, Anda harus mencoba nilai parameter yang berbeda.
marbel

Jawaban:

6

fold.idmemungkinkan pengguna untuk menentukan sebelumnya lipatan validasi silang untuk cv.glmnet. Misalnya, jika saya memiliki beberapa data

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

Kemudian melewati kolom yang ditunjukkan sebagai fold.idargumen untuk cv.glmnetakan menyebabkan (misalnya) dua pengamatan pertama berada di lipatan yang sama, dan pengamatan ketiga dan keempat berada di lipatan yang sama (berbeda).

Para penulis menyarankan bahwa jika Anda ingin memilih antara beberapa kumpulan berdasarkan estimasi validasi silang dari beberapa kesalahan pada optimal , maka itu adalah praktik terbaik untuk menggunakan struktur lipatan yang sama di setiap validasi silang Anda saat menentukan masing-masing .αλαλα

Matthew Drury
sumber
Jadi fold.id perlu berupa matriks dengan jumlah baris yang sama dengan matriks input saya (x)? Apakah itu benar?
theforestecologist
Apakah ada cara strategis untuk mengatur fold.id, atau apakah itu sepenuhnya arbitrer? Dengan kata lain, bagaimana saya mendefinisikan fold.id yang cocok?
theforestecologist
2
Hanya vektor bilangan bulat, saya percaya. Tapi ya, vektor harus memiliki satu entri untuk setiap baris matriks desain Anda.
Matthew Drury
Itu tergantung pada data Anda, tetapi kasus paling sederhana ditutupi oleh sesuatu seperti rbinom(now(X), n.folds, rep(1/n.folds, n.folds)).
Matthew Drury
Apa cara terbaik untuk mengatur ini untuk data deret waktu?
Frank
1

Menurut Glmnet Vignette , salah satu cara untuk mengatur foldidglmnet adalah dengan:

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

Dan kemudian berlaku untuk serangkaian alfa:

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)

The sample()Fungsi dasarnya memungkinkan Anda untuk menghasilkan vektor dari nomor acak dalam rentang Anda pasokan (= 1: nfolds) untuk panjang respon variabel matriks y . Dengan cara ini, Anda menetapkan setiap baris matriks input ke lipatan acak (tetapi sekarang disetel).

ahli hutan
sumber
Adakah yang mengerti bagaimana penulis sketsa memutuskan bahwa alpha = 1 paling baik berdasarkan 4 grafik yang mereka cetak? Kutipan mereka: Kami melihat laso (alpha = 1) melakukan yang terbaik di sini. Kita juga melihat bahwa kisaran lambda yang digunakan berbeda dengan alpha. "... Saya hanya tidak mengerti bagaimana mereka menentukan alpha = 1 yang terbaik ??
theforestecologist
Saya percaya alasannya adalah karena menggunakan jumlah variabel paling sedikit. Berarti itu adalah model "paling sederhana" dan harus digeneralisasi dengan lebih baik.
marbel