我正在使用R包护林员对随机森林进行拟合以对光栅图像进行分类 . 预测函数产生错误,此后我提供了一个可重现的例子 .
library(raster)
library(nnet)
library(ranger)
data(iris)
# put iris data into raster
r<-list()
for(i in 1:4){
r[[i]]<-raster(nrows=10, ncols=15)
r[[i]][]<-iris[,i]
}
r<-stack(r)
names(r)<-names(iris)[1:4]
# multinom (an example that works)
nn.model <- multinom(Species ~ ., data=iris, trace=F)
nn.pred<-predict(r,nn.model)
# ranger (doesn't work)
ranger.model<-ranger(Species ~ ., data=iris)
ranger.pred<-predict(r,ranger.model)
给出的错误是
v [cells,]中的错误< - predv:矩阵上的下标数不正确
虽然我的真实数据的错误是
p [-naind,]中的错误< - predv:要替换的项目数不是替换长度的倍数
我唯一想到的是,ranger.prediction对象包含了除感兴趣的预测之外的几个元素 . 无论如何,如何使用游侠在光栅堆栈上进行预测?
3 回答
您可以通过在插入符号包的train函数内训练模型,从栅格堆栈上的游侠模型运行预测:
但是,如果要预测标准误差,则此方法不起作用,因为列车对象的预测函数不接受
type = 'se'
. 我通过使用本文档为此目的构建函数来解决这个问题:https://cran.r-project.org/web/packages/raster/vignettes/functions.pdf
经过一番摆弄:
as.data.frame(as.matrix(r))
做到了!免责声明:我没有检查输出的正确性,所以这可能根本没有结果,但......
如果有帮助,它可以使用randomForest而不是游侠