我使用随机森林生成物种分布模型。这些模型试图以各种环境属性为条件来预测物种发生的概率。对于大多数物种,我们的初始潜在预测因子集合介于10到25之间,每个预测变量都由具有460,000,000个单元格的GIS光栅文件表示。由于培训数据的性质,我不会进入这里,我实际上是基于数据的子集构建多个RF模型(大约10到100+),然后组合创建我的整体模型每个物种。实际上构建模型花费的时间相对较少(通常为几分钟或更短),但使用预测函数生成基于此模型的预测概率的栅格图层可能需要20多个小时。我怀疑这个冗长的过程大部分是由于读取/写入大型光栅文件,而瓶颈可能是硬盘读/写速度。
提供更多细节......一旦我拥有训练有素的模型,我就会通过栅格包创建表示预测器层的图层的光栅堆栈,然后使用predict()预测到该堆栈功能在光栅包中。我有一个相当强大的桌面(Core i7,3.5GHz,w / 32 GB的RAM),输入和输出光栅文件在本地硬盘上,而不是通过网络移动。我看到了mbq的回答here以及有关使用randomForest加速模型生成的有用建议,并且我正在寻找类似的建议来加速预测操作。我可以想到可能帮助的一些事情(例如,使用其中一个库进行并行处理来生长少量树),并且我计划在时间允许的情况下测试这些,但它&如果问题主要是读写瓶颈,我不清楚这些中的任何一个是否会产生重大影响。我会很感激任何建议。
答案 0 :(得分:0)
您可以查看mctune function here。这使用e1071软件包来查找最佳参数。但是,您可以调整它以满足您的需求。
source( './mctune.R')
rf_ranges = list(ntree=c(seq(1,1000,100),seq(1000,8000,500)),
mtry=seq(5,15,2))
set.seed(10)
tuned.rf = mctune(method = randomForest, train.x = formula1,
data = dataframe, tunecontrol = tune.control(sampling = "cross",cross = 5),
ranges=rf_ranges,mc.control=list(mc.cores=16, mc.preschedule=T),confusionmatrizes=T )
save(tuned.rf, file = paste('./tuned_rf.RData',sep='') )
tuned.rf$best.model
plot(tuned.rf)
另一种选择可能是使用来自doparallel包(see here)的foreach。您可以将每个数据子集(对于新的RF模型)分配给每个核心:
RF_outputs = foreach(i=1:length(yourdatasubsets), .inorder=F, .package=c(randomForest)) %dopar% {
set.seed(10)
rf <- randomForest(formula, data=na.omit(yourdatasubsets[i]), ntree=2000, proximity=T)
return(rf)
}
每个经过培训的RF模型都将作为RF_outputs列表的一部分返回给您。所以RF_outputs[[1]]
将是您的第一个训练RF模型。