R中随机森林的并行执行

时间:2012-12-31 20:58:05

标签: r parallel-processing

我在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个特征用于大约100次观察。

5 个答案:

答案 0 :(得分:31)

.multicombine设置为TRUE会产生重大影响:

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

这会导致combine被调用一次而不是五次。在我的桌面计算机上,它运行时间为8秒而不是19秒。

答案 1 :(得分:11)

您是否意识到caret包可以为您进行并行运行(以及数据准备,摘要......)的大量操作?

当然,最终,如果在随机森林计算本身中存在一些代价高昂的操作,那么安迪花费了几年的时间来改进它就几乎无法做到。我希望几乎不会有任何低调的果实来挑选......

答案 2 :(得分:4)

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

根据H20 documentation页面,H2O是开源的 计算并行分布的大数据的数学引擎 机器学习算法,如广义线性模型, 梯度增强机,随机森林和神经网络 (深度学习)在各种集群环境中。&#34;

使用H2O实现随机森林:

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

答案 3 :(得分:3)

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

According to the author它的数据集运行速度提高了大约6倍,内存消耗减少了16倍。

SPRINT也有并行实现here

答案 4 :(得分:1)

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