在Windows

时间:2015-08-29 20:46:50

标签: r parallel-processing machine-learning random-forest r-caret

我正在尝试对包含27个预测变量的数据框上的随机林运行递归特征消除,每个变量具有3653个值。因此预测器数据帧中总共有98631个值。我正在使用 caret 包中的 rfe 函数。

require(caret)
require(randomForest)

subsets <- c(1:5, 10, 15, 20, 25)

set.seed(10)

ctrl <- rfeControl(functions = rfFuncs,
                   method = "repeatedcv",
                   repeats = 5,
                   verbose = FALSE,
                   allowParallel=TRUE)

rfProfile <- rfe(predictors, 
                 y,
                 sizes = subsets,
                 rfeControl = ctrl)

我在 rfeControl 中使用 allowParallel = TRUE ,希望它能在我的Windows机器上并行运行该进程。但是我不确定它是否正在这样做,因为在设置 allowParallel = TRUE 后我没有看到运行时间有任何减少。这个过程需要很长时间,而且每次1-2小时后我都不得不打断内核。

我如何知道插入符号是否并行运行RFE?我是否需要为 caret 安装任何其他并行化软件包以并行运行此过程?

任何帮助/建议将不胜感激!我是机器学习世界的新手,所以我花了一些时间来解决问题。

1 个答案:

答案 0 :(得分:4)

尝试在运行doParallel之前安装并注册rfe包。这似乎适用于我的Windows机器。

以下是使用caret之前和之后的doParallel文档中提取的一个冗长示例

subsetSizes <- c(2, 4, 6, 8)
set.seed(123)
seeds <- vector(mode = "list", length = 51)
for(i in 1:50) seeds[[i]] <- sample.int(1000, length(subsetSizes) + 1)
seeds[[51]] <- sample.int(1000, 1)

data(BloodBrain)

无需并行处理

set.seed(1)
system.time(rfMod <- rfe(bbbDescr, logBBB,
         sizes = subsetSizes,
         rfeControl = rfeControl(functions = rfFuncs, 
                                 seeds = seeds,
                                 number = 50)))

   user  system elapsed 
 113.32    0.44  114.43 

注册并行

library(doParallel) 
cl <- makeCluster(detectCores(), type='PSOCK')
registerDoParallel(cl)

使用并行处理运行

set.seed(1)
system.time(rfMod <- rfe(bbbDescr, logBBB,
         sizes = subsetSizes,
         rfeControl = rfeControl(functions = rfFuncs, 
                                 seeds = seeds,
                                 number = 50)))

   user  system elapsed 
   1.57    0.01   56.27