Laço vs. Laço adaptável


12

LASSO e LASSO adaptável são duas coisas diferentes, certo? (Para mim, as penalidades parecem diferentes, mas estou apenas verificando se sinto falta de alguma coisa.)

Quando você geralmente fala sobre redes elásticas, o caso especial é LASSO ou LASSO adaptável?

Qual é o pacote glmnet, desde que você escolha alpha = 1?

O LASSO adaptável funciona em condições mais amenas, certo? Ambos têm a propriedade oracle em dados adequados, certo?

Respostas:


15

Respostas breves às suas perguntas:

  • Laço e laço adaptável são diferentes. (Verifique Zou (2006) para ver como o laço adaptativo difere do laço padrão.)
  • Laço é um caso especial de rede elástica. (Ver Zou & Hastie (2005) .)
    Laço adaptável não é um caso especial de rede elástica.
    A rede elástica não é um caso especial de laço ou laço adaptável.
  • A função glmnetno pacote "glmnet" em R executa um laço (laço não adaptável) para alpha=1.
  • O laço funciona em condições mais amenas do que o laço adaptável? Não posso responder a este (deve verificar Zou (2006) para obter informações).
  • Somente o laço adaptável (mas não o laço ou a rede elástica) tem a propriedade oracle. (Veja Zou (2006) .)

Referências:


12

As soluções LASSO são soluções que minimizam

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

o laço adaptativo simplesmente adiciona pesos a isso para tentar neutralizar o problema conhecido de que as estimativas do LASSO são tendenciosas.

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

Freqüentemente, você verá , onde são algumas estimativas iniciais do (talvez usando apenas o LASSO ou usando mínimos quadrados, etc.). Às vezes, o laço adaptável é adequado usando uma "abordagem de caminho", na qual o peso é alterado com˜ β j β λwj=1/β~jβ~jβλ

pena de glmnet. fator glmnet

wj(λ)=w(β~j(λ))
. No , os pesos podem ser especificados com o . Não tenho certeza se você pode especificar a "abordagem de caminho" em .glmnetpenalty.factorglmnet

Você esqueceu de aceitar valores absolutos nos termos da penalidade.
Richard Hardy

|β|γγβ

Então, basicamente, o glmnet executa LASSO ou rede elástica por padrão, mas você pode alternar para LASSO adaptável (ou EN) especificando pesos apropriados? Se for esse o caso, obrigado um milhão!
Validação do Sr.

@ MrValidation, observe que os autores de novos métodos, como o laço adaptável, podem ter código para o método em seus sites (às vezes eles apenas fazem uma referência a um pacote R que eles mesmos escreveram).
Richard Hardy

11
Eu acho que o argumento de pesos em glmnet refere-se a pesos para observações, e não pesos para penalidades
jmb

3

O LASSO adaptável é usado para seleção consistente de variáveis. Os problemas que encontramos ao usar o LASSO para seleção de variáveis ​​são:

  • O parâmetro de encolhimento deve ser maior para seleção que para previsão
  • Parâmetros diferentes de zero grandes serão muito pequenos para que o viés seja muito grande
  • Parâmetros diferentes de zero pequenos não podem ser detectados consistentemente
  • Altas correlações entre preditores levam a um desempenho ruim na seleção

Assim, o LASSO é consistente apenas para a seleção de variáveis ​​sob algumas condições no parâmetro de encolhimento, parâmetros (condição beta-min) e correlações (condição irrepresentável). Veja as páginas 101-106 da minha dissertação de mestrado para uma explicação detalhada.

O LASSO geralmente inclui muitas variáveis ​​ao selecionar o parâmetro de ajuste para previsão, mas o modelo verdadeiro provavelmente é um subconjunto dessas variáveis. Isso sugere o uso de um estágio secundário de estimativa, como o LASSO adaptável, que controla o viés da estimativa do LASSO usando o parâmetro de ajuste ideal de previsão. Isso leva a uma seleção consistente (ou propriedade do oracle) sem as condições mencionadas acima.

Você pode usar o glmnet para o LASSO adaptável. Primeiro, você precisa de uma estimativa inicial, pelo menos quadrados, cume ou mesmo estimativas LASSO, para calcular pesos. Então você pode implementar o LASSO adaptável escalando a matriz X. Aqui está um exemplo usando estimativas iniciais de mínimos quadrados em dados de treinamento:

# 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)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.