【问题标题】:Parallel Processing in R in caret插入符号中的R中的并行处理
【发布时间】:2017-11-30 04:00:39
【问题描述】:

插入符号文档中给出了允许并行处理以下代码的工作

library(doMC) 
registerDoMC(cores = 5) 
## All subsequent models are then run in parallel

但在最新的 R 版本(3.4)中,包 doMC 不可用。谁能告诉我任何其他的并行处理方式?

更新:Roman 的建议奏效了。 DoMC 不适用于 Windows。对于 Windows 使用 doParallel 包 cls = makeCluster(no of cores to use) 然后 registerDoParallel(cls) 。还要确保在 trControl 中将 allowParallel 设置为 TRUE。

【问题讨论】:

  • 我使用 R 界面运行 install.packages 命令,它显示 "This package is not available for R(3.4)" 。有没有办法从网站手动安装?
  • 如果您使用的是 Windows,请阅读小插图的 the second paragraph。在 Windows 上,我使用 doParallel 包,该包与 R 附带的 parallel 接口,并且同样喜欢所有平台。
  • 谢谢我试试这个
  • 您应该接受 Roman 的回答。单击箭头下方的灰色复选标记,它将变为绿色。

标签: r parallel-processing


【解决方案1】:

只是为了扩展前一个答案的实施,基本上使用Caret package documentation,这是一个适用于我的食谱:

set.seed(112233)
library(parallel) 
# Calculate the number of cores
no_cores <- detectCores() - 1

library(doParallel)
# create the cluster for caret to use
cl <- makePSOCKcluster(no_cores)
registerDoParallel(cl)

# do your regular caret train calculation enabling
# allowParallel = TRUE for the functions that do
# use it as part of their implementation. This is
# determined by the caret package.

stopCluster(cl)
registerDoSEQ()

【讨论】:

    【解决方案2】:

    doMC 利用包multicore 的功能以分布式/并行模式进行计算。这很好,如果您使用的是受支持的平台,而 Windows 不支持。

    您可以使用其他框架,例如 R 附带的 parallel。为此,您需要适用于所有三个主要平台的包 doParallel

    【讨论】:

      【解决方案3】:

      通常我会这样添加allowParallel= TRUE

      svmopt.caret=train(Y~.,data=nearsep1,method="svmLinear",
                         trControl=trainControl(method="cv",number=10,search="grid"),
                         tuneGrid=paramgrid,
                         allowParallel=TRUE)
      

      【讨论】:

      • 但这仅适用于内部支持并行处理的模型。假设我将 xgboost 与 allowParallel = TRUE 一起使用,它会起作用,因为 xgboost 具有内置的并行处理,但如果我调用让我们说随机森林它将不起作用
      • @DhruvMahajan 这不是真的,allowParallel = T 不允许底层模型的并行处理(在本例中为 xgboost)。它只是将 cv 过程并行化,这样每个核心都将执行 cv 特定折叠的训练和测试
      • 似乎应该将allowParallel=TRUE 传递给trainControl(),而不是train()。因为这个选项在?trainControl而不是?train
      • @Dhruv Mahajan 在随机森林的情况下使用trainControl() 函数中的并行化。所述函数作为命名参数trControl 传递给carettrain 方法。在树生长阶段引入交叉验证以拆分变量时,这大大减少了训练时间。这是rf ensemble 方法中最耗时的部分。尽管 caret 提供了所有标准化,但您正确建议的使用模式仍然存在细微差异。
      猜你喜欢
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      • 2018-11-11
      • 2013-01-27
      • 2018-10-22
      • 2019-09-12
      • 2021-06-04
      相关资源
      最近更新 更多