randomForestSRC 包 R 中的 rfsrc() 命令不使用多核功能

rfsrc() command in randomForestSRC package R not using multi core functionality

我正在使用 R(针对 Windows 7、32 位)使用 randomForests 进行文本分类。由于数据集很大,我在互联网上查找以加快模型构建速度并遇到了 randomForestSRC 包。

我已经按照软件包安装手册中的所有步骤进行操作,但是在执行 rfsrc() 命令期间,R 只使用了一个逻辑核心(与 randomforest() 相同),最大 cpu 利用率为 25%。 我按照手册使用了以下命令。

options(mc.cores=detectcores()-1, rf.cores = detectcores()-1)

我正在使用 Windows 7 Professional 32 位 Service Pack 1,在具有 4 个逻辑内核的 Intel i3 2120 CPU 上。谁能阐明我可能缺少的东西?任何其他使用 randomForest 和多核利用率的有效方法也会有所帮助!

问题是 randomForestSRC 使用 mclapply 函数进行并行执行,但 mclapply 不支持 Windows 上的并行执行。 randomForestSRC 也可以使用 OpenMP 进行多线程并行执行,但 CRAN 的二进制分发版中并未内置该功能,因此您必须在启用 OpenMP 支持的情况下从源代码构建包。

我认为你的两个选择是:

  • 在您的 Windows 机器上使用 OpenMP 支持构建 randomForestSRC
  • 自己并行调用一个随机森林函数。

这是一个简单的并行示例,它使用 randomForest 包以及 foreachdoParallel,派生自 foreach 小插图中的示例:

library(randomForest)
library(doParallel)
workers <- detectCores() 
cl <- makePSOCKcluster(workers)
registerDoParallel(cl)

x <- matrix(runif(500), 100)
y <- gl(2, 50)
ntree <- 1000

rf <- foreach(n=rep(ceiling(ntree/workers), workers),
              .combine=combine, .multicombine=TRUE,
              .packages='randomForest') %dopar% {
  randomForest(x, y, ntree=n)
}

此示例应该适用于 Windows、Mac OS X 和 Linux。有关详细信息,请参阅 foreach vignette