Contoh tentang cara melakukan validasi silang vanilla polos untuk laso glmnetpada mtcars
kumpulan data.
Memuat kumpulan data.
Mempersiapkan fitur (variabel independen). Mereka harus dari matrixkelas. Cara termudah untuk mengkonversi yang dfberisi variabel kategori ke matrixadalah melalui model.matrix. Pikiran Anda, secara default glmnetcocok mencegat, sehingga Anda lebih baik menghapus intersep dari matriks model.
Mempersiapkan respons (variabel dependen). Mari kode mobil dengan rata-rata di atas mpgsebagai efisien ('1') dan sisanya tidak efisien ('0'). Ubah variabel ini menjadi faktor.
Jalankan validasi silang melalui cv.glmnet. Ini akan mengambil alpha=1dari glmnetparameter 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. glmnetsebenarnya menyediakan 2 lambda: lambda.mindan 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 alphajuga, 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.glmnetdan itu berasal dari default glmnettentu saja ?glmnetdi konsol R))))