并行化随机森林

Posted

技术标签:

【中文标题】并行化随机森林【英文标题】:Parallelizing random forests 【发布时间】:2016-09-09 20:15:31 【问题描述】:

通过搜索和询问,我发现了许多可以用来利用服务器所有内核的软件包,以及许多可以执行随机森林的软件包。

我对此很陌生,我迷失在所有训练的方法之间。您能否就使用和/或避免使用它们中的每一个的原因或它们的某些特定组合(有或没有caret?)提供一些建议?

并行化包:

doParallel,

doSNOW,

doSMP(已停产?),

doMC

(那么mclapply 呢?)


随机森林包:

[caret + 以下一些]

rf,

parRF,

randomForest,

ranger,

Rborist,

parallelRandomForest(使我的 R Studio 会话崩溃...)

谢谢

【问题讨论】:

这是否意味着您决定需要大量的树? 感谢您的建议(以及一些特征工程)以及培训时间,我已经设法减少了使用的特征数量。但不幸的是,我似乎仍然需要有很多树,是的。 (但我可能做错了一些事情,我还在探索中。 一般建议:这个问题有点宽泛,所以它可能不会吸引太多答案。例如,最好只关注并行计算的 R 包,甚至更好地询问带有随机森林的单个包。 我知道,我什至预计它会被否决。问题是,我发现了很多东西,以及并行化包和随机森林包的组合,我迷失了哪种组合适合我的需求。 【参考方案1】:

关于 SO 有几个答案,比如parallel execution of random forest in R 和Suggestions for speeding up Random Forests,我会看看。

这些帖子很有帮助,但有点旧。 ranger 包是随机森林的一个特别快速的实现,所以如果你是新手,它可能是加速模型训练的最简单方法。 Their paper 讨论了一些可用包的权衡 - 根据您的数据大小和功能数量,哪个包为您提供最佳性能会有所不同。

【讨论】:

谢谢。关于第一个链接,.multicombine=TRUE 将与 caret + ranger 一起使用吗?如果是这样,我如何通过train() 传递它? 关于你的第二个链接:如果我在train() 中使用caret + allowParallel = TRUE,我一定不能使用foreach 语法,对吧?我之前还需要做registerDoParallel(makeCluster(detectCores()))(例如来自doParallel)吗?或者相反,会不会出问题? 'ranger' 包是加速随机森林计算的非常酷的工具。最近查了一下。

以上是关于并行化随机森林的主要内容,如果未能解决你的问题,请参考以下文章

使用 scikit-learn 并行生成随机森林

随机森林(RF)的原理

使用并行训练带有插入符号的随机森林

R,插入符号:保存/加载并行随机森林失败

有没有办法在并行随机森林构建过程中跟踪进度?

随机森林