R - Kement Regresyonu - regresör başına farklı Lambda


11

Aşağıdakileri yapmak istiyorum:

1) beta katsayılarını elde etmek için OLS regresyonu ( süresi yoktur) ; regresyon için kullanılan değişkenleri ifade eder. Bunu tarafından yapıyorum jbjj

lm.model = lm(y~ 0 + x)
betas    = coefficients(lm.model)

2) Kriminal regresyon ceza süresi ile, seçim kriterleri tarafından verilen Bayes Bilgi Kriterleri (BIC) olacaktır.

λj=günlük(T)T|bj*|

burada değişken / sayısını, gözlem sayısı için ve 1. adımda elde edilen ilk betalar için eder). Kullanılan her için farklı olan bu belirli değeri için regresyon sonuçlarına sahip olmak istiyorum . Bu nedenle üç değişken varsa, üç farklı değer olacaktır .T b j λ j λ jjTbj*λjλj

OLS-Lasso optimizasyon problemi daha sonra

mbennbεR,n={Σt=1T(yt-bXt)2+TΣj=1m(λt|bj|)}

Bunu lar'da veya glmnet paketiyle R'de nasıl yapabilirim? Lambda'yı belirtmenin bir yolunu bulamıyorum ve çalıştırdığımda doğru sonuçları alıp almadığımdan% 100 emin değilim

lars.model <- lars(x,y,type = "lasso", intercept = FALSE)
predict.lars(lars.model, type="coefficients", mode="lambda")

Burada herhangi bir yardım için teşekkür ederim.


Güncelleme:

Şimdi aşağıdaki kodu kullandım:

fits.cv = cv.glmnet(x,y,type="mse",penalty.factor = pnlty)
lmin    = as.numeric(fits.cv[9]) #lambda.min
fits    = glmnet(x,y, alpha=1, intercept=FALSE, penalty.factor = pnlty)
coef    = coef(fits, s = lmin)

1. satırda , her bir regresör için farklı olan, belirtilen ceza faktörü ( ) ile çapraz doğrulamayı kullanıyorum. . Satır 2, minimum ortalama çapraz doğrulama hatası veren lambda olan fits.cv dosyasının "lambda.min" dosyasını seçer. Satır 3 , veriler üzerinde bir kement yerleşimi ( ) gerçekleştirir. Yine ceza faktörü . Satır 4 , satır 2'de seçilen "optimal" ait uyumlardan katsayıları çıkarır .λλλj=günlük(T)T|bj*|alpha=1λλ

Şimdi minimizasyon probleminin optimal çözümünü gösteren regresörler için beta katsayılarım var

mbennbεR,n={Σt=1T(yt-bXt)2+TΣj=1m(λt|bj|)}

bir ceza faktörü ile . Optimal katsayı kümesi büyük olasılıkla başlangıçta kullandığım regresörlerin bir alt kümesidir, bu, kullanılan regresörlerin sayısını azaltan Kement yönteminin bir sonucudur.λj=günlük(T)T|bj*|

Anlayışım ve kodum doğru mu?


2
Postanızda dolar işareti bulunan LATEX işaretlemesini kullanabilirsiniz. α$\alpha$ olur . Lütfen bunu yapın, çünkü insanlar sorunuzu daha kolay anlayabilecek ve bu nedenle cevaplayacaktır. α
Sycorax, Reinstate Monica'ya

Yanıtlar:


15

Gönderen glmnetbelgelerinde ( ?glmnet), bunu diferansiyel büzülme gerçekleştirmek mümkün olduğunu görüyoruz. Bu, OP'nin sorusunu en azından kısmen cevaplamamızı sağlıyor.

penalty.factor: Her katsayıya ayrı ceza faktörleri uygulanabilir. Bu, lambdadiferansiyel büzülmeye izin vermek için çoğalan bir sayıdır . Büzülme anlamına gelmeyen bazı değişkenler için 0 olabilir ve bu değişken her zaman modele dahil edilir. Varsayılan, tüm değişkenler için 1'dir (ve içinde listelenen değişkenler için örtük olarak sonsuzdur exclude). Not: Ceza faktörleri dahili olarak toplanmak üzere yeniden düzenlenir nvarsve lambdasıralama bu değişikliği yansıtacaktır.

Ancak soruyu tam olarak cevaplamak için, neyi başarmak istediğinize bağlı olarak kullanabileceğiniz iki yaklaşım olduğunu düşünüyorum.

  1. Sorunuz içinde küçülen diferansiyeli nasıl uygulanacağını olan glmnetve belirli bir değer için katsayılarını almak . Supplying st bazı değerler herhangi değerde değil 1 gerçekleştirir bu diferansiyel büzülme vardır  . Çekme st her biri için çekme elde etmek için b j olan φ J = log Tλpenalty.factorλbjBiraz cebir yapmalıyız. Letφjcezası faktörbjbeslenebilir durumda ne. Dokümantasyonda, bu değerlerinCϕj=ϕj stm=C m j = 1 logTfaktörü ile yeniden ölçeklendiğini görebiliriz.φj=günlükTT|bj*|φjbjpenalty.factorCφj=φj'. Bu,optimizj'nin aşağıdaki optimizasyon ifadesindeϕjyerinegeçtiğianlamına gelir. Yani için çözmekC, değerlerin kaynağıφ ' j için, ve sonra için katsayılarını ayıklamakλ=1. Kullanmanızı tavsiye ederim.m=CΣj=1mgünlükTT|bj*|φj'φjCφj'glmnetλ=1coef(model, s=1, exact=T)

  2. İkinci kullanım için, "standart" bir şekilde glmnet: Bir gerçekleştirir tekrar seçmek için kat çapraz doğrulama λ Eğer dışı örneği en aza indirmek, böylece MSE. Aşağıda daha ayrıntılı olarak açıkladığım budur. CV kullanmamızın ve örnek dışı MSE'yi kontrol etmemizin nedeni , örnek içi MSE'nin λ = 0 için her zaman en aza indirilmesidir , yani b sıradan bir MLE'dir. Değişken λ kullanırken CV kullanmak , modelin örnek dışı veriler üzerinde nasıl performans gösterdiğini tahmin etmemizi ve optimal olan (belirli bir anlamda) bir λ seçmemizi sağlar .kλλ=0bλλ

glmnetλλcoef(fits,s=something)λsomethingλ

λcv.glmnetglmnetpenalty.factor

Bu prosedür optimize eder

minbR,mΣt=1T(yt-bXt)2+λΣj=1m(φj|bj|)

φjjthpenalty.factorλφjλφλφλbλ

Bu temelde glmnetanladığım kadarıyla motivasyon : örnek dışı performansı konusunda aşırı iyimser olmayan bir regresyon modelini tahmin etmek için cezalandırılmış regresyon kullanmak. Bu sizin hedefinizse, belki de bu sizin için doğru yöntemdir.


+1 Bu doğrudur. Ayrıca regresyonun düzenli hale getirilmesinin bir bayesci olarak görülebileceğini de ekleyeceğim, yani maksimum bir posteriori (MAP) düzenli olarak maksimum benzerliktir (ML). Bu çerçevede çalışmak gerektiğinde kendini düzenlileştirme konusunda daha fazla esneklik sağlar.
TLJ

Eğer pnlty = log(24)/(24*betas); fits = glmnet(x,y, alpha=1, intercept=FALSE, penalty.factor = pnlty) koşarsam, lambda her risk faktörü için farklı olduğundan, belirttiğim lambdaya karşılık gelen regresör betalarını nasıl çıkarırım?
Dom

1
@Dom Tam olarak kullanmak istediğinizi elde etmenin bariz bir yolu olduğu için biraz geç kaldım glmnet. Gözden geçirilmiş cevabımı görün.
Sycorax, Reinstate Monica'yı

2
Her bir öngörücü için cezayı ayrı ayrı özelleştirmeye dikkat edin. Bu, bazı durumlarda kademeli değişken seçiminden başka bir şey değildir. Cezalandırılmış regresyon, çok sınırlı sayıda ceza parametresi ve tahmin ediciler arasında bilgi ödünç alarak ortalama kare hatasını azaltır.
Frank Harrell

2
@FrankHarrell Yorum için teşekkürler! Her bir öngörücüye farklı cezalar kullanmak, her parametre için farklı bir öngörüde bulunan bir Bayes modeline denk geliyor. Bu beni genel olarak Bayesci çıkarımda benzersiz bir tehlike olarak göstermiyor. Ayrıca, cezalandırılmış regresyonun tahmin ediciler arasında nasıl bilgi ödünç aldığını açıklayabilir misiniz? Böyle bir senaryoda durumun tam olarak nasıl anlaşıldığımdan emin değilim.
Sycorax, Reinstate Monica'yı
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.