首页 文章

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

提问于
浏览
0

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

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

1 回答

  • 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包的foreach(see here) . 您可以将每个数据子集(针对新的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]] 将是您第一个训练有素的射频模型 .

相关问题