Lasso 不保证您的预测变量在您测试时会显示出统计显着性。大多数情况下,如果有预测能力,您会看到套索选择的变量与您的因变量之间存在相关性。
当您设置 alpha=0.5 时,它会施加 L1 惩罚(最小化系数的大小)和 L2 惩罚(选择 0/1 的变量),因此查看变量的分布,其中大部分为零,因此将其降低到较低的值应该使其“逃脱” L2 惩罚。
如果您的套索的目的是选择变量,我会建议两件事 1,删除大部分为零或低方差的特征,如您在上面显示的那个,以及 2. 运行 alpha = 1 的完整套索. 比较预测的准确性。
我没有你的数据,但我可以用数据集 mtcars 来说明,我在其中引入了一个无意义的预测器并首先计算预测器的 pvalues:
set.seed(111)
dat = iris
dat$Species = ifelse(dat$Species=="versicolor",1,0)
noise_var = data.frame(matrix(runif(750),nrow=150))
colnames(noise_var) = paste0("noise",1:ncol(noise_var))
dat = cbind(noise_var,dat)
p = sapply(dat[,-ncol(dat)],function(i)cor.test(i,dat$Species)$p.value)
使用完整套索拟合:
set.seed(222)
fit_lasso = cv.glmnet(x = as.matrix(dat[,-ncol(dat)]),y=dat[,ncol(dat)],alpha=1)
cbind(coef(fit_lasso,lambda="1se")[-1],p)
p
noise1 0.0000000 5.089346e-01
noise2 0.0000000 2.722532e-01
noise3 0.0000000 9.564023e-02
noise4 0.0000000 7.743330e-01
noise5 0.0000000 7.324517e-02
Sepal.Length 0.0000000 3.341524e-01
Sepal.Width -0.3073508 1.595624e-09
Petal.Length 0.0000000 1.329302e-02
Petal.Width 0.0000000 1.507473e-01
您可以看到非零系数是显着的,而其他一些显着的系数则不包括在内,这是由于相关性。
现在拟合弹性网,你可以看到噪声变量包含在低系数中:
set.seed(222)
fit_enet = cv.glmnet(x = as.matrix(dat[,-ncol(dat)]),y=dat[,ncol(dat)],alpha=0.5)
cbind(coef(fit_enet,lambda="1se")[-1],p)
p
noise1 0.00000000 5.089346e-01
noise2 0.00000000 2.722532e-01
noise3 0.00000000 9.564023e-02
noise4 0.00000000 7.743330e-01
noise5 -0.04636756 7.324517e-02
Sepal.Length 0.00000000 3.341524e-01
Sepal.Width -0.31452496 1.595624e-09
Petal.Length 0.00000000 1.329302e-02
Petal.Width 0.00000000 1.507473e-01
还要记住解决方案或选择不稳定,请参阅this post,如果你在不同的种子下运行它,你会得到不同的结果:
set.seed(333)
fit_enet = cv.glmnet(x = as.matrix(dat[,-ncol(dat)]),y=dat[,ncol(dat)],alpha=0.5)
cbind(coef(fit_enet,lambda="1se")[-1],p)
p
noise1 0.0000000 5.089346e-01
noise2 0.0000000 2.722532e-01
noise3 0.0000000 9.564023e-02
noise4 0.0000000 7.743330e-01
noise5 0.0000000 7.324517e-02
Sepal.Length 0.0000000 3.341524e-01
Sepal.Width -0.2393709 1.595624e-09
Petal.Length 0.0000000 1.329302e-02
Petal.Width 0.0000000 1.507473e-01
您当然可以在几个种子上运行它,以查看系数选择的稳定性,但请记住,当相关性很大时,这很复杂