使用并行训练带有插入符号的随机森林
Posted
技术标签:
【中文标题】使用并行训练带有插入符号的随机森林【英文标题】:Train random forest with caret using parallel 【发布时间】:2019-06-16 18:36:08 【问题描述】:我想利用手头的 20 个 CPU 内核在 R 中训练随机森林。我通常使用 randomForest 包的代码是这样的:
rf = randomForest(Pred~., train, ntree=100, importance=TRUE)
rf
因此,我使用具有 11 个级别的因子 Pred
和具有 74 个数字特征和约 84k 观察值的数据框 train
训练了一个包含 100 棵树的森林。
我的想法是通过在我的代码中使用插入符号来加快这一速度(源自example):
cluster <- makeCluster(19)
registerDoParallel(cluster)
trainctrl <- trainControl(method="none", number=1, allowParallel=TRUE)
fit <- train(Driver~., train, method="parRF", trControl=trainctrl, ntree=100)
stopCluster(cluster)
registerDoSEQ()
fit
我将示例中的method=cv
替换为method=none
,因为我确实想在整个训练集上进行训练(请参阅documentation)。但是我没有从fit
得到准确度,fit$results
是空的。如果我设置method=oob
,那么mtry
的优化就完成了,这也给了我准确度。
有没有一种方法可以简单地使用插入符号并行运行第一个代码 sn-p 而无需任何超参数优化?
【问题讨论】:
我建议使用ranger
包。开箱即用。 method = "ranger"
插入符号。
感谢您的提示,乍一看似乎很有希望。我会调查的。
【参考方案1】:
这是一个老问题,但您可以尝试使用 doMC
包(但它可能无法在 Windows 中运行)。
示例代码:
library(randomForest)
library(caret)
library(e1071)
library(doMC)
# Define the control
trControl <- trainControl(method = "cv",
number = 10,
search = "grid")
# Define number of parallel instances you want
registerDoMC(8)
# define parameters for grid search
tuneGrid <- expand.grid(.mtry = c(2: 5))
# train Random Forest model
rf_mtry <- train(TrainSet,yTrain,
method = "rf",
metric = "Accuracy",
tuneGrid = tuneGrid,
trControl = trControl,
importance = TRUE,
ntree = 300)
print(rf_mtry)
您也可以参考this post。
【讨论】:
以上是关于使用并行训练带有插入符号的随机森林的主要内容,如果未能解决你的问题,请参考以下文章
在 Macbook 中并行执行随机森林的小速度增益(使用 R,插入符号)