我在R中并行运行随机森林
library(doMC)
registerDoMC()
x <- matrix(runif(500), 100)
y <- gl(2, 50)
Run Code Online (Sandbox Code Playgroud)
并行执行(耗时73秒)
rf <- foreach(ntree=rep(25000, 6), .combine=combine, .packages='randomForest') %dopar%
randomForest(x, y, ntree=ntree)
Run Code Online (Sandbox Code Playgroud)
顺序执行(耗时82秒)
rf <- foreach(ntree=rep(25000, 6), .combine=combine) %do%
randomForest(x, y, ntree=ntree)
Run Code Online (Sandbox Code Playgroud)
在并行执行中,树生成非常快,如3-7秒,但其余时间用于组合结果(组合选项).因此,它唯一值得运行并行执行的是树的数量真的很高.有什么方法可以调整"组合"选项,以避免在我不需要的每个节点上的任何计算,并使其更快
PS.以上只是数据的一个例子.实际上,对于大约100个观察,我有大约10万个特征.
我正在使用该randomForest
包进行一些工作,虽然它运行良好,但它可能非常耗时.任何人都有加快速度的建议吗?我正在使用带有双核AMD芯片的Windows 7机箱.我知道关于R不是多线程/处理器,但如果任何并行包(的好奇rmpi
,snow
,snowfall
等)工作过randomForest
的东西.谢谢.
编辑:
我正在使用rF进行一些分类工作(0和1).数据有大约8-12个可变列,训练集是10k行的样本,因此它的体积适中但不疯狂.我正在运行500棵树和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 …
Run Code Online (Sandbox Code Playgroud) 我正在R中尝试在一个广泛的遗传数据集(662 x 35350)上进行R randomForest分析.除结果外的所有变量都是数字,其中99%是二进制0/1.我对R randomForest()非常熟悉,但之前只使用过5000-10000个变量的数据集.下一个计划的分析阶段将是一个包含数百万变量的异常大的数据集,因此我有动力找到解决这个问题的方法.
我的理解是R randomForest对变量的数量没有固有的限制,我知道我已经读过10万个变量数的已发表的工作.当我尝试对完整数据集进行分析时(设置ntree = 100,我得到:"错误:protect():保护堆栈溢出"
无论数据集是数据框(如最初提供的)还是将其转换为矩阵,都是如此.当我将运行提交到集群进行并行处理时,我发现我的所有内核在执行代码时都在运行.我也看到,在任何情况下,我的RAM使用率都接近机器的限制(48 GB).在执行尝试期间,它最多会占据大约16%的RAM.(我在办公室的512 GB RAM机器上也遇到了同样的问题,它的使用率从未超过5%).
我已经尝试了在线发现的几种解决方案,包括之前的stackoverflow帖子中的一个(增加(或减少)R进程可用的内存).我尝试了BobbyShaftoe在2009年提供的说明(在快捷方式选项卡的属性中添加了--max-mem-size = 49000M和--max-vsize = 49000M),但这阻止了R正常打开.我也尝试在命令行中运行这些命令,但这些命令生成:' - max-ppsize'/' - max-vsize = 5000M"不被识别为内部或外部命令,可操作程序或批处理文件.
我还阅读了这篇文章中提出的建议:如何提高randomForest的性能?.在完成至少一次具有完整功能集的运行之前,我无法减少功能的数量.(另外,我不确定问题是RAM本身.)
我在Windows 7上运行Revolution R 7.2(64位).我的内存限制设置为49807 Mb,但我不确定memory.limit是否特定地解决了允许的保护堆栈大小.
将数据集分解为较小的变量块(确实解决了堆栈溢出问题)并不能解决分析问题.是否有关于可能允许对完整数据集进行分析的R设置的建议?
##########################################
# input DF
##########################################
object.size(inputDF) # 191083664 bytes (as matrix, size=189391088 bytes, not much smaller)
dim(inputDF) # 662 x 35350
##########################################
#Load necessary packages into R's memory
##########################################
require(iterators)
require(foreach)
require(parallel)
require(doParallel)
require(randomForest)
###########################################
# Get the number of available logical cores
###########################################
cores …
Run Code Online (Sandbox Code Playgroud)