我想比较使用脊、套索和弹性网选择的模型。下图显示了使用所有 3 种方法的系数路径:脊(图 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)
用于绘制弹性网络系数路径的代码与 ridge 和 lasso 完全相同。唯一的区别在于 alpha 的值。基于相应 lambda 值的最低 MSE(均方误差)选择弹性网络回归的 Alpha 参数。
感谢您的帮助 !