社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

R语言机器学习土地覆被分类实例

GEE遥感训练营 • 10 月前 • 253 次点击  
在R中处理空间数据需要大量的数据处理,例如从不同的文件格式阅读,在空间格式之间转换,从点图层创建表格,以及预测空间栅格图像。mlr3spatial的目标是简化mlr3生态系统中的这些工作流程。作为一个实际的例子,我们将执行一个德国城市莱比锡土地覆盖分类。图1展示了这类任务的典型工作流程:加载训练数据,创建空间任务,用它训练模型,并预测最终的栅格图像。
图1.mlr3spatial的空间预测工作流

在这里我们假设你已经熟悉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
样本点

我们使用ggplot2tidyterra这两个包,绘制这两个图层,以了解数据的总体情况。训练点位于林登瑙区和西中心区。

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。空间任务会额外存储训练点的坐标。在使用空间重采样估计模型性能时,坐标非常有用。

将sf对象转换为机器学习备用的空间任务

现在,我们可以用任务来训练一个模型。我们使用 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软件包仍在开发中,我们期待您的反馈和贡献。

参考文献

  1. https://mlr-org.com/gallery/technical/2023-02-27-land-cover-classification/


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/168175
 
253 次点击