Saya bertanya-tanya bagaimana cara pendekatan dengan benar pelatihan dan pengujian model LASSO menggunakan glmnet di R?
- Secara khusus, saya bertanya-tanya bagaimana cara melakukannya jika kurangnya set data uji eksternal mengharuskan saya gunakan validasi silang (atau pendekatan serupa lainnya) untuk menguji model LASSO saya.
Biarkan saya memecah skenario saya:
Saya hanya memiliki satu set data untuk menginformasikan dan melatih model glmnet saya. Akibatnya, saya harus menggunakan validasi silang untuk membagi data saya untuk juga menghasilkan cara untuk menguji model saya.
Saya sudah menggunakan cv.glmnet
, yang menurut detail paket :
Apakah k-fold cross-validation untuk glmnet, menghasilkan plot, dan mengembalikan nilai untuk lambda.
Apakah validasi silang dilakukan pada
cv.glmnet
hanya untuk memilih lambda terbaik, atau apakah itu juga berfungsi sebagai prosedur validasi silang yang lebih umum?- Dengan kata lain, apakah saya masih perlu melakukan langkah validasi silang lain untuk "menguji" model saya?
Saya bekerja dengan asumsi bahwa, "ya saya lakukan."
Karena itu, bagaimana cara saya mendekati memvalidasi cv.glmnet
model saya ?
Apakah saya harus melakukannya secara manual, atau mungkin
caret
fungsi ini berguna untuk model glmnet?Apakah saya menggunakan dua "loop" konsentris lintas validasi? ... Apakah saya menggunakan "loop dalam" melalui CV
cv.glmnet
untuk menentukan nilai lambda terbaik dalam setiap lipatan k "loop eksternal" dari pemrosesan validasi silang k-fold ?Jika saya melakukan validasi silang dari
cv.glmnet
model validasi silang yang sudah saya lakukan, bagaimana cara mengisolasi model "terbaik" (dari nilai lambda "terbaik") dari masing-masingcv.glmnet
model dalam setiap lipatan dari "loop eksternal" validasi silang saya?- Catatan: Saya mendefinisikan model "terbaik" sebagai model yang terkait dengan lambda yang menghasilkan MSE dalam 1 SE dari minimum ... ini adalah
$lambda.1se
dalamcv.glmnet
model.
- Catatan: Saya mendefinisikan model "terbaik" sebagai model yang terkait dengan lambda yang menghasilkan MSE dalam 1 SE dari minimum ... ini adalah
Konteks:
Saya mencoba memprediksi usia pohon ("umur") berdasarkan diameter pohon ("D"), D ^ 2, dan spesies ("faktor (SPEC)"). [persamaan yang dihasilkan: Age ~ D + factor(SPEC) + D^2
]. Saya memiliki ~ 50 ribu baris data, tetapi datanya longitudinal (melacak individu melalui waktu) dan terdiri dari ~ 65 spesies.
sumber
Jawaban:
Apakah validasi silang dilakukan di cv.glmnet hanya untuk memilih lambda terbaik, atau apakah itu juga berfungsi sebagai prosedur validasi silang yang lebih umum?
Ia melakukan hampir semua yang dibutuhkan dalam validasi silang. Sebagai contoh, ini cocok
lambda
nilai yang pada data, memilih model terbaik dan akhirnya melatih model dengan parameter yang sesuai.Misalnya, di objek yang dikembalikan ::
cvm
adalah galat yang divalidasi silang rata-rata.cvsd
adalah estimasi standar deviasi.Seperti nilai yang dikembalikan lainnya, ini dihitung pada set tes. Akhirnya,
glmnet.fit
memberikan model yang dilatih pada semua data (pelatihan + tes) dengan parameter terbaik.Apakah saya harus melakukannya secara manual, atau mungkin fungsi caret berguna untuk model glmnet?
Anda tidak perlu melakukan ini secara manual. 'Caret' akan sangat berguna, dan merupakan salah satu paket favorit saya karena berfungsi untuk semua model lain dengan sintaks yang sama. Saya sendiri sering menggunakan
caret
daripadacv.glmnet
. Namun, dalam skenario Anda pada dasarnya sama.Apakah saya menggunakan dua "loop" konsentris validasi silang? ... Apakah saya menggunakan "loop dalam" dari CV melalui cv.glmnet untuk menentukan nilai lambda terbaik dalam setiap lipatan k "loop eksternal" dari k-fold pemrosesan validasi silang?
Anda bisa melakukan ini dan konsep ini sangat mirip dengan ide Nested Cross-Validation Nested cross validation untuk pemilihan model .
Jika saya melakukan validasi silang dari model cv.glmnet saya yang sudah divalidasi silang, bagaimana cara mengisolasi model "terbaik" (dari nilai lambda "terbaik") dari setiap model cv.glmnet dalam setiap lipatan dari loop eksternal saya jika tidak " "validasi silang?
Jalankan saja loop di mana Anda menghasilkan data pelatihan dan data uji dijalankan
cv.glmnet
pada data pelatihan dan gunakan modelglmnet.fit
untuk memprediksi data uji.sumber
cv.glmnet
fungsi sepertiR
opensource. Cukup ketikcv.glmnet
konsol.