sma*_*rld 3 parallel-processing r 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)
Run Code Online (Sandbox Code Playgroud)
我使用allowParallel = TRUE在rfeControl,希望它会在我的Windows机器上运行的并行处理。但我不确定它是否这样做,因为在设置allowParallel=TRUE后我没有看到运行时间有任何减少。这个过程需要很长时间,每次1-2小时后我不得不中断内核。
我如何知道caret是否正在并行运行 RFE?我是否需要为插入符号安装任何其他并行化包以并行运行此过程?
任何帮助/建议将不胜感激!我是机器学习领域的新手,所以我需要一段时间才能弄清楚。
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)
Run Code Online (Sandbox Code Playgroud)
无需并行处理即可运行
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
Run Code Online (Sandbox Code Playgroud)
寄存器并行
library(doParallel)
cl <- makeCluster(detectCores(), type='PSOCK')
registerDoParallel(cl)
Run Code Online (Sandbox Code Playgroud)
并行处理运行
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
Run Code Online (Sandbox Code Playgroud)