Lazo vs. Lazo adaptativo

12

LASSO y LASSO adaptativo son dos cosas diferentes, ¿verdad? (Para mí, las penalizaciones se ven diferentes, pero solo estoy verificando si me pierdo algo).

Cuando generalmente habla de red elástica, ¿es el caso especial LASSO o LASSO adaptativo?

¿Cuál hace el paquete glmnet, siempre que elija alpha = 1?

LASSO adaptativo funciona en condiciones más suaves, ¿verdad? Ambos tienen la propiedad oráculo en datos adecuados, ¿verdad?

Sr. Validación
fuente

Respuestas:

15

Breves respuestas a sus preguntas:

  • Lazo y lazo adaptable son diferentes. (Consulte Zou (2006) para ver cómo el lazo adaptativo difiere del lazo estándar).
  • Lasso es un caso especial de red elástica. (Ver Zou y Hastie (2005) .)
    El lazo adaptativo no es un caso especial de red elástica.
    La red elástica no es un caso especial de lazo o lazo adaptable.
  • La función glmneten el paquete "glmnet" en R realiza un lazo (no un lazo adaptable) para alpha=1.
  • ¿El lazo funciona en condiciones más suaves que el lazo adaptativo? No puedo responder a esta (debería consultar Zou (2006) para obtener información).
  • Solo el lazo adaptativo (pero no el lazo o la red elástica) tiene la propiedad oráculo. (Ver Zou (2006) .)

Referencias

Richard Hardy
fuente
12

Las soluciones LASSO son soluciones que minimizan

Q(βEl |X,y)=12norteEl |El |y-XβEl |El |2+λjEl |βjEl |

el lazo adaptativo simplemente agrega peso a esto para tratar de contrarrestar el problema conocido de que las estimaciones de LASSO están sesgadas.

Quna(βEl |X,y,w)=12norteEl |El |y-XβEl |El |2+λjwjEl |βjEl |

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

wj(λ)=w(β~j(λ))
glmnetfactor de penalizaciónglmnet
bdeonovic
fuente
Olvidó tomar valores absolutos en los términos de penalización.
Richard Hardy
El |βEl |γγβ
Entonces, básicamente, glmnet realiza LASSO o red elástica por defecto, pero puede cambiar esto a LASSO adaptativo (o EN) especificando los pesos apropiados. Si este es el caso, ¡un millón de gracias!
Sr. Validación
@MrValidation, tenga en cuenta que los autores de nuevos métodos como el lazo adaptativo pueden tener código para el método en sus sitios web (a veces solo dan una referencia a un paquete R que ellos mismos han escrito).
Richard Hardy
1
Creo que el argumento de pesos en glmnet se refiere a los pesos para las observaciones, y no los coeficientes de ponderación para las penas
JMB
3

LASSO adaptativo se utiliza para la selección de variables consistentes. Los problemas que encontramos al usar LASSO para la selección de variables son:

  • El parámetro de contracción debe ser mayor para la selección que para la predicción.
  • Los parámetros grandes distintos de cero serán demasiado pequeños para que el sesgo sea demasiado grande
  • Los parámetros pequeños distintos de cero no se pueden detectar de forma coherente
  • Las altas correlaciones entre predictores conducen a un bajo rendimiento de selección

Por lo tanto, el LASSO solo es consistente para la selección de variables bajo algunas condiciones en el parámetro de contracción, parámetros (condición beta-min) y correlaciones (condición irrepresentable). Consulte las páginas 101-106 de mi disertación de maestría para obtener una explicación detallada.

El LASSO a menudo incluye demasiadas variables al seleccionar el parámetro de ajuste para la predicción, pero es muy probable que el modelo verdadero sea un subconjunto de estas variables. Esto sugiere utilizar una etapa secundaria de estimación como el LASSO adaptativo que controla el sesgo de la estimación LASSO utilizando el parámetro de ajuste óptimo de predicción. Esto lleva a una selección consistente (o propiedad de oráculo) sin las condiciones mencionadas anteriormente.

Puede usar glmnet para LASSO adaptativo. Primero necesita una estimación inicial, ya sea mínimos cuadrados, cresta o incluso estimaciones LASSO, para calcular los pesos. Luego puede implementar LASSO adaptativo escalando la matriz X. Aquí hay un ejemplo usando estimaciones iniciales de mínimos cuadrados en los datos de entrenamiento:

# 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
fuente