我想比较使用脊线,套索和弹性网选择的模型。下图显示了使用所有三种方法的系数路径:山脊(图A,alpha = 0),套索(图B; alpha = 1)和弹性网(图C; alpha = 0.5)。最佳解决方案取决于所选的lambda值,该值是基于交叉验证选择的。
查看这些图时,我希望弹性网(图C)表现出分组效应。然而,目前情况尚不清楚。套索和弹性网的系数路径非常相似。这可能是什么原因?这仅仅是编码错误吗?我在R中使用了以下代码:
library(glmnet)
X<- as.matrix(mydata[,2:22])
Y<- mydata[,23]
par(mfrow=c(1,3))
ans1<-cv.glmnet(X, Y, alpha=0) # ridge
plot(ans1$glmnet.fit, "lambda", label=FALSE)
text (6, 0.4, "A", cex=1.8, font=1)
ans2<-cv.glmnet(X, Y, alpha=1) # lasso
plot(ans2$glmnet.fit, "lambda", label=FALSE)
text (-0.8, 0.48, "B", cex=1.8, font=1)
ans3<-cv.glmnet(X, Y, alpha=0.5) # elastic net
plot(ans3$glmnet.fit, "lambda", label=FALSE)
text (0, 0.62, "C", cex=1.8, font=1)
用于绘制弹性净系数路径的代码与用于脊和套索的代码完全相同。唯一的区别在于alpha值。基于最低Lambda值的最低MSE(均方误差)选择用于弹性净回归的Alpha参数。
谢谢您的帮助 !