我正在使用randomForest
包进行一些工作,虽然效果很好,但可能会很耗时。有人对加快速度有任何建议吗?我正在使用带有双核AMD芯片的Windows 7盒子。我知道R不是多线程/处理器,但很好奇是否有任何并行包(rmpi
,snow
,snowfall
等)可用于randomForest
。谢谢。
编辑:
我正在使用rF进行某些分类工作(0和1)。数据大约有8到12个可变列,并且训练集是1万行的样本,因此它的大小不错但并不疯狂。我正在运行500棵树,而其中的mtry是2、3或4。
编辑2:
这是一些输出:
> head(t22)
Id Fail CCUse Age S-TFail DR MonInc #OpenLines L-TFail RE M-TFail Dep
1 1 1 0.7661266 45 2 0.80298213 9120 13 0 6 0 2
2 2 0 0.9571510 40 0 0.12187620 2600 4 0 0 0 1
3 3 0 0.6581801 38 1 0.08511338 3042 2 1 0 0 0
4 4 0 0.2338098 30 0 0.03604968 3300 5 0 0 0 0
5 5 0 0.9072394 49 1 0.02492570 63588 7 0 1 0 0
6 6 0 0.2131787 74 0 0.37560697 3500 3 0 1 0 1
> ptm <- proc.time()
>
> RF<- randomForest(t22[,-c(1,2,7,12)],t22$Fail
+ ,sampsize=c(10000),do.trace=F,importance=TRUE,ntree=500,,forest=TRUE)
Warning message:
In randomForest.default(t22[, -c(1, 2, 7, 12)], t22$Fail, sampsize = c(10000), :
The response has five or fewer unique values. Are you sure you want to do regression?
> proc.time() - ptm
user system elapsed
437.30 0.86 450.97
>
最佳答案
foreach
软件包的手册中有一个关于并行随机森林的章节
(Using The foreach Package,第5.1节):
> library("foreach")
> library("doSNOW")
> registerDoSNOW(makeCluster(4, type="SOCK"))
> x <- matrix(runif(500), 100)
> y <- gl(2, 50)
> rf <- foreach(ntree = rep(250, 4), .combine = combine, .packages = "randomForest") %dopar%
+ randomForest(x, y, ntree = ntree)
> rf
Call:
randomForest(x = x, y = y, ntree = ntree)
Type of random forest: classification
Number of trees: 1000
如果我们想创建一个包含1000棵树的随机森林模型,而我们的计算机有四个
核心,我们可以通过将
randomForest
参数设置为250来执行四次ntree
函数,将问题分为四部分。当然,我们必须组合生成的randomForest
对象,但是randomForest
包附带了一个称为combine
的函数。