【发布时间】:2016-12-25 08:04:42
【问题描述】:
我有一个大型 n (>1,000,000) 数据集,其中包含少量特征来估计(回归)随机森林,并且一直在寻求实现 Rborist(在 R 中)。我想并行化我的工作,但没有找到太多关于如何完成的指导。我在运行它的机器上使用了 16 个处理器。例如,当我将 doParallel 与 randomForest 包一起使用时,命令:
rf <- foreach(ntree=rep(32, 16), .combine=combine, .packages='randomForest') %dopar% randomForest(x, y, nodesize = 25, ntree=ntree)
它启动了 16 个 R 进程,并且像 randomForest 一样缓慢运行,但确实有效。
Rborist 的类似命令:
rb <- foreach(ntree=rep(32, 16), .combine=combine, .packages='Rborist') %dopar% Rborist(x, y, minNode = 25, ntree=ntree)
抛出错误:
调用组合函数时出错:
警告消息:在 mclapply(argsList, FUN, mc.preschedule = preschedule, mc.set.seed = set.seed, : 所有计划的核心 遇到用户代码错误
有谁知道如何与 Rborist 并行化?它似乎没有发生在引擎盖下,因为它在我运行时只使用 1 个 cpu:
rb <- Rborist(x, y, minNode = 25, ntree = 512)
【问题讨论】:
-
Rborist 是否可以单线程工作?否则,真的不是答案,但我在做大分析时使用随机森林的 h2o 实现,h2o.randomForest。发现它比使用 foreach 更容易。
-
是的,单线程版本有效。至少在我的设置中,它确实比普通的 randomForest 快得多,尽管它确实需要更多的 RAM,并且预测精度较低(我想知道这是否是由于 randomForest 和 Rborist 的 mininfo 默认值之间的停止标准不同)。
标签: r machine-learning random-forest parallel-processing