我正在尝试对包含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 安装任何其他并行化软件包以并行运行此过程?
任何帮助/建议将不胜感激!我是机器学习世界的新手,所以我花了一些时间来解决问题。
答案 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