Lasso contre Lasso adaptatif

12

LASSO et LASSO adaptatif sont deux choses différentes, non? (Pour moi, les pénalités sont différentes, mais je vérifie simplement si je manque quelque chose.)

Quand on parle généralement de filet élastique, est-ce le cas particulier LASSO ou LASSO adaptatif?

Lequel le paquet glmnet fait-il, à condition de choisir alpha = 1?

Adaptive LASSO fonctionne dans des conditions plus douces, non? Les deux ont la propriété oracle dans les données appropriées, non?

Mr Validation
la source

Réponses:

15

Brèves réponses à vos questions:

  • Le lasso et le lasso adaptatif sont différents. (Consultez Zou (2006) pour voir en quoi le lasso adaptatif diffère du lasso standard.)
  • Le lasso est un cas spécial de filet élastique. (Voir Zou et Hastie (2005) .)
    Le lasso adaptatif n'est pas un cas particulier de filet élastique.
    Le filet élastique n'est pas un cas particulier du lasso ou du lasso adaptatif.
  • La fonction glmnetdans le paquet "glmnet" dans R exécute le lasso (pas le lasso adaptatif) pour alpha=1.
  • Le lasso fonctionne-t-il dans des conditions plus douces que le lasso adaptatif? Je ne peux pas répondre à celui-ci (devrait vérifier Zou (2006) pour des idées).
  • Seul le lasso adaptatif (mais pas le lasso ou le filet élastique) a la propriété oracle. (Voir Zou (2006) .)

Références:

Richard Hardy
la source
12

Les solutions LASSO sont des solutions qui minimisent

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

le lasso adaptatif ajoute simplement des poids à cela pour essayer de contrer le problème connu des biais de LASSO.

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

Souvent, vous verrez , où sont des estimations initiales de la (peut-être en utilisant simplement LASSO, ou en utilisant les moindres carrés, etc.). Parfois, le lasso adaptatif est ajusté en utilisant une "approche par chemin" où le poids peut changer avec˜ β j β λwj=1/β~jβ~jβλ

glmnet penalty.factor glmnet

wj(λ)=w(β~j(λ))
. Dans le , les poids peuvent être spécifiés avec l' . Je ne sais pas si vous pouvez spécifier "l'approche par chemin" dans .glmnetpenalty.factorglmnet
bdeonovic
la source
Vous avez oublié de prendre des valeurs absolues dans les conditions de pénalité.
Richard Hardy
Petit ajout: le dénominateur des poids doit être le , est souvent fixé à 1, mais peut également être estimé à l'aide de la validation croisée. De plus, il est uniquement valable d'utiliser le obtenu à partir d'un estimateur cohérent racine-n (mais vous avez raison, LASSO et LS peuvent être utilisés). γ β|β|γγβ
Marcel10
Donc, fondamentalement, glmnet exécute LASSO ou un filet élastique par défaut, mais vous pouvez passer à LASSO adaptatif (ou EN) en spécifiant les poids appropriés? Si tel est le cas, merci mille fois!
Mr Validation
@MrValidation, notez que les auteurs de nouvelles méthodes comme le lasso adaptatif peuvent avoir du code pour la méthode sur leurs sites Web (parfois ils donnent simplement une référence à un package R qu'ils ont eux-mêmes écrit).
Richard Hardy
1
Je pense que l'argument des poids dans glmnet fait référence aux poids pour les observations et non aux poids pour les pénalités
jmb
3

LASSO adaptatif est utilisé pour une sélection de variables cohérente. Les problèmes que nous rencontrons lors de l'utilisation de LASSO pour la sélection de variables sont:

  • Le paramètre de rétrécissement doit être plus grand pour la sélection que pour la prédiction
  • Les grands paramètres non nuls seront trop petits pour que le biais soit trop grand
  • Les petits paramètres non nuls ne peuvent pas être détectés de manière cohérente
  • Des corrélations élevées entre les prédicteurs conduisent à de mauvaises performances de sélection

Ainsi, le LASSO n'est cohérent pour la sélection des variables que dans certaines conditions sur le paramètre de rétrécissement, les paramètres (condition bêta-min) et les corrélations (condition irreprésentable). Voir les pages 101-106 de ma thèse de maîtrise pour une explication détaillée.

Le LASSO comprend souvent trop de variables lors de la sélection du paramètre de réglage pour la prédiction, mais le vrai modèle est très probablement un sous-ensemble de ces variables. Cela suggère d'utiliser une étape secondaire d'estimation comme le LASSO adaptatif qui contrôle le biais de l'estimation LASSO en utilisant le paramètre de réglage optimal de la prédiction. Cela conduit à une sélection cohérente (ou propriété oracle) sans les conditions mentionnées ci-dessus.

Vous pouvez utiliser glmnet pour LASSO adaptatif. Tout d'abord, vous avez besoin d'une estimation initiale, soit des moindres carrés, des crêtes ou même des estimations LASSO, pour calculer les poids. Ensuite, vous pouvez implémenter LASSO adaptatif en mettant à l'échelle la matrice X. Voici un exemple utilisant les estimations initiales des moindres carrés sur les données d'entraînement:

# 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
la source