32

我在 R 中并行运行随机森林

library(doMC)
registerDoMC()
x <- matrix(runif(500), 100)
y <- gl(2, 50)

并行执行(耗时 73 秒)

rf <- foreach(ntree=rep(25000, 6), .combine=combine, .packages='randomForest') %dopar%
randomForest(x, y, ntree=ntree) 

顺序执行(耗时 82 秒)

rf <- foreach(ntree=rep(25000, 6), .combine=combine) %do%
randomForest(x, y, ntree=ntree) 

在并行执行中,树的生成非常快,例如 3-7 秒,但其余时间用于合并结果(合并选项)。因此,运行并行执行的唯一价值是树的数量非常多。有什么办法可以调整“组合”选项以避免在每个节点上进行任何我不需要的计算并使其更快

PS。以上只是数据的一个例子。实际上,对于大约 100 次观察,我有大约 10 万个特征。

4

5 答案 5

35

设置.multicombineTRUE可以产生重大影响:

rf <- foreach(ntree=rep(25000, 6), .combine=randomForest::combine,
              .multicombine=TRUE, .packages='randomForest') %dopar% {
    randomForest(x, y, ntree=ntree)
}

这会导致combine调用一次而不是五次。在我的台式机上,它在 8 秒而不是 19 秒内运行。

于 2013-04-02T18:22:10.787 回答
12

您是否知道caret包可以为您做很多并行运行(以及数据准备、摘要等)的手动操作?

当然,最终,如果随机森林计算本身还存在一些代价高昂的操作,那么您无能为力,因为 Andy 花了好几年的时间来改进它。我预计很少或没有低垂的水果可供采摘......

于 2012-12-31T21:04:44.263 回答
5

H20 包可用于解决您的问题。

根据 H20文档页面,H2O 是“用于大数据的开源数学引擎,可在各种集群环境中计算并行分布式机器学习算法,例如广义线性模型、梯度提升机器、随机森林和神经网络(深度学习)。”

使用 H2O 实现随机森林:

https://www.analyticsvidhya.com/blog/2016/05/h2o-data-table-build-models-large-data-sets/

于 2016-09-21T08:49:33.867 回答
4

我想知道parallelRandomForest代码是否对您有帮助?

根据作者的说法,它在他的数据集上运行速度提高了大约 6 倍,而内存消耗减少了 16 倍。

SPRINT在这里也有一个并行实现。

于 2015-10-16T17:31:56.223 回答
1

根据您的 CPU,您可能会获得 5%-30% 的加速,选择作业数量以匹配您的注册核心数量与系统逻辑核心数量相匹配。(有时匹配系统物理内核的数量会更有效)。如果您有一台具有超线程(4 个逻辑核心)的通用 Intel 双核笔记本电脑,那么 DoMC 可能注册了一个 4 核集群。因此,当计算迭代 5 和 6 以及启动/停止两个额外作业的额外时间时,2 个内核将空闲。只做 2-4 个工作的更多树木会更有效率。

于 2015-04-01T13:41:56.867 回答