如何估算随机森林算法的内存使用情况?

时间:2019-04-02 17:15:38

标签: r random-forest ram caret

我正在尝试使用caret拟合随机森林模型。我的训练数据重量为129MB,我正在具有8核和52GB RAM的Google Cloud上进行计算。我正在使用的代码如下:

library(caret)
library(doParallel)
cl <- makeCluster(3, outfile = '')
registerDoParallel(cl)
model <- train(x = as.matrix(X_train),
               y = y_train,
               method = 'rf', 
               verbose = TRUE,
               trControl = trainControl(method = 'oob',
                                        verboseIter = TRUE,
                                        allowParallel = TRUE),
               tuneGrid = expand.grid(mtry = c(2:10, 12, 14, 16, 20)),
               num.tree = 100,
               metric = 'Accuracy',
               performance = 1)
stopCluster(cl)

尽管具有8个内核,但在makeCluster中尝试使用3个以上的内核都会导致以下错误:

  

反序列化错误(socklist [[n]]):从连接读取错误

所以我认为也许内存分配存在问题,并且仅使用3个内核进行了尝试。经过数小时的培训,当我期望获得结果时,令我惊讶的是,唯一的错误是以下错误:

  

错误:无法分配大小为1.9 Gb的向量

仍然,我的Google云实例具有52GB的内存,因此我决定检查其中有多少是当前可用的。

as.numeric(system("awk '/MemFree/ {print $2}' /proc/meminfo", intern=TRUE))
  

[1] 5606656

哪个高于47GB。因此,假设在培训结束时无法分配2GB,则似乎随机培训森林使用了45GB以上。我知道我的训练数据集会被引导100次以生成随机森林,因此100份训练数据副本的权重约为13GB。同时,我的总RAM分为3个集群,这给了我39GB的内存。它应该给我留下大约6GB的内存,但显然没有。不过,这仍然是假设在构建分离的树之后没有释放任何内存,我怀疑情况是否如此。

因此,我的问题是:

  1. 我的近似计算还可以吗?
  2. 什么可能导致我的错误?
  3. 如何根据训练数据来估计训练模型需要多少RAM?

1 个答案:

答案 0 :(得分:0)

您无法正确估计随机森林模型的大小,因为这些决策树的大小随数据的特定重采样而变化 - 即树是使用取决于数据分布的停止标准动态构建的。< /p>