Лассо проти адаптивного Лассо


12

LASSO та адаптивний LASSO - це дві різні речі, правда? (Для мене покарання виглядають інакше, але я просто перевіряю, чи я щось пропускаю.)

Якщо ви загалом говорите про еластичну сітку, це особливий корпус LASSO або адаптивний LASSO?

Який з них виконує пакунок glmnet, якщо ви вибрали альфа = 1?

Адаптивний LASSO працює на м'яких умовах, правда? Обидва мають властивість oracle у відповідних даних, правда?

Відповіді:


15

Короткі відповіді на ваші запитання:

  • Лассо та адаптивне ласо відрізняються. (Перевірте Zou (2006), щоб побачити, наскільки адаптивне ласо відрізняється від стандартного ласо.)
  • Лассо - це особливий корпус еластичної сітки. (Див. Zou & Hastie (2005) .)
    Адаптивне ласо не є особливим випадком еластичної сітки.
    Еластична сітка не є особливим випадком ласо або адаптивного ласо.
  • Функцію glmnetв пакеті "glmnet" в R виконує ласо (не адаптивне ласо) для alpha=1.
  • Чи працює ласо в м'яких умовах, ніж адаптивне ласо? Я не можу відповісти на це (слід перевірити Zou (2006) на розуміння).
  • Лише адаптивна ласо (але не ласо або еластична сітка) має властивість оракул. (Див. Zou (2006) .)

Список літератури:


12

Рішення LASSO - це рішення, які мінімізують

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

адаптивне ласо просто додає до цього ваги, щоб спробувати протидіяти відомим питанням оцінок LASSO як необ'єктивне.

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

Часто ви побачитеwj=1/β~jβ~jβλ

wj(λ)=w(β~j(λ))
glmnetpenalty.factorglmnet

Ви забули прийняти абсолютні значення в штрафних умовах.
Річард Харді

|β|γγβ

Таким чином, glmnet за замовчуванням виконує LASSO або еластичну сітку, але ви можете переключити це на адаптивний LASSO (або EN), вказавши відповідні ваги? Якщо це так, дякую мільйон!
Валідація містера

@MrValidation, зауважте, що автори нових методів, таких як адаптивний ласо, можуть мати код методу на своїх веб-сайтах (іноді вони просто дають посилання на пакет R, який вони самі написали).
Річард Харді

1
Я думаю, що аргумент ваг у glmnet стосується ваг для спостережень, а не ваг для пенальті
jmb

3

Адаптивний LASSO використовується для послідовного вибору змінної. Проблеми, з якими ми стикаємось при використанні LASSO для вибору змінної:

  • Параметр усадки повинен бути більшим для вибору, ніж прогнозування
  • Великі ненульові параметри будуть занадто малі, щоб зміщення було занадто великим
  • Невеликі ненульові параметри неможливо виявити послідовно
  • Висока кореляція між прогнозами призводить до поганої ефективності відбору

Таким чином, LASSO узгоджується лише для вибору змінної за певних умов параметра усадки, параметрів (умова бета-хв) та кореляцій (умова непредставима). Детальні пояснення див. На сторінках 101-106 моєї магістерської дисертації .

LASSO часто включає занадто багато змінних при виборі параметру настройки для прогнозування, але справжня модель, швидше за все, є підмножиною цих змінних. Це дозволяє використовувати вторинну стадію оцінки, наприклад адаптивний LASSO, який контролює зміщення оцінки LASSO, використовуючи параметр налаштування оптимального прогнозування. Це призводить до послідовного вибору (або властивості Oracle) без вищезазначених умов.

Ви можете використовувати glmnet для адаптивного LASSO. Спочатку для розрахунку ваги вам потрібна початкова оцінка, або найменші квадрати, гребеня або навіть оцінки LASSO. Тоді ви можете реалізувати адаптивний LASSO шляхом масштабування матриці X. Ось приклад з використанням найменших квадратів початкових оцінок щодо навчальних даних:

# 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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.