有没有办法在并行随机森林构建过程中跟踪进度?

Posted

技术标签:

【中文标题】有没有办法在并行随机森林构建过程中跟踪进度?【英文标题】:Is there a way to track progress during parallelized Random Forest building? 【发布时间】:2015-05-21 01:47:03 【问题描述】:

我正在使用 R 的 caret 包为 Coursera 机器学习课程建模。

我目前正在构建包含 11k 个观测值和 40 个特征的数据集上的 500 棵树的随机森林。

单核实现计算结果大约需要 3 个小时,我现在正在尝试多核实现(代码如下)

library(parallel)
library(caret)
library(doParallel)
library(foreach)

cl <- makePSOCKcluster(4)
clusterEvalQ(cl, library(foreach))
registerDoParallel(cl)

trCtrl <- trainControl(allowParallel = TRUE)

modFit2 <- train(classe~ ., data=training, trControl = trCtrl, method="parRF", prox=TRUE, ntree = 500)

现在我的问题是:有没有办法在运行时查看构建模型的进度?是否有并行化 RF 的包/实现可以输出例如在运行时构建的树数的进度?

显而易见的问题是:为什么我需要知道?我不能等一两个小时才能得到结果吗?它不会更快,但那样可能会更慢!

我有很多模型要为我的班级构建,我不想在每个模型上花费几个小时并想知道它是否正在运行。我想确认它正在构建树,停止执行并将它安排在我将运行完整模型的晚上。我将为 RF 和其他一些时间密集型模型运行不同的参数配置,所以我宁愿把白天的时间花在编写代码上,而让我的计算机在我睡觉时全速运行计算(我的浏览器是现在几乎不能工作:P 因为我的 RAM 和 CPU 几乎都在 100%)

【问题讨论】:

【参考方案1】:

您可以使用getModelInfocat 语句添加到fit 函数。此外,trainControl 中有一个 verboseIter 选项,您在此处忽略。

问题可能在于您使用的是trainControl(allowParallel = TRUE)。这将尝试适应跨不同内核的重采样迭代,并使用method="parRF" 并行适应每个内核。

如果您在您的机器上指定 4 个核心,您可能已经产生了 16 个工人。使用method = "rf"trainControl(allowParallel = TRUE) 可能会更好。这也可能意味着您在内存中有 17 个数据副本。

【讨论】:

感谢关于详细信息的提示,似乎需要仔细查看这些软件包的所有选项。

以上是关于有没有办法在并行随机森林构建过程中跟踪进度?的主要内容,如果未能解决你的问题,请参考以下文章

随机森林训练占比为多少比较合适

并行化随机森林

随机森林

R和sklearn中的随机森林

随机森林(RF)的原理

有没有办法在 R 中获取用于随机森林树分类的实例?