如何使用 parRF 方法使随机森林运行得更快
Posted
技术标签:
【中文标题】如何使用 parRF 方法使随机森林运行得更快【英文标题】:How to use parRF method so random forest will run faster 【发布时间】:2014-06-29 17:20:23 【问题描述】:我想在一个大数据集上运行随机森林:100k * 400。当我使用随机森林时,它需要很长时间。我可以使用 caret 包中的 parRF 方法来减少运行时间吗? 什么是正确的语法? 这是一个示例数据框:
dat <- read.table(text = " TargetVar Var1 Var2 Var3
0 0 0 7
0 0 1 1
0 1 0 3
0 1 1 7
1 0 0 5
1 0 1 1
1 1 0 0
1 1 1 6
0 0 0 8
0 0 1 5
1 1 1 4
0 0 1 2
1 0 0 9
1 1 1 2 ", header = TRUE)
我试过了:
library('caret')
m<-randomForest(TargetVar ~ Var1 + Var2 + Var3, data = dat, ntree=100, importance=TRUE, method='parRF')
但我看不出有太大的不同。有什么想法吗?
【问题讨论】:
【参考方案1】:您看不到差异的原因是您没有使用caret
包。您确实使用library()
命令将其加载到您的环境中,但随后您运行不使用插入符号的randomForest()
。
我建议首先创建一个数据框(或data.table),其中仅包含您的输入变量,以及一个包含您的结果的向量。我指的是最近更新的caret docs。
x <- data.frame(dat$Var1, dat$Var2, dat$Var3)
y <- dat$TargetVar
接下来,验证您是否有可用的 parRF
方法。直到我将我的插入符号包更新到最新版本 (6.0-29) 后我才这样做。
library("randomForest")
library("caret")
names(getModelInfo())
您应该在输出中看到parRF
。现在您可以创建训练模型了。
library(foreach)
rfParam <- expand.grid(ntree=100, importance=TRUE)
m <- train(x, y, method="parRF", tuneGrid=rfParam)
【讨论】:
我认为您需要定义mtry
参数而不是ntree
。此解决方案似乎会产生错误:Error in train.default(x, y, weights = w, ...) : The tuning parameter grid should have columns mtry
是的,@Lenwood 的回答很棒。以前的用户指出,它不适用于作为参数给出的 ntree 并且 mtry 是必需的。因此,如果您希望在 R 中使用 randomForest 包的默认设置,它将是:` rfParam
expand.grid(mtry=50, ntree = 1000,sampsize =90000, nodesize = 1, 重要性 = TRUE, nPerm =2, oob.prox = TRUE) & m
以上是关于如何使用 parRF 方法使随机森林运行得更快的主要内容,如果未能解决你的问题,请参考以下文章