R gbm()函数 - RAM未发布?内存泄漏?

时间:2013-10-20 10:45:29

标签: r memory-leaks multinomial gbm

我正在为多个加法多项模型运行gbm()函数,每个模型在大数据集上有6个响应类别(每个模型约0.5-1 mio。行)。模型就像这样(几乎是默认值)。

gbm <-
gbm(Y ~ A + B + C + D + E + F, 
  data=data,                   
  var.monotone=c(0,0,0,0,0,0), 
  distribution="multinomial", 
  n.trees=500,                
  shrinkage=0.1,               
  interaction.depth=1,        
  bag.fraction = 0.5,          
  train.fraction = 0.5,        
  n.minobsinnode = 5,         
  cv.folds = 0,               
  keep.data=TRUE,              
  verbose=FALSE,                
  weights=sampleWeight)     

Y是具有6个类别的因子,解释变量是度量和因子。 datadata.table。这段代码运行正常。预测很好。完成此操作后,我保存预测并使用以下内容清除工作区:rm(list=ls(all=TRUE))并另外运行gc()但它不会释放内存。我希望在清理所有工作区时,我应该具有与R会话开始时相同的内存使用量。

在我的具体情况下,加载数据后RAM的使用量约为1.5GB。安装模型后,我的电脑极限约为14GB。清洁工作区后,其大约12GB。对我来说,目前唯一的解决方案是重新启动整个R会话,重新加载数据并运行下一个模型。

有没有解决方案,所以我不必一直重启会话?

非常感谢!

2 个答案:

答案 0 :(得分:2)

是的,gbm存在内存泄漏。具有讽刺意味的是,修复程序位于gbm网站上,但维护人员未能将其纳入CRAN版本。

http://r-forge.r-project.org/tracker/?atid=1813&group_id=443&func=browse

答案 1 :(得分:2)

gbm()的维护者修复了拉普拉斯和多项分布的内存泄漏问题,以及其他错误。此外,他们还添加了cox回归和其他功能。截至2016年7月,这些修补程序尚未合并到gbm软件包的新版本中,可以在CRAN镜像上找到或使用install.packages(“gbm”)语句安装。但是,这是在工作中,应该出现在CRAN镜像上的未来版本gbm-2.1.2或gbm-3.0.0中。

幸运的是,您现在可以获得最新的错误修复工作版本。你得到它: https://github.com/gbm-developers/gbm。另请参阅https://github.com/gbm-developers/gbm/issues/16#issuecomment-234054158

我用来安装最新工作版本的声明是:

在Linux控制台中:

sudo apt-get -y build-dep libcurl4-gnutls-dev sudo apt-get -y install libcurl4-gnutls-dev sudo apt-get -y build-dep libxml2-dev sudo apt-get -y install libxml2-dev

在R:

remove.packages("gbm") install.packages("devtools", dependencies=TRUE) library(devtools) install_github("gbm-developers/gbm")

我刚刚在Windows,Linux Debian(Gnome)和Linux Ubuntu(Mint)上测试了上述开发版本,运行gbm使用options distribution =“laplace”和distribution =“multinomial”。没有那些困扰gbm版本2.1.1及更早版本的内存泄漏。