首页 文章

错误:使用栅格属性表(RAT)时,新数据中的预测变量与训练数据中的预测变量不匹配

提问于
浏览
1

我有一个使用包含数字和分类预测变量的插入符包训练的RandomForest模型 . 我试图使用这个训练的模型对新数据集进行预测,该数据集是一个rasterStack,每个预测器包含一个图层 . 我已经使用 raster 包中的 ratify 函数将分类栅格图层转换为因子,并通过添加栅格属性表(RAT)添加了与训练集语法对应的字符串,但是当我预测我得到以下内容时错误:

# Error in predict.randomForest(modelFit, newdata) : 
# Type of predictors in new data do not match that of the training data.

我想我可能会以某种方式错误地制定RAT,否则我会误解RAT的功能 . 下面是一个可重复性最小的例子 . 什么出错了?

require(caret)
require(raster)

set.seed(150)
data("iris")

# Training dataset
iris.x<-iris[,1:4]
iris.x$Cat<-"Low"
iris.x$Cat[1:60]<-"High"
iris.x$Cat<-as.factor(as.character(iris.x$Cat))
iris.y<-iris$Species

# Train RF model in Caret
ctrl<-trainControl("cv", num=5, p = 0.9)

mod<- train(iris.x,iris.y, 
              method="rf",
              trControl=trainControl(method = "cv"))

# Create raster stack prediction dataset
r <- raster(ncol=10, nrow=5)
tt <- sapply(1:4, function(x) setValues(r,  round(runif(ncell(r),1,5))))

#Categorical raster layer with RAT
r_cat<-raster(ncol=10, nrow=5)
r_cat[1:25]<-1
r_cat[26:50]<-2
ratr_cat <- ratify(r_cat)
rat <- levels(ratr_cat)[[1]]
rat$PCN <- c(1,2)
rat$PCN_level <- c('Low','High')
levels(ratr_cat) <- rat

#Stack raster layers
t.stack <- stack(c(tt,ratr_cat),RAT = TRUE)

#Make sure names in stack match training dataset
names(t.stack)<-c('Sepal.Length','Sepal.Width', 'Petal.Length', 'Petal.Width','Cat')

#Ensure that categorical layer still has RAT and is a factor
t.stack[['Cat']] #yep
is.factor(t.stack[['Cat']]) #yep

#Predict new data using model
mod_pred <- predict(t.stack, mod)

1 回答

  • 1

    因子 RasterLayer (属性层)似乎是(或被处理的)有序因子 . 所以你只需要用有序向量训练模型 . 你可以改变这一行:

    iris.x$Cat<- ordered(as.character(iris.x$Cat), levels = c("Low", "High"))
    

相关问题