在 Windows 上使用 Caret parallel 进行递归特征消除

Making Recursive Feature Elimination using Caret parallel on Windows

我正在尝试 运行 在包含 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小时后中断内核。

我怎么知道 caret 是否在 运行 同时发送 RFE?我是否需要为 caret 到 运行 并行安装任何其他并行化包?

任何 help/suggestions 将不胜感激!我是机器学习领域的新手,所以我花了一些时间才弄明白。

尝试在 运行 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