Saya akan melalui bagian LAB §6.6 tentang Ridge Regression / Lasso dalam buku 'Pengantar Pembelajaran Statistik dengan Aplikasi dalam R' oleh James, Witten, Hastie, Tibshirani (2013).
Lebih khusus lagi, saya mencoba menerapkan model scikit-learning Ridge
ke dataset 'Hitters' dari paket R 'ISLR'. Saya telah membuat set fitur yang sama seperti yang ditunjukkan dalam kode R. Namun, saya tidak bisa mendekati hasil dari glmnet()
model. Saya telah memilih satu parameter tuning L2 untuk dibandingkan. (Argumen 'alpha' di scikit-learn).
Python:
regr = Ridge(alpha=11498)
regr.fit(X, y)
http://nbviewer.ipython.org/github/JWarmenhoven/ISL-python/blob/master/Notebooks/Chapter%206.ipynb
R:
Perhatikan bahwa argumen alpha=0
dalam glmnet()
berarti bahwa hukuman L2 harus diterapkan (regresi Ridge). Dokumentasi memperingatkan untuk tidak memasukkan nilai tunggal untuk lambda
, tetapi hasilnya sama seperti di ISL, di mana vektor digunakan.
ridge.mod <- glmnet(x,y,alpha=0,lambda=11498)
Apa yang menyebabkan perbedaan?
Sunting:
Ketika menggunakan penalized()
dari paket penalti dalam R, koefisiennya sama dengan scikit-learn.
ridge.mod2 <- penalized(y,x,lambda2=11498)
Mungkin pertanyaannya kemudian bisa juga: 'Apa perbedaan antara glmnet()
dan penalized()
kapan melakukan regresi Ridge?
Pembungkus python baru untuk kode Fortran aktual yang digunakan dalam paket R glmnet
https://github.com/civisanalytics/python-glmnet
sklearn.linear_model.Ridge
apakah estimasi intersep yang tidak dilakukan (standar) dan denda adalah sedemikian sehingga||Xb - y - intercept||^2 + alpha ||b||^2
diminimalkanb
. Mungkin ada faktor1/2
atau1/n_samples
atau keduanya di depan penalti, membuat hasil berbeda segera. Untuk memfaktorkan masalah penskalaan penalti, atur penalti ke 0 dalam kedua kasus, selesaikan perbedaan apa pun di sana, lalu periksa apa yang menambahkan penambahan penalti. Dan btw IMHO di sini adalah tempat yang tepat untuk menanyakan pertanyaan ini.