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

R 提高使用随机森林模型预测新数据的速度,r,performance,prediction,random-forest,r-raster,R,Performance,Prediction,Random Forest,R Raster,我正在使用随机森林生成物种分布模型。这些模型试图预测一个物种在各种环境属性的条件下发生的概率。对于大多数物种,我们的初始潜在预测值集在10到25之间,每个预测值由一个包含460000000个单元格的GIS光栅文件表示。由于训练数据的性质,我将不在这里讨论,我实际上正在基于数据子集构建多个RF模型(大约10到100+),然后结合起来为每个物种创建我的整体模型。实际上,构建模型所需的时间相对较少(通常为几分钟或更少),但使用预测函数生成基于此模型的预测概率栅格层可能需要20多个小时。我怀疑这一漫长的

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

要提供更多的细节。。。一旦我有了经过训练的模型,我将通过光栅包创建一个表示预测器层的光栅堆栈,然后使用光栅包中的predict()函数对该堆栈进行预测。我有一个功能相当强大的桌面(Core i7,3.5GHz,w/32 GB RAM),输入和输出光栅文件位于本地硬盘上,而不是通过网络移动。我看到了mbq的答案,其中有一些关于加快使用randomForest生成模型的有用建议,我正在寻找类似的建议来加快预测操作。我可以想出一些可能有用的方法(例如,种植少量的树,使用其中一个库进行并行处理),我计划在时间允许的情况下测试这些方法,但我不清楚如果问题主要是读写瓶颈,这些方法是否会产生重大影响。如有任何建议,我将不胜感激

你可以看一下。这使用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_outputs=foreach(i=1:length(yourdatasubsets),.inoder=F,.package=c(randomForest))%dopar%{
种子(10)

rf我只提供一个轶事,以这种方式对光栅进行数学运算非常缓慢,因此这可能确实是你的问题。关于:我确实看到过关于parallelRandomForest的帖子。它似乎只支持回归,而不支持分类。此外,还不清楚这是否真的会加快预测的速度,因为重点似乎是ars正在进行培训。读/写速度可能仍然存在瓶颈。