我试图在包含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