我创建了几个ctree模型(大约40到80),我想要经常评估.
一个问题是模型对象非常大(40个模型需要超过2.8G的内存),在我看来,他们存储了训练数据,可能是modelname @ data和modelname @ response,而不仅仅是相关的信息预测新数据.
大多数其他R学习包具有可配置选项,是否将数据包含在模型对象中,但我在文档中找不到任何提示.我还尝试通过分配空的ModelEnv对象
modelname@data <- new("ModelEnv")
Run Code Online (Sandbox Code Playgroud)
但是对各个RData文件的大小没有影响.
任何人都知道ctree是否真的存储了训练数据以及如何从ctree模型中删除与新预测无关的所有数据,以便我可以将其中的许多数据放入内存中?
非常感谢,
斯特凡
感谢您的反馈,这已经非常有帮助.
我使用dput并str深入研究了对象,发现模型中没有包含任何训练数据,但是有一个responses插槽,似乎有训练标签和rownames.无论如何,我注意到每个节点都有一个每个训练样本的权重向量.经过一段时间检查代码后,我最后搜索了一下,在partyNEWS日志中找到了以下注释:
CHANGES IN party VERSION 0.9-13 (2007-07-23)
o update `mvt.f'
o improve the memory footprint of RandomForest objects
substancially (by removing the weights slots from each node).
Run Code Online (Sandbox Code Playgroud)
事实证明,派对包中有一个C函数可以删除这些权限,R_remove_weights并使用以下定义调用:
SEXP R_remove_weights(SEXP subtree, SEXP removestats) {
C_remove_weights(subtree, LOGICAL(removestats)[0]);
return(R_NilValue);
}
Run Code Online (Sandbox Code Playgroud)
它也工作正常:
# cc is my model object
sum(unlist(lapply(slotNames(cc), function (x) object.size(slot(cc, x)))))
# returns: [1] 2521256
save(cc, …Run Code Online (Sandbox Code Playgroud)