gpt4 book ai didi

r - 具有随机森林的图像分类(栅格堆栈)(程序包测距仪)

转载 作者:行者123 更新时间:2023-12-04 06:53:58 25 4
gpt4 key购买 nike

我正在使用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)

给出的错误是

Error in v[cells, ] <- predv : incorrect number of subscripts on matrix



虽然我的真实数据的错误是

Error in p[-naind, ] <- predv : number of items to replace is not a multiple of replacement length



我唯一想到的是,ranger.prediction对象包含除感兴趣的预测以外的其他几个元素。无论如何,如何使用游侠在栅格堆栈上进行预测?

最佳答案

您可以通过在插入符号包的训练函数中训练模型来对栅格堆栈上的游侠模型进行预测:

library(caret)
ranger.model<-train(Species ~ ., data=iris,method = "ranger")
ranger.pred<-predict(r,ranger.model)

但是,如果要预测标准误差,这将不起作用,因为火车对象的预测函数不接受 type = 'se'。我通过使用此文档为此目的构建函数来解决了这个问题:

https://cran.r-project.org/web/packages/raster/vignettes/functions.pdf
# Function to predict standard errors on a raster
predfun <- function(x, model, type, filename)
{
out <- raster(x)
bs <- blockSize(out)
out <- writeStart(out, filename, overwrite=TRUE)
for (i in 1:bs$n) {
v <- getValues(x, row=bs$row[i], nrows=bs$nrows[i])
nas<-apply(v,1,function(x) sum(is.na(x)))
p<-numeric(length = nrow(v))
p[nas > 0]<-NA
p[nas == 0]<-predict(object = model,
v[nas == 0,],
type = 'se')$se
out <- writeValues(out, p, bs$row[i])
}
out <- writeStop(out)
return(out)
}

# New ranger model
ranger.model<-ranger(Species ~ .
, data=iris
, probability=TRUE
, keep.inbag=TRUE
)
# Run predictions
se<-predfun(r
, model = ranger.model
, type = "se"
, filename = paste0(getwd(),"/se.tif")
)

关于r - 具有随机森林的图像分类(栅格堆栈)(程序包测距仪),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46354103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com