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

使用R语言ranger包做随机森林回归时predict函数报缺失数据错误

解决ranger包随机森林回归预测时的缺失数据错误

问题原因

ranger包的预测函数不支持自动处理含NA的输入数据,你训练模型时仅通过as.data.frame(s, na.rm=TRUE)排除了训练集的NA,但预测用的栅格s中仍存在NA值,直接调用predict(s, m)就会触发Missing data in columns错误。额外的类型转换警告是因为栅格数据默认类型可能为整数,转数值时引入了NA(这不是核心问题)。

解决方案

需要手动筛选出预测数据中无NA的像元,仅对这些像元执行预测,再将结果填充回栅格。以下是修正后的完整代码:

library(terra)
library(ranger)

# 构建示例数据
s <- rast(system.file("ex/logo.tif", package="terra"))[[1:2]] 
names(s) = c("ntl", "covar")
s[10:20, ] <- NA

# 1. 准备训练数据并训练模型
train_data <- as.data.frame(s, na.rm=TRUE)
# 转换为数值型避免类型警告
train_data <- lapply(train_data, as.numeric) %>% as.data.frame()
m <- ranger(ntl~., data=train_data, mtry=1)

# 2. 处理预测数据中的NA并执行预测
# 创建空结果栅格
p <- rast(s, nlyrs=1)
names(p) <- "predicted_ntl"

# 筛选出自变量无NA的像元索引
non_na_idx <- which(!is.na(s$covar))
# 提取这些像元的自变量数据
pred_input <- extract(s, non_na_idx)
# 执行预测
pred_results <- predict(m, data=pred_input)
# 将预测值填充到结果栅格
p[non_na_idx] <- pred_results$predictions

补充说明

  • 如果你的自变量不止一个,筛选无NA像元时要确保所有自变量都非NA,可以用complete.cases():
    # 提取所有变量的像元数据,筛选完全无NA的行
    all_data <- as.data.frame(s)
    non_na_rows <- complete.cases(all_data)
    non_na_idx <- which(non_na_rows)
    
  • ranger本身没有类似randomForest的na.action参数,所有NA处理都需要手动完成,不管是训练还是预测阶段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:45:58