我正在为多个加法多项模型运行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个类别的因子,解释变量是度量和因子。 data
是data.table
。这段代码运行正常。预测很好。完成此操作后,我保存预测并使用以下内容清除工作区:rm(list=ls(all=TRUE))
并另外运行gc()
但它不会释放内存。我希望在清理所有工作区时,我应该具有与R会话开始时相同的内存使用量。
在我的具体情况下,加载数据后RAM的使用量约为1.5GB。安装模型后,我的电脑极限约为14GB。清洁工作区后,其大约12GB。对我来说,目前唯一的解决方案是重新启动整个R会话,重新加载数据并运行下一个模型。
有没有解决方案,所以我不必一直重启会话?
非常感谢!
答案 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及更早版本的内存泄漏。