r - 使用并行训练带有插入符号的随机森林
问题描述
我想利用手头的 20 个 CPU 内核在 R 中训练随机森林。我通常使用 randomForest 包的代码是这样的:
rf = randomForest(Pred~., train, ntree=100, importance=TRUE)
rf
Pred
因此,我使用具有 11 个级别的因子和train
具有 74 个数字特征和约 84k 观察值的数据框来训练一个有 100 棵树的森林。
这个想法是通过在我的代码中使用插入符号来加快速度(来自这个例子):
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
为我确实想在整个训练集上进行训练(请参阅文档)。但是我没有从 , 中得到准确度fit
,fit$results
是空的。如果我设置method=oob
了一个优化mtry
完成,这也给了我准确性。
有没有一种方法可以简单地使用插入符号并行运行第一个代码片段而无需任何超参数优化?
解决方案
这是一个老问题,但您可以尝试使用该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)
你也可以参考这篇文章。
推荐阅读
- javascript - 尝试更新对象中的数组并获取 TypeError: Cannot read properties of undefined (reading 'name')
- python - 在 Scala 代码和 Spark 中使用 Python 中的 pmdarima 库 - 时间序列
- html - 如何在 Nuxt 中导入和使用自定义 Chart.js 插件?(Chartjs-vuejs v2.9.4)
- python - 如何编写一个 Python 计算机程序,它将任何有效的算术表达式作为字符串并输出一个列表(或字符串数组)?
- python - 是否可以使用预签名的 url 通过 lambda 函数将文件上传到 s3?
- android - 有没有办法知道 Xamarin 中 BLE(蓝牙低功耗)扫描设备使用的协议类型?
- obiee - 无法将 obiee 12c 与 Essbase 连接
- geopandas - 将 DataFrame XYZ 转换为 Geopandas LineString
- c++11 - 前向迭代器的高级方法的运行时复杂度是多少?
- javascript - 如何将 url 从 background.js 传递到 popup.js?