R语言biomod2包运行SDM时随机森林模型报错如何解决
报错原因说明
两个报错为连锁关系:
- 核心问题是第一个报错
Error: cannot allocate vector of size 572.0 Mb,属于R运行时内存不足,随机森林(RF)训练过程中无法分配所需内存,导致模型训练中断 - 第二个报错为衍生错误:因为RF训练中断,后续预测步骤所需的
model.bm对象没有被正常创建,因此调用predict函数时找不到对应对象
解决方案
按优先级从高到低尝试以下操作即可解决:
- 调整随机森林模型参数,降低内存占用
在定义myBiomodOption时手动设置RF的运行参数,降低树的数量、提升节点最小样本量,减少单模型内存需求,示例代码如下:
myBiomodOption <- BIOMOD_ModelingOptions( RF = list(ntree = 300, # 默认值为500,可根据情况下调至200-300 nodesize = 8) # 默认值为1,调大至5-10可降低单棵树复杂度 )
释放冗余内存,调高R内存上限
- 运行模型前清空工作环境中无用的对象,执行
rm(list = ls())后调用gc()主动释放内存 - Windows系统可手动调高R内存上限,比如16G内存的设备可执行
memory.limit(size = 16384)(数值为MB,不超过设备物理内存即可),macOS/Linux系统无需手动设置,关闭其他占内存的软件再运行代码即可
- 运行模型前清空工作环境中无用的对象,执行
简化模型运行配置,减少不必要的计算
- 你当前设置的
VarImport = 3(变量重要性重复计算3次)会大幅增加内存占用,可先下调至1,或暂时设置为0关闭变量重要性计算,跑通模型后再单独计算 - 你当前选择了9种模型评估指标,仅保留常用的
c('KAPPA','TSS','ROC')即可满足分析需求,减少无效计算可以降低内存消耗
- 你当前设置的
拆分模型运行任务
你当前一次性运行9种模型,内存占用叠加后很容易超限,可以先将models参数中的'RF'去掉,跑完其他所有低内存消耗的模型后,再单独调用BIOMOD_Modeling仅运行RF模型,避免多模型同时占用内存。下调训练集比例
如果以上操作仍无法解决,可将DataSplit = 80下调至70甚至60,减少训练集样本量,降低RF训练过程的内存需求。
内容的提问来源于stack exchange,提问作者Norrawith DAMRONGTAWAT
相关产品推荐
相关产品推荐

