Contoh tentang cara melakukan validasi silang vanilla polos untuk laso glmnet
pada mtcars
kumpulan data.
Memuat kumpulan data.
Mempersiapkan fitur (variabel independen). Mereka harus dari matrix
kelas. Cara termudah untuk mengkonversi yang df
berisi variabel kategori ke matrix
adalah melalui model.matrix
. Pikiran Anda, secara default glmnet
cocok mencegat, sehingga Anda lebih baik menghapus intersep dari matriks model.
Mempersiapkan respons (variabel dependen). Mari kode mobil dengan rata-rata di atas mpg
sebagai efisien ('1') dan sisanya tidak efisien ('0'). Ubah variabel ini menjadi faktor.
Jalankan validasi silang melalui cv.glmnet
. Ini akan mengambil alpha=1
dari glmnet
parameter default , yang adalah apa yang Anda minta: lasso regression.
Dengan memeriksa hasil validasi silang, Anda mungkin tertarik pada setidaknya 2 informasi:
lambda, yang meminimalkan kesalahan lintas-divalidasi. glmnet
sebenarnya menyediakan 2 lambda: lambda.min
dan lambda.1se
. Ini panggilan penilaian Anda sebagai ahli statistik yang akan digunakan.
menghasilkan koefisien yang diatur.
Silakan lihat kode R sesuai instruksi di atas:
# Load data set
data("mtcars")
# Prepare data set
x <- model.matrix(~.-1, data= mtcars[,-1])
mpg <- ifelse( mtcars$mpg < mean(mtcars$mpg), 0, 1)
y <- factor(mpg, labels = c('notEfficient', 'efficient'))
library(glmnet)
# Run cross-validation
mod_cv <- cv.glmnet(x=x, y=y, family='binomial')
mod_cv$lambda.1se
[1] 0.108442
coef(mod_cv, mod_cv$lambda.1se)
1
(Intercept) 5.6971598
cyl -0.9822704
disp .
hp .
drat .
wt .
qsec .
vs .
am .
gear .
carb .
mod_cv$lambda.min
[1] 0.01537137
coef(mod_cv, mod_cv$lambda.min)
1
(Intercept) 6.04249733
cyl -0.95867199
disp .
hp -0.01962924
drat 0.83578090
wt .
qsec .
vs .
am 2.65798203
gear .
carb -0.67974620
Komentar terakhir:
perhatikan, output model tidak mengatakan apa-apa tentang signifikansi statistik dari koefisien, hanya nilai.
penalizer l1 (lasso), yang Anda minta, terkenal karena ketidakstabilan yang dibuktikan dalam ini posting blog dan stackexchange ini pertanyaan . Cara yang lebih baik adalah dengan melakukan validasi silang alpha
juga, yang akan memungkinkan Anda memutuskan campuran yang tepat dari penalizer l1 dan l2.
cara alternatif untuk melakukan validasi silang bisa dengan beralih ke tanda sisipan train( ... method='glmnet')
dan akhirnya, cara terbaik untuk belajar lebih banyak tentang cv.glmnet
dan itu berasal dari default glmnet
tentu saja ?glmnet
di konsol R))))