如何在没有数据或仅使用预测系数的情况下保存 glm 结果?
Posted
技术标签:
【中文标题】如何在没有数据或仅使用预测系数的情况下保存 glm 结果?【英文标题】:How to save glm result without data or only with coeffients for prediction? 【发布时间】:2012-11-03 11:13:03 【问题描述】:当我使用以下 R 代码时,
model_glm=glm(V1~. , data=xx,family="binomial");
save(file="modelfile",model_glm);
模型文件的大小将与数据一样多,在我的情况下为 1gig。如何删除model_glm结果中的数据部分,所以只能保存一个小文件。
【问题讨论】:
在对glm
的调用中设置model = FALSE
以防止返回model.frame。
【参考方案1】:
在您对glm
的调用中设置model = FALSE
应该可以防止model.frame
被返回。同样设置y = FALSE
将阻止返回响应向量。 x = FALSE
是默认设置,可防止返回 model.matrix
。
这种组合应该会缩小 glm 对象的大小。
当然,您也可以使用coef(model_glm)
或标准误差提取系数
summary(model_glm)$coef
【讨论】:
您查看过生成的模型吗?它仍然很重:残差、拟合值和完整的 qr 矩阵。biglm
包返回更轻的模型对象。
是的,bigglm
函数可能是一个可行的替代方案。如果您发布答案,它将得到我的投票。尽管如此,仍然可以在保存之前从glm
对象中仅选择所需的组件。【参考方案2】:
我在生产环境中将 GLM 作为 R 的一部分运行时遇到了这个问题,而 GLM 的大小大大减慢了我的速度。我发现我需要杀死的不仅仅是$data
。 Here 是我的帖子,下面有一个例子。
> object.size(sg)
96499472 bytes
> sg$residuals <- NULL
> sg$weights <- NULL
> sg$fitted.values <- NULL
> sg$prior.weights <- NULL
> sg$na.action<- NULL
> sg$linear.predictors <- NULL
> sg$fitted.values <- NULL
> sg$effects <-NULL
> sg$data <- NULL
> object.size(sg)
3483976 bytes
> sg$qr$qr <- NULL
> object.size(sg)
79736 bytes
【讨论】:
只是评论...在您的博客中,您几乎看不到黄色突出显示的内容 您也可以执行类似sg[c("residuals", "weights", "fitted.values")] <- NULL
的操作,让该向量包含您想要删除的所有内容的名称。
@RichardScriven 哦,我的眼睛 - 它灼伤了我的眼睛。
@RichardScriven 谢谢,已修复,还好我不在数据访问中。【参考方案3】:
object.size()
具有误导性,因为它忽略了环境属性。
如果要评估真实大小,请使用:
length(serialize(model_glm, NULL))
除了存储的数据之外,如果您想显着减小 glm 的大小,请执行以下操作:
rm(list=ls(envir = attr(model_glm$terms, ".Environment")),
envir = attr(model_glm$terms,
".Environment"))
这来自一个非常详细的article
【讨论】:
【参考方案4】:您可以在保存之前将模型对象中的数据设为 NULL。我做了一个快速测试,仍然产生了预测。
model_glm$data <- NULL
【讨论】:
以上是关于如何在没有数据或仅使用预测系数的情况下保存 glm 结果?的主要内容,如果未能解决你的问题,请参考以下文章