Kement ve adaptif Kement Karşılaştırması


12

LASSO ve uyarlanabilir LASSO iki farklı şey, değil mi? (Bana göre cezalar farklı görünüyor, ama sadece bir şeyleri özleyip özlemediğimi kontrol ediyorum.)

Genelde elastik ağ hakkında konuştuğunuzda, özel durum LASSO veya uyarlanabilir LASSO mu?

Alpha = 1'i seçmeniz koşuluyla glmnet paketi hangisini yapar?

Uyarlanabilir LASSO daha ılımlı koşullarda çalışır, değil mi? Her ikisi de uygun verilerde oracle özelliğine sahiptir, değil mi?

Yanıtlar:


15

Sorularınıza kısa cevaplar:

  • Kement ve uyarlamalı kement farklıdır. ( Uyarlanabilir kementin standart kementten nasıl farklı olduğunu görmek için Zou'ya (2006) bakın.)
  • Kement, elastik ağın özel bir halidir. (Bkz. Zou & Hastie (2005) .)
    Uyarlanabilir kement, elastik ağın özel bir durumu değildir.
    Elastik ağ özel bir kement veya uyarlanabilir kement durumu değildir.
  • glmnetR'deki "glmnet" paketindeki işlev için kement (uyarlamalı kement değil) gerçekleştirir alpha=1.
  • Kement, uyarlanabilir kementten daha hafif koşullarda çalışır mı? Buna cevap veremem ( Zou'yu (2006) içgörüleri kontrol etmeli ).
  • Yalnızca adaptif kement (kement veya elastik ağ değil) kâhin özelliğine sahiptir. (Bakınız Zou (2006) .)

Referanslar:


12

LASSO çözümleri en aza indiren çözümlerdir

S(β|X,y)=12n||y-Xβ||2+λΣj|βj|

uyarlanabilir kement, Liaso tahminlerinin önyargılı olduğu bilinen sayısına karşı koymak için buna ağırlık ekler.

Sbir(β|X,y,w)=12n||y-Xβ||2+λΣjwj|βj|

wj=1/β~jβ~jβλ

wj(λ)=w(β~j(λ))
glmnetpenalty.factorglmnet

Ceza şartlarında mutlak değerler almayı unuttunuz.
Richard Hardy

|β|γγβ

Temel olarak, glmnet varsayılan olarak LASSO veya elastik ağ gerçekleştirir, ancak uygun ağırlıkları belirleyerek bunu adaptif LASSO'ya (veya EN) dönüştürebilirsiniz? Bu durumda, bir milyon teşekkürler!
Bay Validation

@MrValidation, uyarlanabilir kement gibi yeni yöntemlerin yazarlarının web sitelerinde yöntem için kodları olabileceğini unutmayın (bazen sadece kendilerinin yazdıkları bir R paketine referans verirler).
Richard Hardy

1
Bence glmnet'teki ağırlıklar argümanı, ceza ağırlıkları değil, gözlem ağırlıkları anlamına geliyor
jmb

3

Uyarlanabilir LASSO, tutarlı değişken seçimi için kullanılır. Değişken seçimi için LASSO kullanılırken karşılaştığımız sorunlar:

  • Büzülme parametresi seçim için tahminden daha büyük olmalıdır
  • Büyük sıfır olmayan parametreler çok küçük olacaktır, böylece sapma çok büyük olur
  • Küçük sıfır olmayan parametreler tutarlı bir şekilde algılanamıyor
  • Tahminciler arasındaki yüksek korelasyonlar düşük seçim performansına yol açar

Bu nedenle LASSO sadece büzülme parametresi, parametreler (beta-min koşulu) ve korelasyonlar (yeniden temsil edilemez durum) üzerindeki bazı koşullar altında değişken seçim için tutarlıdır. Master tezimin 101-106. Sayfalarına bakın bir açıklama için .

LASSO, tahmin için ayar parametresini seçerken genellikle çok fazla değişken içerir, ancak gerçek model büyük olasılıkla bu değişkenlerin bir alt kümesidir. Bu, tahmin-optimal ayarlama parametresini kullanarak LASSO tahmininin sapmasını kontrol eden uyarlanabilir LASSO gibi ikincil bir tahmin aşamasının kullanılmasını önerir. Bu, yukarıda belirtilen koşullar olmadan tutarlı seçime (veya oracle özelliğine) yol açar.

Uyarlanabilir LASSO için glmnet kullanabilirsiniz. İlk olarak, ağırlıkları hesaplamak için en küçük kareler, sırt veya hatta LASSO tahminleri gibi bir ilk tahmine ihtiyacınız vardır. Daha sonra X matrisini ölçekleyerek uyarlamalı LASSO uygulayabilirsiniz. Aşağıda, egzersiz verilerine ilişkin en küçük karelerin ilk tahminlerini kullanan bir örnek verilmiştir:

# get data
y <- train[, 11]
x <- train[, -11]
x <- as.matrix(x)
n <- nrow(x)

# standardize data
ymean <- mean(y)
y <- y-mean(y)  
xmean <- colMeans(x)
xnorm <- sqrt(n-1)*apply(x,2,sd)
x <- scale(x, center = xmean, scale = xnorm)

# fit ols 
lm.fit <- lm(y ~ x)
beta.init <- coef(lm.fit)[-1] # exclude 0 intercept

# calculate weights
w  <- abs(beta.init)  
x2 <- scale(x, center=FALSE, scale=1/w)  

# fit adaptive lasso
require(glmnet)
lasso.fit <- cv.glmnet(x2, y, family = "gaussian", alpha = 1, standardize = FALSE, nfolds = 10)
beta <- predict(lasso.fit, x2, type="coefficients", s="lambda.min")[-1]

# calculate estimates
beta <- beta * w / xnorm # back to original scale
beta <- matrix(beta, nrow=1)
xmean <- matrix(xmean, nrow=10)
b0 <- apply(beta, 1, function(a) ymean - a %*% xmean) # intercept
coef <- cbind(b0, beta)
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.