如何使用 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 方法使随机森林运行得更快的主要内容,如果未能解决你的问题,请参考以下文章

随机森林与支持向量机。哪个更快?

随机森林

关于机器学习中决策树的相关问题也谈随机森林

如何绘制最佳参数对应的随机森林树

如何让这个 python 代码运行得更快?

如何更改 R 中随机森林的分割标准?