从R中的randomForest包中并行化rfcv

时间:2015-12-09 11:50:24

标签: r random-forest feature-selection

我正在尝试使用rfcv函数进行多变量随机森林特征选择。我设法得到正常的rf命令(构建随机森林)模型,以便使用以下方法进行并行处理:

library(randomForest)
library(doMC)
nCores <- detectCores();
registerDoMC(nCores) #number of cores on the machine
rf.model <- foreach(ntree=rep(round(510/nCores),nCores), .combine=combine, .multicombine=TRUE, .packages="randomForest") %dopar% {
    rf <- randomForest(y = outcome, x = predictor, ntree=ntree, mtry=4,      norm.votes=FALSE, importance=TRUE)
  }

在使用这个之前,我想使用rfcv进行我的功能选择。我尝试使用以下内容执行此操作:

  rf.model <- foreach(1:nCores, .packages="randomForest") %dopar% {
    rf.rfcv <- rfcv(ytrain = outcome, xtrain = predictor, scale=4)
  }

然而,这个函数的结果是相同的复制次数所以我只是将rf.rfcv作为4个相同结果的列表。

任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:1)

randomForest可以无缝并行运行,因为randomForest :: combine函数会将4个rf.objects减少为一个对象。因此,在第一个代码示例中,您仅使用随机种子来训练4个森林模型。使用,combine = combine(隐式组合= randomForest :: combine),您可以使用randomForest包中的专用组合函数来指定4个模型的输出列表。

rfcv没有任何组合功能,简单地组合四个输出也没有意义。在您的代码中,foreach只运行该函数4次并返回列表中的输出。如果你想并行运行rfcv,修复方法就是:

my.rfcv = randomForest::rfcv #copy function from package to .Global.env
fix(my.rfcv) #inspect function and perhaps copy entire function to your source functions script

#rewrite for-loop at line 35-57 into a foreach-loop
#write a reducer to combine test results of each fold