Lasso kontra adaptacyjny Lasso

12

LASSO i adaptacyjne LASSO to dwie różne rzeczy, prawda? (Dla mnie kary wyglądają inaczej, ale sprawdzam tylko, czy coś przegapiłem).

Kiedy ogólnie mówisz o elastycznej siatce, to czy w specjalnym etui LASSO czy adaptacyjnym LASSO?

Który robi pakiet glmnet, pod warunkiem, że wybierzesz alpha = 1?

Adaptacyjny LASSO działa w łagodniejszych warunkach, prawda? Oba mają właściwość oracle w odpowiednich danych, prawda?

Pan Walidacja
źródło

Odpowiedzi:

15

Krótkie odpowiedzi na twoje pytania:

  • Lasso i adaptacyjne lasso są różne. (Sprawdź Zou (2006), aby zobaczyć, w jaki sposób adaptacyjne lasso różni się od standardowego lasso).
  • Lasso to specjalny przypadek elastycznej siatki. (Patrz Zou i Hastie (2005) .)
    Adaptacyjne lasso nie jest specjalnym przypadkiem elastycznej siatki.
    Siatka elastyczna nie jest specjalnym przypadkiem lasso lub adaptacyjnego lasso.
  • Funkcja glmnetw pakiecie „glmnet” w R wykonuje lasso (nie adaptacyjne lasso) dla alpha=1.
  • Czy lasso działa w łagodniejszych warunkach niż lasso adaptacyjne? Nie mogę odpowiedzieć na to pytanie (powinienem sprawdzić w Zou (2006) ).
  • Tylko adaptacyjne lasso (ale nie lasso ani elastyczna siatka) ma właściwość wyroczni. (Zobacz Zou (2006) .)

Bibliografia:

Richard Hardy
źródło
12

Rozwiązania LASSO to rozwiązania, które minimalizują

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

adaptacyjne lasso po prostu dodaje do tego wagi, aby spróbować przeciwdziałać znanemu problemowi szacunków LASSO.

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

Często widzisz , gdzie to niektóre wstępne szacunki (być może z samego użycia LASSO, lub najmniejszych kwadratów itp.). Czasami adaptacyjne lasso jest dopasowane przy użyciu „podejścia ścieżkowego”, w którym ciężar można zmieniać za pomocą˜ β j β λwj=1/β~jβ~jβλ

kara glmnet. współczynnik glmnet

wj(λ)=w(β~j(λ))
. W pakiecie wagi można określić za pomocą argumentu . Nie jestem pewien, czy możesz określić „podejście ścieżkowe” w .glmnetpenalty.factorglmnet
bdeonovic
źródło
Zapomniałeś wziąć wartości bezwzględne w kategoriach karnych.
Richard Hardy,
Mały dodatek: mianownik wagi powinien być , jest często ustawiane na 1, ale można je również oszacować za pomocą weryfikacji krzyżowej. Ponadto poprawne jest użycie uzyskanego z estymatora root-n (ale masz rację, można użyć LASSO i LS). γ β|β|γγβ
Marcel10,
Zasadniczo glmnet domyślnie wykonuje LASSO lub elastyczną siatkę, ale możesz przełączyć ją na adaptacyjną LASSO (lub EN), określając odpowiednie wagi? Jeśli tak jest, dziękuję milion!
Walidacja
@MrValidation, zauważ, że autorzy nowych metod, takich jak adaptacyjne lasso, mogą mieć kod dla tej metody na swoich stronach internetowych (czasami po prostu podają odniesienie do pakietu R, który sami napisali).
Richard Hardy
1
Myślę, że argument dotyczący wag w glmnet odnosi się do wag do obserwacji, a nie do kar
jmb
3

Adaptacyjny LASSO służy do spójnego wyboru zmiennych. Problemy, które napotykamy podczas korzystania z LASSO do wyboru zmiennych, to:

  • Parametr skurczu musi być większy do wyboru niż prognozowania
  • Duże niezerowe parametry będą zbyt małe, aby obciążenie było zbyt duże
  • Małe niezerowe parametry nie mogą być konsekwentnie wykrywane
  • Wysokie korelacje między predyktorami prowadzą do słabej wydajności selekcji

Zatem LASSO jest spójny tylko przy wyborze zmiennych w pewnych warunkach parametru skurczu, parametrów (warunek beta-min) i korelacji (warunek niereprezentatywny). Szczegółowe wyjaśnienie znajduje się na stronach 101–106 mojej pracy magisterskiej .

LASSO często zawiera zbyt wiele zmiennych przy wyborze parametru strojenia do prognozowania, ale prawdziwy model jest bardzo prawdopodobne, że jest to podzbiór tych zmiennych. Sugeruje to zastosowanie drugiego etapu szacowania, takiego jak adaptacyjny LASSO, który kontroluje odchylenie oszacowania LASSO przy użyciu parametru strojenia optymalnego do przewidywania. Prowadzi to do konsekwentnego wyboru (lub właściwości wyroczni) bez warunków wymienionych powyżej.

Możesz użyć glmnet do adaptacyjnego LASSO. Najpierw potrzebujesz wstępnego oszacowania, albo najmniejszych kwadratów, grzbietu, a nawet oszacowań LASSO, aby obliczyć masy. Następnie możesz zaimplementować adaptacyjną LASSO, skalując macierz X. Oto przykład z wykorzystaniem wstępnych oszacowań metodą najmniejszych kwadratów na danych treningowych:

# 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
źródło