You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terra predict函数无法预测随机森林模型问题求助

问题:terra::predict调用随机森林模型预测时出错

报错信息

Error in model.frame.default(Terms, newdata, na.action = na.omit) :
object is not a matrix

Warning message:
'newdata' had 19328 rows but variables found have 11136 rows

核心原因

  1. 训练模型时的变量名与栅格图层的名称不匹配(即使你尝试修改过,可能操作方式有误)
  2. 随机森林分类模型在terra::predict中需要明确指定预测类型,输入格式需匹配模型期望的结构

解决步骤

1. 强制统一栅格与训练变量的名称

读取栅格后,检查并修改其名称,确保和训练数据中的预测变量名bathy_pei完全一致:

bathy_pei = terra::rast("./data/bathymetry_full.tif")
# 查看当前栅格的名称
print(names(bathy_pei))
# 强制修改为训练时用的变量名
names(bathy_pei) <- "bathy_pei"

2. 规范训练模型的代码

显式指定data参数,避免数据传递歧义:

env$Sediment = as.factor(env$Sediment)
rf_a = randomForest(Sediment ~ bathy_pei, data = env)

3. 调整预测函数的参数

针对分类模型添加type="response"参数,确保模型输出类别而非概率值:

rf_pred = terra::predict(bathy_pei, model = rf_a, na.rm = FALSE, type = "response")

如果上述代码仍报错,可尝试显式定义预测逻辑,确保输入格式匹配:

rf_pred = terra::predict(
  bathy_pei, 
  model = rf_a, 
  na.rm = FALSE, 
  type = "response",
  fun = function(model, data) {
    predict(model, newdata = data, type = "response")
  }
)

额外检查点

  • 确认训练数据env$bathy_pei无缺失值,且数值范围与栅格数据匹配
  • 检查栅格是否为单图层(执行nlyr(bathy_pei)应返回1)
  • 若栅格存在大量缺失像元,可尝试设置na.rm=TRUE跳过缺失值

内容的提问来源于stack exchange,提问作者user30057623

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 15:23:12