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

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-12 15:08:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-12 15:08:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-12 15:08:02       82 阅读
  4. Python语言-面向对象

    2024-05-12 15:08:02       91 阅读

热门阅读

  1. GIT仓库分支迁移新仓库步骤

    2024-05-12 15:08:02       27 阅读
  2. Rust学习笔记(下)

    2024-05-12 15:08:02       28 阅读
  3. 云存储有哪些类型?

    2024-05-12 15:08:02       28 阅读
  4. Servlet的几种用法?

    2024-05-12 15:08:02       26 阅读
  5. C++原型模式

    2024-05-12 15:08:02       35 阅读
  6. 简述redis事务

    2024-05-12 15:08:02       31 阅读
  7. 华为校招机试 - 模拟汇编计算(20240508)

    2024-05-12 15:08:02       32 阅读