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