Diberikan , apa perilaku teoritis dari koefisien LASSO dan mengapa?
Akan salah satu atau menyusut menjadi atau keduanya?
require(glmnet)
x1 = runif(100, 1, 2)
x2 = 2*x1
x_train = cbind(x1, x2)
y = 100*x1 + 100 + runif(1)
ridge.mod = cv.glmnet(x_train, y, alpha = 1)
coef(ridge.mod)
#3 x 1 sparse Matrix of class "dgCMatrix"
# 1
#(Intercept) 1.057426e+02
#x1 9.680073e+01
#x2 3.122502e-15
lasso
multicollinearity
John Hass
sumber
sumber
y = 100*x1 + 100 + runif(100)
, jika tidak, Anda mendapatkan nomor acak tunggal yang didaur ulang dan ditambahkan secara seragam ke semua entri lainnya.Jawaban:
Perhatikan itu
Untuk nilai tetap dari koefisien , penaltidiminimalkan ketika . Hal ini karena hukuman pada adalah dua kali sebagai tertimbang! Untuk memasukkan ini ke dalam notasi,memenuhi untuk setiap . Oleh karena itu, estimator lasoβ1+2β2 |β1|+|β2| β1=0 β1
Seperti yang ditunjukkan oleh Firebug, alasan mengapa simulasi Anda menunjukkan hasil yang kontradiktif adalah bahwax1=x2 (100,0) (0,100) (a,b) argmin a,b≥0 a+b=100
glmnet
secara otomatis skala untuk menyamakan varian fitur. Artinya, karena penggunaanglmnet
, kami efektif dalam hal . Di sana, penaksir tidak lagi unik: dan keduanya dalam arg min. Memang, ada di untuk sehingga .Ini menjelaskan mengapa simulasi ditemukan khususnya . Memang, koefisien kedua akan selalu nol, terlepas dari urutan fitur-fiturnya.β^2=0
Bukti: Asumsikan WLOG bahwa fitur memenuhi . Keturunan koordinat (algoritma yang digunakan oleh ) menghitung untuk iterasi pertama: diikuti oleh mana . Kemudian, karenax∈Rn ∥x∥2=1
glmnet
glmnet
sumber
glmnet
fitur penskalaan diaktifkan secara default, saya cukup yakin. Jadi dan menjadi sama dalam model.ridge.mod=cv.glmnet(x_train,y,alpha=1, standardize = FALSE); coef(ridge.mod)
Ketika saya menjalankan kembali kode Anda, saya mendapatkan bahwa koefisien secara numerik tidak dapat dibedakan dari nol.x2
Untuk memahami lebih baik mengapa LASSO menetapkan koefisien ke nol, Anda harus melihat hubungan antara LASSO dan Least Angle Regression (LAR). LASSO dapat dilihat sebagai LAR dengan modifikasi khusus.
Algoritma LAR kira-kira seperti ini: Mulai dengan model kosong (kecuali untuk intersep). Kemudian tambahkan variabel prediktor yang paling berkorelasi dengan , katakanlah . Secara bertahap ubah koefisien prediktor itu , hingga sisa berkorelasi sama dengan dan variabel prediktor lain . Kemudian, ubah koefisien dan hingga prediksi ketiga berkorelasi sama dengan sisa dan seterusnya.y xj βj y−c−xjβj xj xk xj xk xl y−c−xjβj−xkβk
LASSO dapat dilihat sebagai LAR dengan putaran berikut: segera setelah koefisien prediktor dalam model Anda (prediktor "aktif") menyentuh nol, jatuhkan prediktor dari model tersebut. Inilah yang terjadi ketika Anda regresi pada prediktor collinear: kedua akan ditambahkan ke model pada saat yang sama dan, sebagai koefisien mereka berubah, korelasi masing-masing dengan residual akan berubah secara proporsional, tetapi salah satu prediktor akan mendapatkan menjatuhkan dari set aktif terlebih dahulu karena menyentuh nol pertama. Adapun yang mana dari dua prediktor collinear itu, saya tidak tahu. [EDIT: Ketika Anda membalik urutan dan , Anda dapat melihat bahwa koefisieny x1 x2 x1 diatur ke nol. Jadi algoritma glmnet sepertinya mengatur koefisien tersebut menjadi nol terlebih dahulu yang dipesan kemudian dalam matriks desain.]
Sumber yang menjelaskan hal-hal ini secara lebih rinci adalah Bab 3 dalam "Elemen Pembelajaran Statistik" oleh Friedman, Hastie dan Tibshirani.
sumber