2

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

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个类别的因子,解释变量是度量和因子。data是一个data.table。这段代码运行良好。预测不错。完成后,我保存预测并使用以下命令清理工作区:rm(list=ls(all=TRUE))并另外运行gc(),但它不会释放内存。我希望在清理所有工作区时,我的内存使用量应该与 R 会话开始时大致相同。

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

有没有解决方案,这样我就不必一直重新启动会话?

非常感谢!

4

2 回答 2

2

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

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

于 2013-11-01T06:13:24.590 回答
2

gbm() 的维护者已经修复了 Laplace 和多项分布的内存泄漏问题,以及其他错误。此外,他们还添加了 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 适合选项 distribution="laplace" 和 distribution="multinomial"。没有像 gbm 2.1.1 和更早版本那样的内存泄漏。

于 2016-07-22T14:20:07.733 回答