首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cv.glmnet与glmnet结果比较;测量解释能力

cv.glmnet与glmnet结果比较;测量解释能力
EN

Stack Overflow用户
提问于 2017-12-01 05:07:51
回答 0查看 954关注 0票数 6

当通过glmnet包估计套索模型时,我想知道是:(a)直接从cv.glmnet获取的cv.fit对象中提取系数/预测/偏差,还是(b)使用cv.glmnet中的最小λ重新运行glmnet,并从glmnet进程中提取这些对象。(请耐心--我有一种感觉,这是有文档记录的,但我在网上看到了这两种方法的示例/教程,并且没有可靠的逻辑来说明这两种方法。)

也就是说,对于系数,我可以运行(a):

代码语言:javascript
复制
cvfit = cv.glmnet(x=xtrain, y=ytrain, alpha=1, type.measure = "mse", nfolds = 20)
coef.cv <- coef(cvfit, s = "lambda.min")

或者我可以在之后运行(b):

代码语言:javascript
复制
fit = glmnet(x=xtrain, y=ytrain, alpha=1, lambda=cvfit$lambda.min)
coef <- coef(fit, s = "lambda.min")

虽然这两个过程选择相同的模型变量,但它们不会产生相同的系数。同样,我可以通过以下两个过程之一进行预测:

代码语言:javascript
复制
prdct <- predict(fit,newx=xtest)
prdct.cv <- predict(cvfit, newx=xtest, s = "lambda.min")

他们预测相似但不相同的向量。

最后,我认为我可以通过这两种方法中的任何一种来拉出解释的%偏差:

代码语言:javascript
复制
percdev <- fit$dev.ratio
percdev.cv <- cvfit$glmnet.fit$dev.ratio[cvfit$cvm==mse.min.cereal]

但实际上,用这种方式拉取percdev.cv是不可能的,因为如果cv.glmnet使用的lambda序列的元素少于100个,那么cvfit$glmnet.fit$dev.ratiocvfit$cvm==mse.min.cereal的长度就不匹配。所以我不太确定如何从cvfit$glmnet.fit中提取最小的lambda dev.ratio。

因此,我想知道哪个过程是最好的,为什么,以及人们通常如何提取适当的dev.ratio统计数据。谢谢!

EN

回答

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

https://stackoverflow.com/questions/47582642

复制
相关文章

相似问题

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