繁体   English   中英

R中随机森林的并行执行

[英]parallel execution of random forest in R

我在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万个特征。

.multicombine设置为TRUE会产生显着差异:

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

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

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

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

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

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

使用H2O实现随机森林:

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM