r - 如何估计随机森林算法的内存使用量?
问题描述
我正在尝试将随机森林模型与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 个核心,但任何尝试使用超过 3 个核心的尝试都会makeCluster
导致以下错误:
反序列化错误(socklist[[n]]):从连接读取错误
所以我想也许内存分配有问题,只尝试了 3 个内核。经过几个小时的训练,当我期待有结果时,令我惊讶的是,我得到的唯一结果是以下错误:
错误:无法分配大小为 1.9 Gb 的向量
不过,我的谷歌云实例有 52GB 内存,所以我决定检查一下目前有多少是免费的。
as.numeric(system("awk '/MemFree/ {print $2}' /proc/meminfo", intern=TRUE))
[1] 5606656
大于47GB。因此,假设在训练结束时无法分配 2GB,那么训练随机森林似乎使用了 45GB 以上的空间。我知道我的训练数据集被引导 100 次以生成随机森林,因此 100 个训练数据副本的重量约为 13GB。同时,我的总 RAM 分为 3 个集群,这给了我 39GB。它应该给我留下大约 6GB 的空间,但显然没有。尽管如此,这是假设在构建分离树后没有释放内存,我怀疑这是一种情况。
因此,我的问题是:
- 我的近似计算还可以吗?
- 什么可能导致我的错误?
- 如何估计使用我的训练数据训练模型需要多少 RAM?
解决方案
您无法正确估计随机森林模型的大小,因为这些决策树的大小会随数据的特定重采样而变化——即树是根据数据分布的停止标准动态构建的。
推荐阅读
- firefox - 如何在谷歌开发者控制台中将firefox扩展redirect_uri列入白名单
- git - 永久删除 git 存储库及其所有没有项目 ID 的内容
- stored-procedures - 将 DateTime 参数发送到链接服务器存储过程
- bash - 如何添加自定义路径:“ls -d */”
- amazon-web-services - 微服务架构 - 独立服务器服务还是在同一台服务器上?
- javascript - Javascript“for in”无法获取嵌套对象(非标准键标识符)
- webpack - 需要 Babel "^7.0.0-0" 但在 CI 服务器上测试时加载了 "6.26.3"
- google-maps-api-3 - 如何在不应用图像或图标的标记上应用自定义 CSS 样式
- javascript - 更新查询中的 MongoDB $graphLookup
- java - 我想使用 Android KeyChain 来存储公钥和私钥