【发布时间】:2015-11-14 22:49:52
【问题描述】:
我使用 R 中的 caret 包创建了袋装树模型method = "treebag",在 R-Studio 中查看时生成的模型大小为 12 Mb。但是当我使用save() 保存到磁盘以供以后使用时,磁盘上的大小增加到 151 Mb!使用不同的压缩方案会使大小有所下降,但仍然比内存大得多。有人成功解决了这个问题吗?
【问题讨论】:
我使用 R 中的 caret 包创建了袋装树模型method = "treebag",在 R-Studio 中查看时生成的模型大小为 12 Mb。但是当我使用save() 保存到磁盘以供以后使用时,磁盘上的大小增加到 151 Mb!使用不同的压缩方案会使大小有所下降,但仍然比内存大得多。有人成功解决了这个问题吗?
【问题讨论】:
你说的是train 对象吗?
bagging 函数没有得到很好的优化,并且在森林中保存了许多冗余对象(例如,每个 rpart 模型的每个 terms 对象)。
参见trainControl 的trim 选项。如果您只想对该对象进行预测,这将摆脱模型对象携带的许多额外内容。在某些情况下,call 对象可以包含数据的完整副本。
trim 并不是针对每个模型都实现的,但它适用于这个模型。
【讨论】:
trim。但我认为这还没有达到目的。 为什么保存到磁盘时会大幅增加? 我认为trainControl 参数不会影响这一点。
returnData = F
可能的原因是 object.size() 的结果中没有考虑与对象关联的封闭环境,而是在保存时写入磁盘。使用 pryr::object_size() 函数查看包含环境的对象大小。更多解释可见:http://adv-r.had.co.nz/memory.html#object-size
> object.size(m1)
16200200 bytes
> pryr::object_size(m1)
215 MB
> save(m1, file="m1.rda")
> file.info("m1.rda")$size
[1] 219475772
另外一个问题也有关于这个问题的讨论:object.size() reports smaller size than .Rdata file
【讨论】: