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
包和 foreach
和 doParallel
的简单并行示例,该示例源自 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() 命令不使用多核功能的主要内容,如果未能解决你的问题,请参考以下文章