James, Witten, Hastie, Tibshirani (2013) tarafından 'R'de Uygulamalarla İstatistiksel Öğrenmeye Giriş' kitabında Ridge Regresyon / Kement ile ilgili LAB bölümü §6.6'dan geçiyorum .
Daha spesifik olarak, scikit-öğrenim Ridge
modelini R paketinden 'ISLR' 'Hitters' veri kümesine uygulamaya çalışıyorum . R kodunda gösterildiği gibi aynı özellik kümesini oluşturdum. Ancak, glmnet()
modelden elde edilen sonuçlara yaklaşamıyorum . Karşılaştırmak için bir L2 ayar parametresi seçtim. (scikit-learn'da 'alfa' argümanı).
Python:
regr = Ridge(alpha=11498)
regr.fit(X, y)
http://nbviewer.ipython.org/github/JWarmenhoven/ISL-python/blob/master/Notebooks/Chapter%206.ipynb
R:
Not argüman alpha=0
olarak glmnet()
L2 ceza uygulanmalıdır aracı (Ridge regresyon). Dokümantasyon için tek bir değer girmemesi konusunda uyarır lambda
, ancak sonuç bir vektörün kullanıldığı ISL ile aynıdır.
ridge.mod <- glmnet(x,y,alpha=0,lambda=11498)
Farklılıklara ne sebep olur?
Düzenleme: R'deki ceza paketinden
kullanırken penalized()
, katsayılar scikit-learn ile aynıdır.
ridge.mod2 <- penalized(y,x,lambda2=11498)
Belki de soru şu olabilir: ' Ridge regresyonu arasındaki glmnet()
ve penalized()
ne zaman arasındaki fark nedir ?
R paketinde kullanılan gerçek Fortran kodu için yeni python sarmalayıcısı glmnet
https://github.com/civisanalytics/python-glmnet
sklearn.linear_model.Ridge
belirlenmemiş kesişme tahmini (standart) yapar ve cezası||Xb - y - intercept||^2 + alpha ||b||^2
en aza indirgenirb
. Sonuçları hemen farklı kılan, cezanın önünde faktörler1/2
veya1/n_samples
her ikisi olabilir . Ceza ölçeklendirme sorununu hesaba katmak için, her iki durumda da cezayı 0 olarak ayarlayın, oradaki tutarsızlıkları giderin ve ardından cezanın ne kadar geri eklendiğini kontrol edin. Ve btw IMHO burada bu soruyu sormak için doğru yer.