Saya punya dataset dengan 338 prediktor dan 570 instance (sayangnya tidak dapat diunggah) di mana saya menggunakan Lasso untuk melakukan pemilihan fitur. Secara khusus, saya menggunakan cv.glmnet
fungsi dari glmnet
sebagai berikut, di mana mydata_matrix
matriks biner 570 x 339 dan hasilnya adalah biner:
library(glmnet)
x_dat <- mydata_matrix[, -ncol(mydata_matrix)]
y <- mydata_matrix[, ncol(mydata_matrix)]
cvfit <- cv.glmnet(x_dat, y, family='binomial')
Plot ini menunjukkan bahwa penyimpangan terendah terjadi ketika semua variabel telah dihapus dari model. Apakah ini benar-benar mengatakan bahwa hanya menggunakan intersepsi lebih prediktif dari hasil daripada menggunakan bahkan satu prediktor, atau apakah saya membuat kesalahan, mungkin dalam data atau dalam pemanggilan fungsi?
Ini mirip dengan pertanyaan sebelumnya , tetapi itu tidak mendapat tanggapan.
plot(cvfit)
r
classification
lasso
glmnet
Stuart Lacy
sumber
sumber
Jawaban:
Saya tidak berpikir Anda telah membuat kesalahan dalam kode. Ini adalah masalah menafsirkan output.
Lasso tidak menunjukkan individu mana yang "lebih dapat diprediksi" daripada yang lain. Ini hanya memiliki kecenderungan bawaan untuk memperkirakan koefisien sebagai nol. Semakin besar koefisien penalticatatan( λ ) adalah, semakin besar kecenderungan itu.
Plot validasi silang Anda menunjukkan bahwa semakin banyak koefisien yang dipaksa ke nol, model melakukan pekerjaan yang lebih baik dan lebih baik dalam memprediksi subset nilai yang telah dihapus secara acak dari dataset. Ketika kesalahan prediksi tervalidasi silang terbaik (diukur sebagai "Penyimpangan Binomial" di sini) tercapai ketika semua koefisien nol, Anda harus menduga bahwa tidak ada kombinasi linear dari setiap subset dari regressor yang mungkin berguna untuk memprediksi hasil.
Anda dapat memverifikasi ini dengan menghasilkan respons acak yang independen dari semua regressor dan menerapkan prosedur pemasangan Anda kepada mereka. Berikut cara cepat untuk mengemulasi dataset Anda:
Kerangka data
X
memiliki satu kolom biner acak bernama "y" dan 338 kolom biner lainnya (yang namanya tidak penting). Saya menggunakan pendekatan Anda untuk mundur "y" terhadap variabel-variabel itu, tetapi - hanya untuk berhati-hati - saya memastikan vektor responsy
dan matriks modelx
cocok (yang mungkin tidak mereka lakukan jika ada nilai yang hilang dalam data) :Hasilnya sangat seperti milik Anda:
Memang, dengan data yang sepenuhnya acak ini Lasso masih mengembalikan sembilan perkiraan koefisien bukan nol (meskipun kita tahu, dengan konstruksi, bahwa nilai yang benar semuanya nol). Tetapi kita seharusnya tidak mengharapkan kesempurnaan. Selain itu, karena pemasangan didasarkan pada penghilangan subset data secara acak untuk validasi silang, Anda biasanya tidak akan mendapatkan output yang sama dari satu proses ke proses berikutnya. Dalam contoh ini, panggilan kedua untuk
cv.glmnet
menghasilkan kecocokan dengan hanya satu koefisien bukan nol. Untuk alasan ini, jika Anda punya waktu, itu selalu ide yang baik untuk menjalankan kembali prosedur pemasangan beberapa kali dan melacak estimasi koefisien yang secara konsisten bukan nol. Untuk data ini - dengan ratusan regresi - ini akan membutuhkan beberapa menit untuk mengulangi sembilan kali lagi.Delapan dari regresi ini memiliki perkiraan nol di sekitar setengah dari kecocokan; sisanya tidak pernah memiliki estimasi nol. Ini menunjukkan sejauh mana Lasso masih akan memasukkan estimasi koefisien bukan nol bahkan ketika koefisien itu sendiri benar-benar nol.
sumber
Jika Anda ingin mendapatkan lebih banyak informasi dapat menggunakan fungsi ini
Grafik harus serupa dengan Label yang memungkinkan untuk mengidentifikasi efek lambda untuk para regressor.
Bisakah Anda menggunakan nilai differents dari x (dalam model disebut faktor alfa) ke 0 (regresi ridge) ke 1 (LASSO Regression). Nilai [0,1] adalah regresi net elastis
sumber
Jawabannya bahwa tidak ada kombinasi linear dari variabel yang berguna dalam memprediksi hasil adalah benar dalam beberapa tetapi tidak semua kasus.
Saya memiliki plot seperti di atas yang disebabkan oleh multikolinieritas dalam data saya. Mengurangi korelasi memungkinkan Lasso bekerja tetapi juga menghapus informasi yang berguna tentang hasil. Rangkaian variabel yang lebih baik diperoleh dengan menggunakan kepentingan hutan acak untuk menyaring variabel dan kemudian menggunakan Lasso.
sumber
Itu mungkin tapi sedikit mengejutkan. LASSO dapat melakukan hal-hal aneh ketika Anda memiliki collinearity, dalam hal ini Anda mungkin harus menetapkan alpha <1 sehingga Anda memasang jaring elastis sebagai gantinya. Anda dapat memilih alpha dengan validasi silang tetapi pastikan Anda menggunakan lipatan yang sama untuk setiap nilai alpha.
sumber