【问题标题】:Parallel missForest平行missForest
【发布时间】:2013-10-28 18:40:23
【问题描述】:

在下面的示例中,我尝试使用missForest 来估算缺失值。为了加快我使用 foreach 包的过程。在其中我使用了 100 棵树,然后我将这些树传递给了 missForest 函数。这是平行missForest的正确方法吗?

这是示例和我所做的:

   library(foreach)
   library(missForest)
   data(iris)
   iris.na <- iris
   set.seed(111)

   ## artificially drop some data values.

   for (i in 1:4) iris.na[sample(150, sample(20)), i] <- NA
    set.seed(222)

     system.time(rf <- foreach(ntree=100, .combine=combine, 
    .multicombine=TRUE,.packages='missForest') %dopar% 
    { missForest(iris.na)$ximp})

【问题讨论】:

    标签: r foreach parallel-processing


    【解决方案1】:

    我认为这应该可以解决您的问题。

    library(doParallel)
    library(missForest)
    data(iris)
    iris.na <- iris
    set.seed(111)
    
    ## artificially drop some data values.
    
    for (i in 1:4) iris.na[sample(150, sample(20)), i] <- NA
    set.seed(222)
    
    registerDoParallel(cores=3)
    out <- missForest(iris.na, ntree = 100, parallelize = "forests")
    

    【讨论】:

      【解决方案2】:

      在查看missForest 的代码时,我没有看到在不修改missForest 函数本身的情况下并行化单个调用的方法。您当然可以并行多次调用它,但这似乎不是您想要做的。

      关于您的示例代码的一些附加说明:

      • foreach 循环仅使用一次迭代。
      • ntree 变量未使用。
      • 由于missForest(iris.na)$ximp 返回一个数据框,您不应将结果与需要randomForest 对象的combine 函数结合起来。
      • 未注册并行后端。

      【讨论】:

      • @hema 你问的是如何修改missForest来并行执行randomForest?
      • 是的,如果可以的话,请 ---- 这个问题我看了好几遍,一直没有好的答案。
      • @hema 我试图在您提出的另一个问题中向您展示如何并行化missForest:stackoverflow.com/a/20225809/2109128
      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 2020-07-09
      相关资源
      最近更新 更多