提高使用随机森林模型预测新数据的速度

问题描述 投票:0回答:1

我正在使用随机森林生成物种分布模型。这些模型试图根据各种环境属性来预测某个物种发生的概率。对于大多数物种,我们的初始潜在预测变量集介于 10 到 25 个之间,每个预测变量由包含 460,000,000 个像元的 GIS 栅格文件表示。由于训练数据的性质(我不会在这里讨论),我实际上是根据数据子集构建多个 RF 模型(大约 10 到 100 多个),然后组合起来为每个物种创建整体模型。实际上构建模型花费的时间相对较少(通常几分钟或更短),但使用预测函数基于该模型生成预测概率的栅格图层可能需要 20 多个小时。我怀疑这个漫长的过程很大程度上是由于读取/写入大型光栅文件,而瓶颈可能是硬盘驱动器的读取/写入速度。

提供更多细节...一旦我有了训练有素的模型,我将通过栅格包创建代表预测器图层的图层的栅格堆栈,然后使用中的 Predict() 函数预测该堆栈光栅包。我有一个相当强大的台式机(Core i7,3.5GHz,带 32 GB RAM),输入和输出光栅文件位于本地硬盘上,而不是通过网络移动。我看到 mbq 的答案here提供了有关使用 randomForest 加速模型生成的有用建议,并且正在寻找类似的建议来加速预测操作。我可以想到一些“可能”有帮助的事情(例如,种植较少数量的树,使用其中一个库进行并行处理),并且我计划在时间允许的情况下测试这些,但我不清楚是否有任何帮助如果问题主要是读写瓶颈,那么这些将产生重大影响。有什么建议吗?

r performance prediction random-forest r-raster
1个回答
1
投票
mctune 函数

。这使用 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 包中的 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 模型。

    

© www.soinside.com 2019 - 2024. All rights reserved.