在R中处理空间数据需要大量的数据处理,例如从不同的文件格式阅读,在空间格式之间转换,从点图层创建表格,以及预测空间栅格图像。mlr3spatial
的目标是简化mlr3
生态系统中的这些工作流程。作为一个实际的例子,我们将执行一个德国城市莱比锡土地覆盖分类。图1展示了这类任务的典型工作流程:加载训练数据,创建空间任务,用它训练模型,并预测最终的栅格图像。在这里我们假设你已经熟悉mlr3生态系统,并且有遥感的基础知识,如果没有的话建议先学习mlr3,并学习空间分析基础知识。
土地覆被分类
土地覆被是覆盖地球表面的物质或植被,包括自然和人为特征。了解土地覆盖模式和随时间的变化对于应对气候变化、土地退化和生物多样性丧失等全球环境挑战至关重要。土地覆盖分类是将土地覆盖类别分配给栅格图像中的像素的过程。使用mlr3spatial,我们可以轻松地在mlr3生态系统中进行土地覆盖分类。
所需R包
在开始土地覆被分类之前,需要先加载所需的R包:
mlr3spatial
包,基于terra
包,可以处理栅格数据,以及sf
包处理的矢量数据
library(mlr3verse)
library(mlr3spatial)
library(terra, exclude = "resample")
library(sf)
数据输入
本实例使用的栅格数据是德国莱比锡地区的Sentinel-2影像,分辨率10m,数据存在mlr3spatial
包中作为实例数据存在。使用terra::rast()
读取本栅格数据。
leipzig_raster = rast(system.file("extdata", "leipzig_raster.tif", package = "mlr3spatial"))
leipzig_raster
plot(leipzig_raster)
训练数据是存储在GeoPackage中的样本点数据,在这里使用sf
包读取并创建一个样点图层。
leipzig_vector = read_sf(system.file("extdata", "leipzig_points.gpkg", package = "mlr3spatial"), stringsAsFactors = TRUE)
leipzig_vector
我们使用ggplot2
和tidyterra
这两个包,绘制这两个图层,以了解数据的总体情况。训练点位于林登瑙区和西中心区。
library(ggplot2)
library(tidyterra, exclude = "filter")
ggplot() +
geom_spatraster_rgb(data = leipzig_raster, r = 3, g = 2, b = 1, max_col_value = 5451) +
geom_spatvector(data = leipzig_vector, aes(color = land_cover)) +
scale_color_viridis_d(name = "Land cover", labels = c("Forest", "Pastures", "Urban", "Water")) +
theme_minimal()
土地覆被样本训练与预测
as_task_classif_st()
函数直接从点图层创建空间任务。这样就不需要将点图层转换为带有坐标的 data.frame。空间任务会额外存储训练点的坐标。在使用空间重采样估计模型性能时,坐标非常有用。
现在,我们可以用任务来训练一个模型。我们使用 rpart
软件包中的一个简单决策树学习器。classif_st
任务是 classif
任务的特化,因此可与所有classif
学习器一起使用。
为了获得莱比锡完整的土地覆被分类,我们必须对每个像素进行预测,并返回包含这些预测结果的栅格图像。学习器的$predict()
方法只适用于表格数据。要预测栅格图像,我们需要使用predict_spatial()
函数。
# 土地覆被图的预测
land_cover = predict_spatial(leipzig_raster, learner)
#预览土地覆被图
ggplot() +
geom_spatraster(data = land_cover) +
scale_fill_viridis_d(name = "Land cover", labels = c("Forest", "Pastures", "Urban", "Water")) +
theme_minimal()
结论
有了mlr3spatial
软件包,用 R 处理空间数据就变得非常简单。您可以使用点图层快速训练模型,并预测光栅图像。mlr3spatial
软件包仍在开发中,我们期待您的反馈和贡献。
参考文献
- https://mlr-org.com/gallery/technical/2023-02-27-land-cover-classification/