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
还要记住解决方案或选择不稳定,请参阅这篇文章,如果您在不同的种子下运行它,您会得到不同的结果:
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
您当然可以在一些种子上运行它,以查看系数选择的稳定性,但请记住,当相关性很多时,这很复杂