使用 saveRDS 保存模型但没有足够的内存来读取 RDS?
Posted
技术标签:
【中文标题】使用 saveRDS 保存模型但没有足够的内存来读取 RDS?【英文标题】:Used saveRDS to save a model but not enough memory to readRDS? 【发布时间】:2017-11-21 21:17:29 【问题描述】:我基于一个非常大的数据集创建了一个模型,并让程序使用
保存结果saveRDS(featVarLogReg.mod, file="featVarLogReg.mod.RDS")
现在我正在尝试加载模型以进行评估,但 readRDS
内存不足。
featVarLR.mod <- readRDS(file = "featVarLogReg.mod.RDS")
有没有办法加载占用更少内存的文件?或者至少与用于保存它的内存量相同?
对于使用插入符号的逻辑回归,RDS 文件的大小最终为 1.5GB。我使用相同数据集和非常相似的插入符号模型的其他模型大小为 50MB,因此我可以加载它们。
【问题讨论】:
“但 readRDS 内存不足”您收到什么错误消息?您是否尝试在干净的会话中阅读? 它说它不能分配 174MB 的内存。在任务管理器中,我可以看到内存耗尽。我将尝试重新启动。运行 gc() 后我的内存现在是 2GB 我想知道解压缩RDS时压缩算法是否更加资源密集。我将不得不尝试: saveRDS(object, file = "", compress =FALSE, refhook = NULL) 模型只有689MB!? RDS 很大,然后需要 10GB 才能打开? 我可以在另一台计算机上打开该文件。否则我唯一的选择是使用saveRDS(featVarLogReg.mod, file="featVarLogReg.mod.RDS", compress = FALSE)
【参考方案1】:
插入符号线性模型将训练数据保存在模型对象中。您可以尝试在train
的trainControl
参数中使用returnData = FALSE
。我不记得这是否解决了我过去的问题。
https://www.rdocumentation.org/packages/caret/versions/6.0-77/topics/trainControl
您也可以尝试将系数导出到数据框中,并使用手动公式对新数据进行评分。
使用coef(model_object)
【讨论】:
我确实设置了那个标志。不知道为什么我的模型/文件仍然这么大。当我早上回家时,我可能会尝试使用 coef() 技巧。没想到那个。以上是关于使用 saveRDS 保存模型但没有足够的内存来读取 RDS?的主要内容,如果未能解决你的问题,请参考以下文章
在 python 和 numpy 中处理大数据,没有足够的内存,如何将部分结果保存在磁盘上?