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

Posted

技术标签:

【中文标题】randomForestSRC 包 R 中的 rfsrc() 命令不使用多核功能【英文标题】:rfsrc() command in randomForestSRC package R not using multi core functionality 【发布时间】:2015-06-30 21:23:11 【问题描述】:

我正在使用 R(适用于 Windows 7,32 位)使用 randomForests 进行文本分类。由于数据集很大,我上网查找了加快模型构建的方法,发现了randomForestSRC 包。

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

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

我在具有 4 个逻辑内核的 Intel i3 2120 CPU 上使用 Windows 7 Professional 32 位 Service Pack 1。任何人都可以对我可能遗漏的内容有所了解吗?将randomForest 与多核利用率一起使用的任何其他有效方式也会有所帮助!

【问题讨论】:

【参考方案1】:

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

我认为你的两个选择是:

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

这是一个使用 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 了解更多信息。

【讨论】:

您建议的第一个选项有效。我按照link 的说明进行操作,它就像一个魅力。我一开始就错过了它。非常感谢史蒂夫! 我尝试使用 RandomForestSRC 训练 7,500 条记录,其中包含大约 20 个属性,创建模型需要 17 分钟,预测 2,500 条记录需要 40 分钟。看起来它并行化了模型创建部分,因此花费的时间更少。但是,它仅使用一个核用于预测部分。有什么办法可以并行化/使用预测部分的所有可用内核吗?用于预测的命令是 predoutcome = predict(model1, newdata = test) @Bonson 我在 randomForestSRC 包中找不到对 predict 函数的并行支持。但我认为您可以将test 拆分为每个工作人员的一大块行,并行调用每个块的预测,然后如果结果是数据帧,则使用 rbind 组合结果,如果它们是向量,则使用'c'。

以上是关于randomForestSRC 包 R 中的 rfsrc() 命令不使用多核功能的主要内容,如果未能解决你的问题,请参考以下文章

随机森林中的网格搜索 (RandomForestSRC)

在 R 中按 ID 分类

在 R ~ Caret 包中设置树的数量

R:RF模型中的混淆矩阵返回错误:data`和`reference`应该是具有相同水平的因素

R神经网络相关的R包

Linux中的rm命令