首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在R中glmnet()和cv.glmnet()有什么不同?

在R中glmnet()和cv.glmnet()有什么不同?
EN

Stack Overflow用户
提问于 2015-03-28 06:38:06
回答 2查看 26.6K关注 0票数 14

我正在做一个项目,该项目将展示一组事件对结果的潜在影响。我正在使用glmnet()包,特别是使用Poisson特性。下面是我的代码:

代码语言:javascript
运行
复制
# de <- data imported from sql connection        
x <- model.matrix(~.,data = de[,2:7])
y <- (de[,1])
reg <- cv.glmnet(x,y, family = "poisson", alpha = 1)
reg1 <- glmnet(x,y, family = "poisson", alpha = 1)

**Co <- coef(?reg or reg1?,s=???)**

summ <- summary(Co)
c <- data.frame(Name= rownames(Co)[summ$i],
       Lambda= summ$x)
c2 <- c[with(c, order(-Lambda)), ]

一开始用SQL从我的数据库中导入了大量数据。然后,我将其放入矩阵格式,并将响应与预测值分开。

这就是我感到困惑的地方:我找不出glmnet()函数和cv.glmnet()函数之间的确切区别。我知道cv.glmnet()函数是glmnet()的k重交叉验证,但这在实际中到底意味着什么呢?它们为lambda提供了相同的值,但我希望确保不会遗漏关于两者之间的差异的重要内容。

我也不清楚为什么当我指定alpha=1 (应该是默认的)时,它运行得很好,但如果我省略了它,它就不能运行了。

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-29 05:23:39

glmnet()是一个R包,可用于拟合回归模型、套索模型和其他模型。Alpha参数确定适合哪种类型的模型。如果为alpha=0,则适合岭模型;如果为alpha=1,则适合套索模型。

cv.glmnet()执行交叉验证,默认情况下是10倍,可以使用nfolds进行调整。10倍的简历会将你的观察随机分成10个大小大致相等的不重叠的组/折叠组。第一个折叠将用于验证集,模型在9个折叠上拟合。偏差方差优势通常是使用此类模型验证方法的动机。在套索和脊模型的情况下,CV有助于选择调整参数lambda的值。

在您的示例中,您可以执行plot(reg)或reg$lambda.min来查看λ的值,这将导致最小的CV误差。然后,您可以为该lambda值派生Test MSE。默认情况下,glmnet()将为自动选择的lambda范围执行Ridge或Lasso回归,这可能不会给出最低的测试MSE。希望这能有所帮助!

希望这能有所帮助!

票数 21
EN

Stack Overflow用户

发布于 2016-05-07 19:22:34

在reg$lambda.min和reg$lambda.1se之间;lambda.min显然会给你最低的均方误差,但是,根据你对误差的灵活程度,你可能想要选择reg$lambda.1se,因为这个值会进一步减少预测器的数量。您也可以选择reg$lambda.min和reg$lambda.1se的平均值作为您的lambda值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29311323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档