Lasso vs. adaptives Lasso

12

LASSO und adaptives LASSO sind zwei verschiedene Dinge, richtig? (Für mich sehen die Strafen anders aus, aber ich überprüfe nur, ob ich etwas verpasse.)

Wenn Sie allgemein von elastischem Netz sprechen, ist der Sonderfall LASSO oder adaptives LASSO?

Welches macht das glmnet-Paket, vorausgesetzt Sie wählen alpha = 1?

Adaptive LASSO funktioniert unter milderen Bedingungen, oder? Beide haben die Orakeleigenschaft in geeigneten Daten, oder?

Herr Validierung
quelle

Antworten:

15

Kurze Antworten auf Ihre Fragen:

  • Lasso und adaptives Lasso sind unterschiedlich. (Überprüfen Sie Zou (2006), um zu sehen, wie sich adaptives Lasso vom Standard-Lasso unterscheidet.)
  • Lasso ist ein Sonderfall eines elastischen Netzes. (Siehe Zou & Hastie (2005) .)
    Adaptives Lasso ist kein Sonderfall eines elastischen Netzes.
    Elastisches Netz ist kein Sonderfall von Lasso oder adaptivem Lasso.
  • Die Funktion glmnetim "glmnet" -Paket in R führt Lasso (nicht adaptives Lasso) für aus alpha=1.
  • Funktioniert Lasso unter milderen Bedingungen als adaptives Lasso? Ich kann diese Frage nicht beantworten (sollte Zou (2006) auf Erkenntnisse überprüfen ).
  • Nur das adaptive Lasso (aber nicht Lasso oder elastisches Netz) hat die Orakeleigenschaft. (Siehe Zou (2006) .)

Verweise:

Richard Hardy
quelle
12

LASSO-Lösungen sind Lösungen, die minimieren

Q(β|X,y)=12n||yXβ||2+λj|βj|

Das adaptive Lasso fügt diesem einfach Gewichte hinzu, um dem bekannten Problem der Verzerrung der LASSO-Schätzungen entgegenzuwirken.

Qa(β|X,y,w)=12n||yXβ||2+λjwj|βj|

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

wj(λ)=w(β~j(λ))
glmnetpenalty.factorglmnet
bdeonovic
quelle
Sie haben vergessen, die absoluten Werte in den Strafbedingungen anzugeben.
Richard Hardy
|β|γγβ
Grundsätzlich führt glmnet standardmäßig LASSO oder elastisches Netz durch. Sie können dies jedoch auf adaptives LASSO (oder EN) umstellen, indem Sie geeignete Gewichte angeben. Wenn dies der Fall ist, vielen Dank!
Mr Validation
@MrValidation, beachten Sie, dass Autoren neuer Methoden wie adaptives Lasso möglicherweise Code für die Methode auf ihren Websites haben (manchmal geben sie nur einen Verweis auf ein R-Paket an, das sie selbst geschrieben haben).
Richard Hardy
1
Ich denke, das Gewichtungsargument in glmnet bezieht sich auf Gewichte für Beobachtungen und nicht auf Gewichte für Strafen
jmb
3

Adaptives LASSO wird zur konsistenten Variablenauswahl verwendet. Die Probleme, die bei der Verwendung des LASSO für die Variablenauswahl auftreten, sind:

  • Der Schrumpfungsparameter muss zur Auswahl größer sein als die Vorhersage
  • Große Parameter ungleich Null sind zu klein, so dass die Vorspannung zu groß ist
  • Kleine Parameter ungleich Null können nicht konsistent erkannt werden
  • Hohe Korrelationen zwischen Prädiktoren führen zu einer schlechten Auswahlleistung

Daher ist der LASSO nur für die Variablenauswahl unter bestimmten Bedingungen hinsichtlich des Schrumpfungsparameters, der Parameter (Beta-Min-Bedingung) und der Korrelationen (nicht darstellbare Bedingung) konsistent. Eine ausführliche Erklärung finden Sie auf den Seiten 101-106 meiner Masterarbeit .

Das LASSO enthält häufig zu viele Variablen, wenn der Abstimmungsparameter für die Vorhersage ausgewählt wird, aber das wahre Modell ist sehr wahrscheinlich eine Teilmenge dieser Variablen. Dies legt nahe, eine sekundäre Schätzstufe wie das adaptive LASSO zu verwenden, die die Vorspannung der LASSO-Schätzung unter Verwendung des vorhersageoptimalen Abstimmungsparameters steuert. Dies führt zu einer konsistenten Auswahl (oder Orakeleigenschaft) ohne die oben genannten Bedingungen.

Sie können glmnet für adaptives LASSO verwenden. Zuerst benötigen Sie eine anfängliche Schätzung, entweder die kleinsten Quadrate, die Grat- oder sogar die LASSO-Schätzung, um die Gewichte zu berechnen. Anschließend können Sie adaptives LASSO implementieren, indem Sie die X-Matrix skalieren. Hier ist ein Beispiel mit anfänglichen Schätzungen der kleinsten Quadrate für Trainingsdaten:

# 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)
StatGrrl
quelle