使用 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】:

插入符号线性模型将训练数据保存在模型对象中。您可以尝试在traintrainControl 参数中使用returnData = FALSE。我不记得这是否解决了我过去的问题。

https://www.rdocumentation.org/packages/caret/versions/6.0-77/topics/trainControl

您也可以尝试将系数导出到数据框中,并使用手动公式对新数据进行评分。

使用coef(model_object)

【讨论】:

我确实设置了那个标志。不知道为什么我的模型/文件仍然这么大。当我早上回家时,我可能会尝试使用 coef() 技巧。没想到那个。

以上是关于使用 saveRDS 保存模型但没有足够的内存来读取 RDS?的主要内容,如果未能解决你的问题,请参考以下文章

将多个变量保存在单个RDS文件中

在 python 和 numpy 中处理大数据,没有足够的内存,如何将部分结果保存在磁盘上?

在单个 RDS 文件中保存多个变量

与在 RStudio 中使用 saveRDS 相关的时间问题

Python文件操作,看这篇就足够!

当我没有将模型保存在内存中时,如何使用 gcforest 模型进行预测?