Saya menggunakan cv.glmnet
untuk menemukan prediktor. Pengaturan yang saya gunakan adalah sebagai berikut:
lassoResults<-cv.glmnet(x=countDiffs,y=responseDiffs,alpha=1,nfolds=cvfold)
bestlambda<-lassoResults$lambda.min
results<-predict(lassoResults,s=bestlambda,type="coefficients")
choicePred<-rownames(results)[which(results !=0)]
Untuk membuat yakin hasilnya direproduksi saya set.seed(1)
. Hasilnya sangat bervariasi. Saya menjalankan kode yang sama persis 100 untuk melihat bagaimana variabel hasilnya. Dalam menjalankan 98/100 memiliki satu prediktor tertentu selalu dipilih (kadang-kadang hanya pada itu sendiri); prediktor lain dipilih (co-efisien bukan nol) biasanya 50/100 kali.
Jadi dikatakan kepada saya bahwa setiap kali validasi silang berjalan itu mungkin akan memilih lambda terbaik yang berbeda, karena pengacakan awal dari lipatan penting. Orang lain telah melihat masalah ini ( hasil CV.glmnet ) tetapi tidak ada solusi yang disarankan.
Saya berpikir bahwa mungkin yang muncul 98/100 mungkin sangat berkorelasi dengan yang lain? Hasilnya memang stabil jika saya hanya menjalankan LOOCV ( ), tapi saya ingin tahu mengapa mereka sangat variabel ketika .
set.seed(1)
menjalankancv.glmnet()
100 kali? Itu bukan metodologi yang bagus untuk reproduksibilitas; lebih baik keset.seed()
kanan sebelum setiap lari, atau jaga agar lipatannya konstan di seluruh lintasan. Setiap panggilan Anda untukcv.glmnet()
meneleponsample()
N kali. Jadi jika panjang data Anda pernah berubah, maka reprodubilitas akan berubah.