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
核心原因
- 训练模型时的变量名与栅格图层的名称不匹配(即使你尝试修改过,可能操作方式有误)
- 随机森林分类模型在
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
相关产品推荐
相关产品推荐

