2013-10-28 35 views
1

在下面的示例中,我嘗試使用missForest來補償缺少的值。爲了加快我使用foreach包的過程。其中我使用了100棵樹,然後我通過那些樹錯過了最後的功能。這是平行missForest的正確方法嗎?Parallel 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}) 

回答

1

,我不明白的方式並行,以一個單一的呼叫,而無需修改missForest功能本身。你當然可以同時多次調用它,但這似乎並不是你想要做的。

你的示例代碼的一些其他注意事項:

  • foreach循環僅使用一個單一的迭代。
  • ntree變量未使用。
  • 由於missForest(iris.na)$ximp返回一個數據幀,您不應該將結果與需要randomForest對象的combine函數結合使用。
  • 沒有註冊並行後端。
+0

史蒂夫:你能告訴我怎麼做嗎? – hema

+0

@hema請問如何修改missForest並行執行randomForest? –

+0

是的,如果可以的話請----我多次看到這個問題,從來沒有好的答案。 – hema

2

我認爲這應該可以解決您的問題。

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