随机森林中的R的并行执行

问题描述 投票:25回答:5

我在并行运行的随机森林中的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个观测成千上万的特点。

r parallel-processing
5个回答
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秒。


11
投票

你知道,caret包可以做很多手拿着并行运行的(以及数据准备,汇总,...)你呢?

最后,当然,如果有剩余的随机森林计算本身的一些昂贵的操作,有一点你可以做安迪花了好几年的改进它。我希望一些没有唾手可得的果实是周围采摘...


4
投票

H20包可以用来解决您的问题。

据H20 documentation页H2O是“大数据开源的数学引擎,计算并行分布式机器学习算法如广义线性模型,梯度推进机,随机森林,以及各种集群环境中的神经网络(深学习)。”

使用H2O随机森林的实现:

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


3
投票

我不知道parallelRandomForest代码将有助于你?

According to the author它跑快了约6倍于他的数据与16倍的内存消耗设置。

SPRINT也有一个并行实现here


1
投票

根据您的CPU上,你很可能得到5%-30%的增速选择的职位数量,以配合您的系统匹配逻辑内核的数量登记的内核数量。 (有时它是更有效,以匹配系统物理核心的数量)。如果你有一个通用的英特尔双核笔记本采用超线程(4个逻辑核心),然后DOMC可能注册4个核心的集群。因此,当迭代5和6计算加上额外的时间启动/停止两个额外的作业2个核将闲置。这将更加有效,使只有2-4更多的树木的工作。

© www.soinside.com 2019 - 2024. All rights reserved.