在 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
我正在尝试 运行 在包含 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