Google Earth Engine 机器学习入门:基础知识与实用示例详解

Google Earth Engine(简称 GEE)是一个强大的云端地理空间数据处理平台,支持大规模卫星影像和地理数据的分析。它内置了机器学习(ML)功能,方便用户进行土地分类、回归预测等任务。下面用最简单的语言介绍 GEE 中机器学习的基础知识,并配合代码示例,帮助中国用户快速理解和上手。

1. 机器学习基础概念

  • 机器学习:通过数据训练模型,让计算机自动识别规律,完成分类或预测任务。
  • 训练:用带标签的数据教模型认识不同类别或数值。
  • 预测:用训练好的模型对新数据进行分类或数值估计。

2. GEE 支持的机器学习类型

2.1 监督式分类(Supervised Classification)

  • 需要准备带有"正确答案"的训练样本(如土地类型标签)。
  • 模型学习如何根据卫星影像的像素特征区分不同类别。
  • 常用于土地利用/土地覆盖(LULC)分类。

2.2 非监督式分类(Unsupervised Classification)

  • 不需要标签,算法自动根据数据特征将像素分成若干组(聚类)。
  • 适合没有地面真值数据或想快速探索数据结构时使用。

2.3 回归(Regression)

  • 预测连续数值而非类别,比如预测森林覆盖率、作物产量、水质指标等。

3. GEE 机器学习的限制

  • 训练数据大小限制:一般训练数据不超过 100MB,约等于 100 万个样本点乘以波段数的乘积满足 n×b≤100×2204n \times b \leq \frac{100 \times 2^{20}}{4}n×b≤4100×220。
  • 模型大小限制:训练好的模型文件不能超过 100MB。
  • 推理限制:单次推理图像波段数不能超过 400。
  • 不支持深度学习:GEE 机器学习 API 不支持神经网络和深度学习模型,需在外部用 TensorFlow、PyTorch 等训练后导入。

4. GEE 机器学习工作流程示例

下面以监督式分类为例,演示如何用 GEE 进行土地覆盖分类。

4.1 准备训练样本

使用 Code Editor 的绘图工具,手动标注不同土地类型的点,赋予类别标签:

javascript 复制代码
// 假设已有四类:0-城市,1-裸地,2-水体,3-植被
var urbanPoints = /* 用户绘制的城市点 */;
var barePoints = /* 裸地点 */;
var waterPoints = /* 水体点 */;
var vegPoints = /* 植被点 */;

// 合并所有训练点
var trainingPoints = urbanPoints.merge(barePoints).merge(waterPoints).merge(vegPoints);

4.2 采样影像数据作为训练特征

javascript 复制代码
var image = ee.Image('COPERNICUS/S2_SR/20200101T000239_20200101T000239_T48MYQ'); // 示例 Sentinel-2 影像

// 从影像中采样训练点的像素值,属性名为 'landcover'
var trainingData = image.sampleRegions({
  collection: trainingPoints,
  properties: ['landcover'],
  scale: 10
});

4.3 训练分类器

javascript 复制代码
// 使用随机森林分类器,树的数量为 50
var classifier = ee.Classifier.smileRandomForest(50).train({
  features: trainingData,
  classProperty: 'landcover',
  inputProperties: image.bandNames()
});

4.4 应用分类器进行预测

php 复制代码
javascript
var classified = image.classify(classifier);

// 可视化分类结果
Map.addLayer(classified, {min: 0, max: 3, palette: ['red', 'yellow', 'blue', 'green']}, 'Land Cover Classification');

5. 回归模型示例:估计地上生物量(AGB)

回归模型用于预测连续变量,比如森林的生物量。

javascript 复制代码
// 假设已有地面样本数据 agbdSamples,包含生物量值 'AGB'
// 采样影像特征
var trainingData = image.sampleRegions({
  collection: agbdSamples,
  properties: ['AGB'],
  scale: 30
});

// 训练随机森林回归模型
var regressor = ee.Classifier.smileRandomForest(100).setOutputMode('REGRESSION').train({
  features: trainingData,
  classProperty: 'AGB',
  inputProperties: image.bandNames()
});

// 预测生物量
var agbPrediction = image.classify(regressor);

Map.addLayer(agbPrediction, {min: 0, max: 300, palette: ['white', 'green']}, 'AGB Prediction');

6. 导出训练数据与模型

  • 训练数据可导出为 CSV、TFRecord 等格式,用于外部训练。
  • 训练好的模型可导入 Vertex AI 进行托管和推理。
  • GEE 支持将结果导出到 Google Drive、Cloud Storage 或 Earth Engine 资产。

示例导出训练数据:

javascript 复制代码
Export.table.toDrive({
  collection: trainingData,
  description: 'TrainingDataExport',
  fileFormat: 'CSV'
});

7. 代码优化建议

  • 先过滤再处理 :先用 .filterDate().filterBounds().select() 减少数据量,提升效率。
  • 合理设置分辨率:避免使用过小的 scale,减少计算量。
  • 分批训练:当训练数据过大时,分批采样训练,避免内存溢出。

8. 总结

机器学习类型 适用场景 说明
监督式分类 土地覆盖分类、变化检测 需要带标签的训练样本
非监督式分类 数据探索、无标签数据 自动聚类,无需标签
回归 连续变量预测 预测数值,如生物量、产量等

GEE 机器学习功能强大,适合快速构建和应用传统机器学习模型。对于深度学习和大规模训练,建议结合 TensorFlow、Vertex AI 等外部工具。

通过以上基础介绍和示例代码,您可以快速理解并开始使用 Google Earth Engine 进行机器学习分析,助力地理空间数据的智能处理与应用。

相关推荐
可问春风_ren13 小时前
Vue3 入门详解:从基础到实战
开发语言·前端·javascript·vue.js·前端框架·ecmascript·edge浏览器
摘星编程13 小时前
用React Native开发OpenHarmony应用:NativeStack原生导航
javascript·react native·react.js
一起养小猫13 小时前
Flutter for OpenHarmony 实战:从零开发一款五子棋游戏
android·前端·javascript·flutter·游戏·harmonyos
晚霞的不甘13 小时前
Flutter for OpenHarmony全面升级「今日运势」 应用的视觉与交互革新
前端·学习·flutter·前端框架·交互
学嵌入式的小杨同学13 小时前
【Linux 封神之路】文件操作 + 时间编程实战:从缓冲区到时间格式化全解析
linux·c语言·开发语言·前端·数据库·算法·ux
RFCEO13 小时前
学习前端编程:精准选中 HTML 元素的技巧与方法
前端·学习·css类选择器·兄弟元素选中·父子选中·关系选中·选择器选中
想睡好13 小时前
ref和reactive
前端·javascript·vue.js
霁月的小屋13 小时前
React 闭包陷阱深度解析
前端·javascript·react.js
tao35566713 小时前
【用AI学前端】HTML-01-HTML 基础框架
前端·html
晚霞的不甘13 小时前
Flutter for OpenHarmony智能穿搭推荐:构建一个实用又美观的个性化衣橱助手
前端·经验分享·flutter·ui·前端框架