Cv.glmnet (R'de LASSO regresyonu) ile çapraz doğrulama nasıl yapılır?


10

Ben R glmnet kullanarak bir LASSO modeli eğitim ve test düzgün yaklaşmak merak ediyorum?

  • Özellikle, harici bir test veri setinin eksikliği LASSO modelimi test etmek için çapraz doğrulamayı (veya benzer bir yaklaşımı) kullanmamı gerektiriyorsa bunu nasıl yapacağımı merak ediyorum .

Senaryomu yıkayım:

Glmnet modelimi bilgilendirmek ve eğitmek için sadece bir veri setim var. Sonuç olarak, modelimi test etmenin bir yolunu oluşturmak için verilerimi bölmek için çapraz doğrulamayı kullanmam gerekecek.

Paket ayrıntılarınacv.glmnet göre zaten kullanıyorum :

Glmnet için k-kat çapraz doğrulaması yapar, bir grafik oluşturur ve lambda için bir değer döndürür.

  • Çapraz doğrulama cv.glmnetsadece en iyi lambda'yı seçmek için mi yapılır , yoksa daha genel bir çapraz doğrulama prosedürü olarak mı işlev görür?

    • Başka bir deyişle, yine de modelimi "test etmek" için başka bir çapraz doğrulama adımı gerçekleştirmem gerekiyor mu?

"Evet, yaparım" varsayımı ile çalışıyorum.

Bu durumda, modelimi çapraz doğrulamaya nasıl yaklaşırım cv.glmnet?

  • Bunu manuel olarak yapmak zorunda mıyım yoksa caretişlev belki de glmnet modelleri için yararlı mı?

  • ? ... ı ile CV bir "iç döngü" kullanımı fazlası cross doğrulama iki eş merkezli "döngü" kullanımı mı cv.glmnetiyi lambda değeri belirlemek için olan her bir k bir "dış döngü" kıvrımları çapraz doğrulama işleme k misli ?

    • Zaten çapraz doğrulama cv.glmnetmodelimin çapraz doğrulamasını yaparsam, "en iyi" modeli ("en iyi" lambda değerinden), cv.glmnetaksi takdirde çapraz doğrulamanın her bir katındaki her modelden nasıl ayırırım?

      • Not: en az 1 SE içinde MSE üreten bir lambda ile ilişkili model olarak ben tanımlayan ediyorum "en iyi" modeli ... işte bu $lambda.1seiçinde cv.glmnetmodelin.

Bağlam:

Ağaç çapı ("D"), D ^ 2 ve tür ("faktör (SPEC)") dayalı ağaç yaşı ("yaş") tahmin etmeye çalışıyorum. sonuçta elde edilen denklem: Age ~ D + factor(SPEC) + D^2]. ~ 50K veri satırım var, ancak veri boyuna (zaman içinde bireyleri izler) ve ~ 65 türden oluşur.


1
Yorum yapmadan kapanmaya oy verenler için: bu yararlı değil ... yorumunuzda sorunun ne olduğunu bana bildirin ve düzeltmeye çalışacağım.
theforestecologist

1
Kapatmak için oy vermiyorlar ve CrossValidated'a taşımak için oy veriyorlar. Oyumu yeni ekledim.
Hack-R

@theforestecologist: 'Kapat' düğmesine tıklayarak kapanma / göç nedenlerini görebilirsiniz.
DWin

Sorduğunuz için teşekkürler, tam olarak bu soruyu sordum. Ve çok değişkenli Y'ye sahip olduğum için şapka kullanamıyorum. Ama kaynak kodunu kontrol ettiniz ve ek CV'ye gerek olmadığını doğruladınız mı? Kaynak kodunu takip etmek oldukça zor olabilir.
qoheleth

Yanıtlar:


3

Çapraz doğrulama sadece en iyi lambda'yı seçmek için cv.glmnet'te mi yapılır, yoksa daha genel bir çapraz doğrulama prosedürü olarak mı işlev görür?

Çapraz doğrulamada ihtiyaç duyulan hemen hemen her şeyi yapar. Örneğin lambda, veriler üzerindeki olası değerlere uyar , en iyi modeli seçer ve son olarak modeli uygun parametrelerle eğitir.

Örneğin, döndürülen nesnede ::

cvmortalama çapraz doğrulanmış hatadır. cvsdtahmini standart sapmadır.

Diğer döndürülen değerler gibi, bunlar test setinde hesaplanır. Sonunda,

glmnet.fit en iyi parametrelerle tüm veriler (eğitim + test) konusunda eğitilmiş modeli verir.

Bunu manuel olarak yapmak zorunda mıyım, yoksa belki de düzeltme işlevi glmnet modelleri için yararlı mı?

Bunu manuel olarak yapmanız gerekmez. 'Caret' çok kullanışlı olurdu ve benim en sevdiğim paketlerden biri çünkü aynı sözdizimine sahip diğer tüm modellerde çalışıyor. Kendimi sık kullandığınız caretziyade cv.glmnet. Ancak, senaryonuzda aslında aynıdır.

Çapraz doğrulamanın iki eşmerkezli "döngüsünü" mü kullanıyorum? ... k-katının "dış döngüsünün" her bir katının en iyi lambda değerini belirlemek için cv.glmnet yoluyla CV'nin "iç döngüsü" nü kullanıyorum? çapraz doğrulama işlemi?

Bunu yapabilirsiniz ve bu kavram, model seçimi için İç İçe Çapraz Doğrulama İç İçe çapraz doğrulama fikrine çok benzer .

Zaten çapraz doğrulayan cv.glmnet modelimin çapraz doğrulamasını yaparsam, "en iyi" modeli ("en iyi" lambda değerinden), aksi takdirde "harici döngümün her bir katındaki her cv.glmnet modelinden nasıl ayırırım? "çapraz doğrulama?

Bir egzersiz verisi oluşturduğunuz ve egzersiz verisi cv.glmnetüzerinde çalışan test verilerini oluşturduğunuz bir test yapın ve test verilerini glmnet.fittahmin etmek için modeli kullanın.


@discupulus: Teşekkürler. Bunun için bir tür kanıt sağlayabilir misiniz? (yani, lütfen bana doğru yürü). Ayrıca, cevabınız göz önüne alındığında, bu, veriler için bir performans metriği bildirmek için başka çapraz doğrulama işleminin gerekli olmadığı anlamına mı geliyor? (Lambda.1se davasının MSE'sini son model performansım olarak rapor edebilir miyim?)
theforestecologist

Evet, başka çapraz doğrulama gerekli değildir. Kanıt cv.glmnetolarak R, açık kaynak gibi işlevin kaynak koduna bakabilirsiniz . Sadece cv.glmnetkonsolu yazın.
discipulus

3
@discipulus. Trevor Hastie'ye "cv.glmnet (R uygulaması) sadece lambda'yı seçmek için CV yapıyor mu yoksa seçilen lambda'yı doğrulamak için bir dış CV yapıyor mu? Başka bir deyişle, Seçilen lambda'yı doğrulamak ister misin? " ve "oldukça, sadece lambda'yı seçmek için" diye cevap verdi.
qoheleth

@theforestecologist Çapraz doğrulama hakkında daha fazla bilgi edinmeye ve eğitim sonrası eğitiminizi bulmaya çalışıyorum. Cv.glmnet ile ne demek istediğini anlamıyorum, aynı zamanda daha genel bir çapraz doğrulama prosedürü olarak da hizmet ediyorum. Ben seçmek için mevcut tek parametre lambda olduğunu düşündüm - hangi çapraz doğrulama dış katman var? Cevap verebilirseniz minnettar olurum. Teşekkürler!
user2450223
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.