小编Ste*_*kel的帖子

如何从party ::: ctree模型中删除训练数据?

我创建了几个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模型中删除与新预测无关的所有数据,以便我可以将其中的许多数据放入内存中?

非常感谢,

斯特凡


感谢您的反馈,这已经非常有帮助.

我使用dputstr深入研究了对象,发现模型中没有包含任何训练数据,但是有一个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)

memory-management r classification decision-tree

7
推荐指数
1
解决办法
1696
查看次数