Nim*_*ima 7 memory-management r
我正在使用mboost包中的blackboost函数来估计Windows 7 64位,8GB RAM机器上大约500mb数据集的模型.在执行期间,R几乎可以使用所有可用内存.计算完成后,即使在使用gc()调用垃圾收集或保存并将工作空间重新加载到新的R会话之后,仍然会将4.5gb以上的内容分配给R.使用.ls.objects(1358003)我发现所有可见对象的大小约为550mb.
gc()的输出告诉我大部分数据都在向量单元格中,虽然我不确定这意味着什么:
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 2856967 152.6 4418719 236.0 3933533 210.1
Vcells 526859527 4019.7 610311178 4656.4 558577920 4261.7
Run Code Online (Sandbox Code Playgroud)
这就是我正在做的事情:
> memory.size()
[1] 1443.99
> model <- blackboost(formula, data = mydata[mydata$var == 1,c(dv,ivs)],tree_control=ctree_control(maxdepth = 4))
Run Code Online (Sandbox Code Playgroud)
......加载了一堆包...
> memory.size()
[1] 4431.85
> print(object.size(model),units="Mb")
25.7 Mb
> memory.profile()
NULL symbol pairlist closure environment promise language
1 15895 826659 20395 4234 13694 248423
special builtin char logical integer double complex
174 1572 1197774 34286 84631 42071 28
character ... any list expression bytecode externalptr
228592 1 0 79877 1 51276 2182
weakref raw S4
413 417 4385
Run Code Online (Sandbox Code Playgroud)
mydata [mydata $ var == 1,c(dv,ivs)]有139593行和75列,主要是因子变量和一些逻辑或数值变量.formula是一个类型的公式对象:"dv~var2 + var3 + .... + var73".dv是变量名称字符串,ivs是一个字符串向量,所有独立变量var2 ... var74.
为什么如此多的内存被分配给R?如何让R释放额外的内存?任何想法赞赏!
我曾与该包的一位作者交谈过,他告诉我与模型对象相关的大部分数据都保存在环境中,这解释了为什么 object.size 不能反映 blackboost 函数引起的 R 完整内存使用情况。他还告诉我,mboost 包并没有在速度和内存效率方面进行优化,而是以灵活性为目标,并且所有树都被保存,从而数据也被保存,这解释了生成的大量数据(我仍然发现尺寸显着......)。他建议使用 gbm 包(我还无法复制我的结果)或通过执行以下操作来序列化:
### first M_1 iterations
mod <- blackboost(...)[M_1]
f1 <- fitted(mod)
rm(mod)
### then M_2 additional iterations ...
mod <- blackboost(..., offset = f1)[M_2]
Run Code Online (Sandbox Code Playgroud)