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

使用superClass进行遥感图像分类时遇newdata行数为0错误求助

问题描述

运行遥感图像分类代码时出现报错:

Error in predict.randomForest(modelFit, newdata): newdata has 0 rows

使用的代码如下:

#libraries
library(sf)
library(RStoolbox)
library(sp)
library(raster)
library(terra)
library(caret)
library(e1071)

#Load image
kalomo2022<- brick("Kalomo_2022.tif")

#Train data
train <- sf::read_sf("Train_Kal_only2022_1.shp")
train_1 <- as(train, "Spatial") #to change it from sf to spatial


#conducting the classification
sc_kalomo2022<- superClass(kalomo2022, model = "rf", trainData = train_1,  
                           responseCol = "id", mode = "classification",
                           nsamples = 10000, nSamplesV = 10000, 
                           polygonBasedCV = T, kfold = 5, minDist = 1, 
                           trainPartition = .8, na.rm = T, predict=T, 
                           predType = "raw")
错误原因及解决办法
  • 空间坐标系不匹配
    检查训练矢量数据train_1和栅格图像kalomo2022的坐标系是否一致。若投影不同,superClass无法从图像中提取训练样本,直接导致后续无数据可用。
    操作:用proj4string(train_1)和crs(kalomo2022)查看坐标系,不一致则执行train_1 <- spTransform(train_1, crs(kalomo2022))统一投影。

  • 采样参数设置过度
    nsamples = 10000的总采样数可能远超训练区域的实际像素量,加上minDist = 1要求采样点间隔至少1个像素,会导致实际提取的样本数为0。
    操作:先将nsamples调小(比如改为1000),移除minDist参数(或设为0),测试是否能正常提取样本,再逐步调整参数至合理值。

  • 训练标签字段无效
    确认train_1中的id字段是否存在,且包含非空的分类标签。若id字段为空或不存在,模型无法划分训练集,后续流程直接报错。
    操作:用head(train_1@data)查看属性表,验证id字段的有效性,必要时更换为正确的分类标签字段。

  • 训练区域栅格全为NA
    若kalomo2022中训练数据覆盖的区域全是NA值,无法提取有效样本。
    操作:用plot(kalomo2022)查看图像范围,确认训练矢量是否落在图像有效区域内;用mask(kalomo2022, train_1)提取训练区域栅格,检查是否有非NA值。

  • 交叉验证参数冲突
    开启polygonBasedCV = T时,若训练多边形数量少于kfold = 5,或单个多边形的像素量不足以支撑采样,会导致验证集采样失败,进而触发预测报错。
    操作:先将polygonBasedCV设为F,测试分类流程是否正常;若正常,再开启该参数并将kfold调整为小于训练多边形数量的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:17:53