在以下示例中,我尝试使用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})
答案 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函数本身。你当然可以同时对它进行多次调用,但这似乎并不是你想要做的。
有关示例代码的一些其他说明:
ntree
变量。missForest(iris.na)$ximp
会返回一个数据框,因此您不应将结果与需要randomForest对象的combine
函数合并。