R'de çapraz doğrulayıcı kement regresyonu


10

R işlevi cv.glm (kütüphane: önyükleme), genelleştirilmiş doğrusal modeller için tahmini K-kat çapraz doğrulama tahmin hatasını hesaplar ve deltayı döndürür. Bu işlevi bir kement regresyonu (kütüphane: glmnet) için kullanmak mantıklı mı ve eğer öyleyse, bu nasıl yapılabilir? Glmnet kütüphanesi, en iyi dönüş parametresini elde etmek için çapraz doğrulamayı kullanır, ancak son glmnet denklemini çapraz doğrulayan herhangi bir örnek bulamadım.


2
Kesinlikle mantıklıdır ve LASSO yalnızca bir (hiper-) parametresi üzerinde optimizasyon yapsa da, en iyi tahminin elde edilmesi için örnek dışı performanstan yararlanabileceğiniz bir dış çapraz doğrulama döngüsüne ihtiyacınız vardır. Bkz. CV / Bootstrap kullanarak makine öğrenme algoritmalarını eğiterek fazla yükleyebilir misiniz? ve belirtilen belgeler.
Scortchi - Monica'yı eski durumuna döndürün

Glm esp yerine glmnet kullanılması önerilir. CV yapıyorsanız. Hatırlarsam, glm paketinin kullanımı acı verir. Ayrıca, cv.glmnet cv.glm'den daha fazla parametre gösterir.
smci

Yanıtlar:


9

Lasso vanilya düz çapraz doğrulama yapmak için nasıl bir örnek glmnetile ilgili mtcars veri seti.

  1. Veri kümesini yükleyin.

  2. Özellikleri hazırlayın (bağımsız değişkenler). matrixSınıfları olmalı . Dönüştürmek için en kolay yolu dfiçine kategorik değişkenler içeren matrixyoluyladır model.matrix. Varsayılan olarak glmnetkesmeye uyduğunu unutmayın, böylece model matrisinden kesmeyi daha iyi çıkarırsınız.

  3. Yanıt hazırlayın (bağımlı değişken). Ortalamanın üzerinde arabaları mpgverimli ('1') ve geri kalanı verimsiz ('0') olarak kodlayalım. Bu değişkeni faktöre dönüştürün.

  4. Üzerinden çapraz doğrulamayı çalıştırın cv.glmnet. İstediğiniz alpha=1varsayılan glmnetparametrelerden başlayacaktır : Kement regresyonu.

  5. Çapraz doğrulamanın çıktısını inceleyerek en az 2 bilgi ile ilgilenebilirsiniz:

    • lambda, çapraz doğrulanmış hatayı en aza indirir. glmnetaslında 2 lambda sağlar: lambda.minve lambda.1se. Kullanmak için pratik bir istatistikçi olarak sizin karar çağrınız.

    • sonuçta düzenli katsayılar.

Lütfen yukarıdaki talimatlara göre R koduna bakın:

# 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

Son Yorumlar:

  • modelin çıktısı, katsayıların istatistiksel önemi hakkında hiçbir şey söylemez, sadece değerler.

  • İstediğiniz l1 cezalandırıcı (kement), bu blog gönderisinde ve bu yığın değiş tokuş sorusunda kanıtlandığı gibi istikrarsızlıktan dolayı ünlüdür . Daha iyi bir yol da çapraz onaylamak olabilir alpha, bu da l1 ve l2 cezalandırıcılarının uygun karışımına karar vermenizi sağlar.

  • çapraz doğrulama yapmanın alternatif bir yolu, caret'e yönelmek olabilir train( ... method='glmnet')

  • ve son olarak, hakkında daha fazla bilgi edinmenin en iyi yolu cv.glmnetve varsayılan olarak gelenler glmnetelbette ?glmnetR'nin konsolunda))))


Güzel cevap. .. CV'yi birden çok kez çalıştırmaya ve örneklemeyi hesaba katmak için hata eğrisini (bkz.? cv.glmnet) engellemeye de değer.
user20650

@SergeyBushmanov ÇOK FAYDALI!
theforestecologist

Merhaba, bunun eski bir gönderi olduğunu biliyorum, ama sana bir soru sormak istedim. Modelin çıktısının katsayıların istatistiksel önemi hakkında hiçbir şey söylemediğinden bahsediyorsunuz, bu yüzden bunların anlamlı olup olmadığını nasıl belirlersiniz?
Jun Jang

@JunJang "Katsayılar için istatistiksel bir önemi yoktur" paketin yazarlarının ifadesi, ben değil. Bu ifade, paket yazarlarının kitabından birinde veya paketin vinyetinde tam olarak hatırlamıyorum. Böyle bir durumda, katsayıların önemli olup olmadığını söylemek yerine, bunların "yararlı" olduğunu veya hedefi çapraz doğrulama yoluyla açıklamamayı tercih edersiniz.
Sergey Bushmanov
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.