并行missForest

时间:2013-10-28 18:40:24

标签: r foreach parallel-processing

在以下示例中,我尝试使用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})

2 个答案:

答案 0 :(得分:3)

我认为这可以解决你的问题。

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")

答案 1 :(得分:1)

在查看missForest的代码时,我没有看到一种方法来并行化单个调用而不修改missForest函数本身。你当然可以同时对它进行多次调用,但这似乎并不是你想要做的。

有关示例代码的一些其他说明:

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