geemap学习笔记019:监督分类与精度验证(上)

news2025/1/12 12:12:30

前言

上一节中介绍了非监督分类,今天就详细介绍一下监督分类与精度验证。从这一节开始,我也是配置了本地的geemap,就可以不用colab了,配置也是花了挺长时间,但好在也是能够成功应用了,准备用两节的时间介绍监督分类与精度验证。GEE中的监督分类方法主要是包括以下几种,包括决策树、随机森林(RF)、贝叶斯、支持向量机(SVM)等。监督分类主要是包括以下几个步骤:(1)收集数据,包括待分类的影像数据以及标签数据;(2)划分训练集和测试集;(3)利用训练数据训练一个分类器;(3)对原有的数据进行分类;(4)精度验证。

image.png

1 导入库并显示地图

import ee
import geemap 

ee.Initialize() #这一行代码实在本地代码中要添加的
Map = geemap.Map()
Map

2 添加数据

point = ee.Geometry.Point([-87.7719, 41.8799]) #初始化点坐标

image = (
    ee.ImageCollection('LANDSAT/LC08/C01/T1_SR') #Landsat 8数据
    .filterBounds(point) #过滤经过该点的影像
    .filterDate('2016-01-01', '2016-12-31') #与非监督不同的是,这里取了206年的数据,是为了与NLCD2016相对应
    .sort('CLOUD_COVER') #按照云量进行排序
    # .limit(10) #可以限制取前多少个
    .first() #选择第一景影像
    .select('B[1-7]') #选择1-7个波段
)

vis_params = {'min': 0, 'max': 3000, 'bands': ['B5', 'B4', 'B3']}

Map.centerObject(point, 8)
Map.addLayer(image, vis_params, "Landsat-8")

nlcd_raw = ee.Image('USGS/NLCD/NLCD2016').select('landcover').clip(image.geometry()) #加载NLCD数据,并根据影像范围进行裁剪
Map.addLayer(nlcd_raw, {}, 'NLCD')
Map

加载数据结果
image.png

3 查看图像的属性

ee.Date(image.get('system:time_start')).format('YYYY-MM-dd').getInfo() #时间属性
image.get('CLOUD_COVER').getInfo() #云量属性

4 制作数据集

以NLCD数据创建标签
image.png

4.1 准备连续的类别标签

在分类中,标签需要设定从0开始,使用 remap() 函数将类标签转换为连续的整数。

raw_class_values = nlcd_raw.get('landcover_class_values').getInfo() #获取原始数据的标签值
print(raw_class_values)

n_classes = len(raw_class_values)
new_class_values = list(range(0, n_classes)) #定义从0开始的标签
new_class_values

class_palette = nlcd_raw.get('landcover_class_palette').getInfo() #获取原始数据的颜色表
print(class_palette)

nlcd = nlcd_raw.remap(raw_class_values, new_class_values).select(
    ['remapped'], ['landcover']
) #将原始数据标签值改为新值
nlcd = nlcd.set('landcover_class_values', new_class_values)
nlcd = nlcd.set('landcover_class_palette', class_palette)

4.2 生成样本点数据集

#有多种方法可以创建用于生成训练数据集的区域
# region = Map.user_roi #可以在地图绘制ROI
# region = ee.Geometry.Rectangle([-122.6003, 37.4831, -121.8036, 37.8288]) #可以自定义矩形范围
# region = ee.Geometry.Point([-122.4439, 37.7538]).buffer(10000) #也可以创建缓冲区

# 生成样本点数据集
points = nlcd.sample(
    **{
        'region': image.geometry(),
        'scale': 30,
        'numPixels': 5000,
        'seed': 0,
        'geometries': True,  # Set this to False to ignore geometries
    }
)

Map.addLayer(points, {}, 'training', False)
Map

print(points.size().getInfo()) #打印样本点的属性
print(points.first().getInfo())

4.3 制作训练和测试数据集

# 利用这些波段用于训练和预测
bands = ['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7']


# 这个属性储存标签.
label = 'landcover'

# 将点叠加在图像上以获得训练
sample = image.select(bands).sampleRegions(
    **{'collection': points, 'properties': [label], 'scale': 30}
)

# 添加一列伪随机数
sample = sample.randomColumn()

split = 0.7 #划分比例

training = sample.filter(ee.Filter.lt('random', split)) #小于0.7划分为训练数据
validation = sample.filter(ee.Filter.gte('random', split)) #大于等于0.7划分为训练数据

print(training.first().getInfo()) #打印第一个点的信息

5 训练分类器

# 使用默认参数训练 CART 分类器
classifier = ee.Classifier.smileCart().train(training, label, bands)

后记

大家如果有问题需要交流或者有项目需要合作,可以加Q Q :504156006详聊,加好友请留言“CSDN”,谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1281866.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【备忘干货】c/c++ (wasm)和js互相调用记录

c/c(wasm)和js互相调用记录 废话 :)准备工作:安装Emscripten初探:C(wasm)之hello world进一步探究:接口调用1.js调用c,一些基本类型的传递(char*,int,float)以…

博客访问量到达2万了!

博客访问量到达2万了!这也发生的太快了吧,前两天才1万7千访问量,用了平台送的1500的流量券,粉丝从1个(N年前的),蹭蹭的往上涨,这也太“假”了吧。关键我也是个菜鸟自学者&#xff0c…

前端组件库开发

通常我们会使用很多组件库,有时候我们会去看源码比如element,antd,然后发现多少是按需导出,和vue.use全局注册,依赖于框架的拓展。 组件库的开发依赖框架的版本和node的版本,这个是需要说明的,然…

Redis--15--缓存穿透 击穿 雪崩

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 缓存穿透 击穿 雪崩运行速度:1 缓存穿透问题描述:如何解决: 2 缓存击穿问题描述:如何解决: 3 缓存雪崩说明:解决方案: 缓存穿透 击穿 雪崩 问题描述: 由于海量的用…

BurpSuite 请求/响应解密插件开发

BurpSuite 请求/响应解密插件开发 本文主要记录如何利用burp官方的新版API即MontoyaApi 写一个请求/响应的解密插件。背景下面是主要的操作步骤:根据上述操作做完之后,生成,然后在burp中加载插件,然后通关抓包看效果,具…

VSCode 中将头文件和头文件函数分离,编译主函数跳出 undefined reference to 的问题解决

VSCode 编写 C (.h,.cpp 文件分离)代码,编写完成后,编译遇到了编译错误 undefined reference to xxx。 开始还以为使用了 -stdc20 而不能使用 #include “xxx.h" 方式头文件,但仔细一想虽然引入了 im…

Java 不要在父类的构造方法里面调用可以被子类重写的方法

不要在父类的构造方法(代码块)里面调用可以被子类重写的方法 我们从第一天学习Java开始,就对Java的类初始化顺序牢记于心。但是在实际开发过程中,似乎很难能接触这一部分的应用。在这之前,我也认为它只是面试中八股文而已,直到最…

版本依赖冲突问题排查过程记录

问题 开发平台在集成minio时&#xff0c;pom引入了sdk。 <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.7</version> </dependency>在调用上传文件API时&#xff0c;控制台报错&…

JDK1.8_X64在LINUX下安装

JDK1.8在LINUX下安装步骤&#xff1a; 在/usr/lib/目录下新建jvm文件夹&#xff0c;如果已有jvm文件夹&#xff0c;则将之前的JDK版本删除&#xff0c;即在jvm目录下执行命令&#xff1a;rm–rf *将JDK文件jdk-8u40-linux-x64.gz拷贝到/home/目录下&#xff1b;在/home/目录下…

探索JavaScript BOM:了解浏览器的内部机制和强大的API

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;JavaScript篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript-BOM的概念和常用API BOM的概念和常用API BOM BOM&#xff08;Browser O…

免费网站快速收录工具,2023最新网站收录方法

在当今数字化时代&#xff0c;拥有一个被搜索引擎快速收录的网站对于个人、企业或机构而言至关重要。网站的快速收录意味着更广泛的曝光和更多的访问流量&#xff0c;这对于网络存在的任何实体都是非常有价值的。 网站快速收录的重要性 在庞大的互联网世界中&#xff0c;一切…

精神衰弱怎么办?如何改变精神衰弱?

精神衰弱也叫神经衰弱&#xff0c;跟个人体质有一定的关系&#xff0c;更多是因为环境因素的长期作用所致&#xff0c;比如长期处于紧张和压力之下&#xff0c;这容易产生精神衰弱。当下有个流行词叫“精神内耗”&#xff0c;这个严重的精神内耗其实同样会导致精神衰弱。 精神…

使用Prometheus监控Padavan路由器

Prometheus监控Padavan路由器 1、背景 近期在Synology&#xff08;群辉&#xff09;中安装一套Prometheus监控程序&#xff0c;目前已经监控Synology&#xff0c;然后家中有有路由器&#xff08;Padavan&#xff09;型号&#xff0c;也准备使用PrometheusGrafan进行监控。 ‍…

计算机网络扫盲(4)——时延

一、概述 在这里&#xff0c;我们考虑分组交换网的情况&#xff0c;因特网可以被看成是一种基础设施&#xff0c;该基础设施为运行在端系统上的分布式应用提供服务。在理想情况下&#xff0c;我们希望因特网服务能够在任意两个端系统之间随心所欲地移动数据而没有任何数据地丢失…

智能优化算法应用:基于海洋捕食者算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于海洋捕食者算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于海洋捕食者算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.海洋捕食者算法4.实验参数设定5.算法结果…

已解决:虚拟机集群xsehll连接不上

问题描述&#xff1a; hadoop102能连上&#xff0c;hadoop103、hadoop104无法连接&#xff0c;以前都能连上&#xff0c;今天突然就连不上了 解决方案&#xff1a; 使用ifconfig命令查看有没有ens33 如果没有的话那就证明你的问题和我一样 依次使用以下命令&#xff1a; sys…

Docker 简介,Docker 安装——3

目录&#xff1a; Docker 简介 什么是虚拟化、容器化&#xff1f;为什么要虚拟化、容器化&#xff1f;虚拟化实现方式 应用程序执行环境分层虚拟化常见类别 虚拟机容器JVM 之类的虚拟机常见虚拟化实现 主机虚拟化(虚拟机)实现容器虚拟化实现 容器虚拟化实现原理容器虚拟化基础…

SSM新闻发布管理系统

SSM毕设分享 序号1&#xff1a;SSM新闻发布管理系统 1 项目简介 Hi&#xff0c;各位同学好&#xff0c;这里是郑师兄&#xff01; 今天向大家分享一个毕业设计项目作品【SSM新闻发布管理系统】 师兄根据实现的难度和等级对项目进行评分(最低0分&#xff0c;满分5分) 难度系数…

人工智能发展史

人工智能&#xff08;AI&#xff09;的发展史是一段跨越数十年的旅程&#xff0c;涵盖了从早期理论探索到现代技术革新的广泛内容。人工智能的发展历程展示了从最初的概念探索到现代技术突破的演变。尽管经历了多次起伏&#xff0c;但AI领域持续进步&#xff0c;不断拓展其应用…

unordered_map与unordered_set的实现(含迭代器)

unordered_map与unordered_set的实现 文章目录 unordered_map与unordered_set的实现前言一、问题一HashTable.h 二、问题二&问题三1.封装时如何取出key2.不同类型key如何建立对应关系 三、问题四&问题五问题四问题五 四、实现代码MyUnorderedSet.hMyUnorderedMap.hHash…