在Windows上使用插入符号并行进行递归特征消除



我试图在包含27个预测变量的数据帧上运行随机森林的递归特征消除,每个预测变量有3653个值。因此,在预测器数据框中总共有98631个值。我使用的是包插入符号中的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)

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

如何知道插入符是否并行运行RFE ?我是否需要为插入符安装任何其他并行化包来并行运行此进程?

任何帮助/建议将不胜感激!我是机器学习领域的新手,所以我花了一些时间来弄清楚。

尝试在运行rfe之前安装并注册doParallel包。这在我的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 

最新更新