GEE必须会教程—随机森林分类及精度评估

地物分类是遥感的基础之一,同时也是重点之一;接下来小编将给大家介绍如何使用GEE基于随机森林算法进行地物分类以及对分类结果进行精度评估;

一.导入所需影像、行政边界以及样本点(数量不能超过5000个)(以Sentinel2A为例)


var roi=ee.FeatureCollection('projects/ee-zs2003/assets/JX_border');
var sample=ee.FeatureCollection('projects/ee-zs2003/assets/jiangxi_sample');
var s2c=ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
          .filterDate("2023-1-1","2023-12-31")  //选取时间
          .filterBounds(roi)
          .select("B2","B3","B4","B8","B11")  //选择波段
          .filter(ee.Filter.lte("CLOUDY_PIXEL_PERCENTAGE",5))  //筛选出云量小于5%的影像
          .median()  //对影像集合进行中值合成
          .clip(roi);  //裁剪至研究区范围

对影像添加特征波段以辅助分类


//对分类图像添加特征波段
var MNDWI=s2c.normalizedDifference(['B3','B11']).rename('MNDWI');
var NDBI=s2c.normalizedDifference(['B11','B8']).rename('NDBI');
var NDVI=s2c.normalizedDifference(['B8','B4']).rename('NDVI');
var rawimage=s2c.addBands(MNDWI).addBands(NDBI).addBands(NDVI);

选取要进行分类的特征波段以及样本点属性字段对应的字段名


var bands = ["B2","B3","B4","NDVI","MNDWI","NDBI"];
var classProperty = 'type';

对样本点进行采样操作,即获取每个样本点对应的像元中每个特征波段的信息


var inforsample = rawimage.select(bands).sampleRegions({
  collection: sample,
  properties: [classProperty],
  scale: 10
});

将样本点随机取70%作为训练集,剩下30%作为验证集


var withRandom = inforsample.randomColumn('random');
var split = 0.7;
var trainingPartition = withRandom.filter(ee.Filter.lt('random', split));
var validationPartition = withRandom.filter(ee.Filter.gte('random', split));

对训练集进行随机森林分类模型训练


// 构建随机森林分类模型
var classifier = ee.Classifier.smileRandomForest(100).train({
  features: trainingPartition,
  classProperty: classProperty,
  inputProperties:bands
});

将影像利用训练好的模型进行分类,得到分类图像并显示出来


var classified = rawimage.classify(classifier);
Map.addLayer(classified, {min: 1, max: 6, palette: ['yellow','green','00ffff','orange','red','blue']},"随机森林分类");
//一共有6类,对应的分别是:耕地、林地、草地、裸地、建成区、水体

对分类结果进行精度评估:这里主要有两种方法:

1、利用验证样本集对第六步训练集训练好的模型进行评估,这也是GEE官方示例给出的精度评估方式,同时也是对机器学习模型进行精度评估的常用方法


var test = validationPartition.classify(classifier);
var confusionMatrix = test.errorMatrix(classProperty, 'classification');
print("混淆矩阵", confusionMatrix);
print("Kappa系数", confusionMatrix.kappa());
print("总体精度", confusionMatrix1.accuracy());

2. 直接利用验证样本集对分类好的图像进行验证,这是做遥感影像地物分类最常用的方法,就应用场景而言比第一种方法要更合理一些


var test = classified.sampleRegions({
    collection:validationPartition,
    properties: [classProperty],
    scale: 10
  });
var confusionMatrix = test.errorMatrix(classProperty, 'classification');
print("混淆矩阵", confusionMatrix);
print("Kappa系数", confusionMatrix.kappa());
print("总体精度", confusionMatrix1.accuracy());

 

两种不同精度评估方式得到的结果也会有所不同,但是差异并不大;

对于精度问题,可以加入水体掩膜、灯光数据、POI密度、路网密度等辅助数据以提高分类精度,如有需要,欢迎私信留言!

完整代码链接如下:

https://code.earthengine.google.com/4e0e71f23c8cae8cb8a0ac65484cbdf5?asset=projects%2Fee-lihuanfen9585%2Fassets%2Fnc1

  • 17
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
GEE(Google Earth Engine)是一个强大的云平台,用于对地球观测数据进行分析和可视化。在 GEE 中使用随机森林进行分类是一种常见且有效的方法。 要在 GEE 中进行随机森林分类,需要遵循以下步骤: 1. 数据准备:首先需要准备用于分类的训练数据。这些数据应包含有标签的样本,每个样本都有一组特征和对应的分类标签。 2. 特征提取:使用 GEE 提供的图像处理函数从遥感影像中提取特征。例如,可以计算植被指数(如 NDVI)或纹理指标(如GLCM)等。 3. 数据准备与转换:将特征数据组合成一个特征向量,并将其转换为 GEE 支持的数据格式,如图像集或特征集。 4. 模型训练:使用已准备好的特征数据对随机森林模型进行训练。在 GEE 中,可以使用 ee.Classifier.randomForest() 函数创建一个随机森林分类器,并使用训练数据进行拟合。 5. 模型应用:使用训练好的模型对新影像或未知区域进行分类预测。可以使用 ee.Image.classify() 函数将模型应用于图像数据,并生成分类结果图像。 需要注意的是,GEE 中的随机森林分类方法并不是与传统的 Python sklearn 库中的随机森林完全一致。在 GEE 中,随机森林模型的训练和预测都是在云端进行的,并且具有一定的数据限制和算法实现差异。因此,在使用 GEE 进行随机森林分类时,需要参考 GEE 的相关文档和示例代码进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值