R中的多栅格随机森林
Posted
技术标签:
【中文标题】R中的多栅格随机森林【英文标题】:Multi Raster Random Forest in R 【发布时间】:2021-03-27 09:33:00 【问题描述】:我正在尝试在 R 中设置一个 randomForest,以根据其他光栅图像对光栅图像进行分类。我的训练数据是一个完全填充的栅格图像,我想训练一些其他栅格来尝试基于初始栅格创建栅格输出。代码示例如下:
rf1 <- randomForest(trainingRaster1 ~ raster1 + raster2 + raster3)
...其中trainingRaster1
是我实际已知的光栅格式值,raster1
到rasterN
是我想用来预测trainingRaster1
是什么的其他光栅图像。我了解您将使用向量或点的训练类来训练一系列栅格,但在我的情况下,我想使用栅格作为训练类来生成输出栅格(因为我有一个完全填充的栅格图像,其中训练其他栅格)。我的问题是:这可能吗?我可以使用栅格来训练我的其他栅格数据集吗?我可以使用多个栅格数据集作为输入变量吗?公式会是什么样子?我是否需要将所有数据网格化到相同的范围和分辨率?我真的很想在 R 中使用 randomForest,但是有不同的方法吗?示例代码会是什么样子?最后,我将如何使用该模型,一旦运行,在不输入训练数据集的情况下创建栅格?非常感谢您提前。我已经阅读并观看了 randomForest 的示例,但没有看到它以我想要的方式使用。我想知道它是否需要与正常用例有所偏差。
【问题讨论】:
【参考方案1】:栅格单元只是数据点。因此,如果(或一次)它们对齐(相同的范围和分辨率),您可以这样做
示例数据
library(raster)
# predictors
logo <- stack(system.file("external/rlogo.grd", package="raster"))
# generate "known values"
set.seed(1)
obs <- sqrt(sum(logo)) + sample(ncell(logo))/500
names(obs) <- "obs"
拟合模型
s <- stack(obs, logo)
d <- as.data.frame(s)
library(randomForest)
m <- randomForest(obs~., d, ntree=50)
预测
p <- predict(s, m)
names(p) <- "pred"
plot(stack(obs, p))
注意图像是如何改进的。
在predict
步骤中,您可以将s
替换为另一组具有相同名称的预测变量数据。所以你可以根据一年的数据来拟合你的模型,你有预测变量(例如卫星或气候数据)和观察结果(例如作物产量),但是你可以预测另一年,你有预测变量,但不是感兴趣的观察结果。
您可能无法执行此操作,因为栅格数据对于 RAM 来说太大了。在这种情况下,您可以取样,或在子集上创建多个模型。
【讨论】:
感谢罗伯特的回复。我有两个问题:训练随机森林后是否可以使用空白数据框作为obs
变量?我的意思是,假设我有一个完整的训练数据集用作obs
一年,以及一系列我想用作预测数据的其他数据集。下一年的训练数据不可用。如果我只有一个空白的obs
数据框并完成'd
数据集,或者在这种情况下是logo
,我可以使用随机森林来填充数据框吗?另外,如果我确实有多年数据,我可以重复这一点并增加 RF 的稳健性吗?
我已经是您问题的第一部分,但我已经将答案扩展为-希望-更清楚。如果你有多年,你可以重复这个并做出多个预测和平均。但我会根据所有数据制作一个模型。原则上(例如,没有 RAM 限制)您可以rbind
data.frame 的d
。以上是关于R中的多栅格随机森林的主要内容,如果未能解决你的问题,请参考以下文章