LASSO 和自适应 LASSO 是两个不同的东西,对吧?(对我来说,处罚看起来不同,但我只是在检查我是否错过了什么。)
当您通常谈论弹性网时,是特例 LASSO 还是自适应 LASSO?
如果您选择 alpha=1,glmnet 包会执行哪一个?
自适应 LASSO 适用于较温和的条件,对吗?两者都在合适的数据中具有 oracle 属性,对吗?
LASSO 和自适应 LASSO 是两个不同的东西,对吧?(对我来说,处罚看起来不同,但我只是在检查我是否错过了什么。)
当您通常谈论弹性网时,是特例 LASSO 还是自适应 LASSO?
如果您选择 alpha=1,glmnet 包会执行哪一个?
自适应 LASSO 适用于较温和的条件,对吗?两者都在合适的数据中具有 oracle 属性,对吗?
简要回答您的问题:
glmnet
R 中“glmnet”包中的函数为alpha=1
.参考:
LASSO 解决方案是最小化的解决方案
自适应套索只是为此添加权重,以试图抵消已知的套索估计有偏差的问题。
经常你会看到, 在哪里是一些初步估计(可能只是使用 LASSO,或者使用最小二乘法等)。有时自适应套索使用“路径方法”拟合,其中允许权重随
自适应 LASSO 用于一致的变量选择。我们在使用 LASSO 进行变量选择时遇到的问题是:
因此,LASSO 仅在收缩参数、参数(β-min 条件)和相关性(不可表示条件)的某些条件下对变量选择是一致的。有关详细说明,请参阅我的硕士论文的第 101-106 页。
在为预测选择调整参数时,LASSO 通常包含太多变量,但真正的模型很可能是这些变量的子集。这建议使用第二阶段的估计,如自适应 LASSO,它使用预测最优调整参数控制 LASSO 估计的偏差。在没有上述条件的情况下,这会导致一致的选择(或预言机属性)。
您可以使用 glmnet 进行自适应 LASSO。首先,您需要一个初始估计,最小二乘、岭甚至 LASSO 估计来计算权重。然后您可以通过缩放 X 矩阵来实现自适应 LASSO。这是一个对训练数据使用最小二乘初始估计的示例:
# 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)