我正在使用R软件包ranger对随机森林进行拟合,以对光栅图像进行分类。预测函数会产生错误,下面我将提供一个可重复的示例。
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[单元格,]中的错误
虽然我真实数据的错误是
p[-naind,]中有错误
我唯一想到的是,除了感兴趣的预测之外,ranger.prediction对象还包括几个元素。无论如何,游侠如何被用来预测栅格堆栈?
如果有帮助的话,我用randomForest而不是ranger工作
library(randomForest)
rf.model<-randomForest(Species ~ ., data=iris)
rf.pred<-predict(r,rf.model)
经过一点摆弄:
pacman::p_load(raster, nnet, 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) # predict(object, newdata, type = c("raw","class"), ...)
# ranger (doesn't work)
ranger.model <- ranger(Species ~ ., data=iris)
ranger.pred <- predict(ranger.model, as.data.frame(as.matrix(r)))
<代码>组件。数据框架(如矩阵(r))成功了!
免责声明:我没有检查输出的正确性,所以这可能根本不会产生任何结果,但是...
identical(iris$Species, ranger.pred$predictions)
编辑,2021-07-15
有一个关于使用clusterR的问题,我发现了一种比我最初建议的更直接的方法。新代码的功能与原始代码相同,但方式更简单,并提供了并行处理选项:
# First train the ranger model
ranger.model <- ranger(Species ~ .
, data = iris
, probability = TRUE # This argument is needed for se
, keep.inbag = TRUE # So is this one
)
# Create prediction function for clusterR
f_se <- function(model, ...) predict(model, ...)$se
# Predict se using clusterR
beginCluster(2)
map_se <- clusterR(r
, predict
, args = list(ranger.model
, type = 'se' # Remember to include this argument
, fun = f_se
)
)
endCluster()
原始答案,2018年5月31日
您可以通过在插入符号包的训练函数中训练模型来从栅格堆栈上的Rranger模型运行预测:
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中设置一个randomForest,以便根据其他光栅图像对光栅图像进行分类。我的训练数据是一个完全填充的光栅图像,我想训练许多其他光栅,以尝试基于初始光栅创建光栅输出。代码示例如下: <代码>rf1 ...其中,是我的光栅格式的实际已知值,而到是我想用来预测trainingRaster1是什么的其他光栅图像。我知道您将使用向量或点的训练类来训练一系列光栅,但在我的情况下,我希望使用光
我正在使用randomForest包对不同预测值的光栅堆栈进行分类。分类工作正常,但我还想检索类概率。对于我的代码,我只得到一个具有第一个类概率的RasterLayer,但我希望得到一个具有一个层中每个类的类概率的RasterStack。
随机森林是集成学习中可以和梯度提升树GBDT分庭抗礼的算法,尤其是它可以很方便的并行训练,在如今大数据大样本的的时代很有诱惑力。 1. bagging的原理 在集成学习原理小结中,我们给Bagging画了下面一张原理图。 从上图可以看出,Bagging的弱学习器之间的确没有boosting那样的联系。它的特点在“随机采样”。那么什么是随机采样? 随机采样(bootsrap)就是从我们的训练集里面采
在随机森林方法中,创建了大量决策树。 每个观察都被送入每个决策树。 每次观察的最常见结果用作最终输出。 一个新的观察结果被输入所有树木,并对每个分类模型进行多数投票。 对构建树时未使用的情况进行错误估计。 这称为OOB (Out-of-bag)错误估计,以百分比形式提及。 R包"randomForest"用于创建随机森林。 安装R包 在R控制台中使用以下命令安装程序包。 您还必须安装依赖包(如果有
主要内容:安装R包 - randomForest,语法,示例在随机森林方法中,创建了大量的决策树。每个观察结果都被送入每个决策树。 每个观察结果最常用作最终输出。对所有决策树进行新的观察,并对每个分类模型进行多数投票。 对于在构建树时未使用的情况进行错误估计。 这被称为OOB(Out-of-bag)错误估计,以百分比表示。 R中的软件包用于创建随机林。 安装R包 - randomForest 在R控制台中使用以下命令安装软件包,还必须安装其它依赖软件包(如
1 Bagging Bagging采用自助采样法(bootstrap sampling)采样数据。给定包含m个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时,样本仍可能被选中, 这样,经过m次随机采样操作,我们得到包含m个样本的采样集。 按照此方式,我们可以采样出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基本学习器,再将这些基本学习