R中随机森林的并行执行

use*_*306 28 parallel-processing r

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

library(doMC)
registerDoMC()
x <- matrix(runif(500), 100)
y <- gl(2, 50)
Run Code Online (Sandbox Code Playgroud)

并行执行(耗时73秒)

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

顺序执行(耗时82秒)

rf <- foreach(ntree=rep(25000, 6), .combine=combine) %do%
randomForest(x, y, ntree=ntree) 
Run Code Online (Sandbox Code Playgroud)

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

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

Ste*_*ton 33

设置.multicombineTRUE可以产生显着差异:

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

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

  • .combine =组合shoud更好.combine = randomForest :: combine因为dplyr :: combine也会导致问题 (3认同)

Dir*_*tel 12

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

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


小智 5

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

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

使用H2O的随机森林实现:

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