当前位置: 首页 > news >正文

NDVI、噪声和细微差别:使用卫星时间序列进行土地覆盖分类

我一直对数据中的模式很感兴趣——只要你提出正确的问题,混乱和原始的东西就可以变得清晰。所以当我遇到一个结合遥感、时间序列和分类的任务时,我觉得这是挑战自己和成长的完美方式。

这与提交或排行榜无关,而是关于探索现实世界的数据、试验想法,以及看看我能在多大程度上推动我对机器学习的理解。

解码任务:根据 NDVI 时间序列进行土地覆盖

问题:使用卫星获取的 NDVI 数据对土地覆盖类型(如森林、草地、水、果园)进行分类。

NDVI,即归一化差异植被指数,定义为:

在哪里:

  • NIR = 近红外反射
  • RED = 红色反射率

它是一种反映植被健康状况的遥感指标。绿色、多叶区域显示较高的 NDVI;贫瘠或水域则较低。该数据集为每个位置提供了 27 个 NDVI 观测值,跨越两年——实际上,这是植被行为的时间序列。

每一行看起来都像这样:

  • 身份证
  • 27个时间点的NDVI
  • 地面真实标签:{水、不透水、农场、森林、草地、果园} 之一

但没有任何东西是干净的。

数据并不完美——但正因如此,它才成为学习的完美工具

首先:数据缺失。大量的数据。云层遮挡了卫星视野,整个时间戳都变成了空白。

第二:嘈杂的标签,因为它们来自 openstreetmap 多边形——众包的,并不总是精确的。

“森林”类别的 NDVI 值分布

第三:严重的类别不平衡。几乎 75% 的样本被标记为“森林”,而其他样本的实例则少得多。

我很早就意识到,这并不是要向数据抛出一个花哨的模型,而是要设计特征、构建稳健性,以及学习如何像数据科学家一样思考。

预处理:仔细填补空白

我从简单的开始:用中位数插补来处理缺失值。平均值和 KNN 插补方法要么过于平滑,要么增加了偏差。而中位数让我可以保留每个样本中的季节性故事,而不会扭曲信号。

<span style="color:rgba(0, 0, 0, 0.8)"><span style="background-color:#ffffff"><span style="background-color:#f9f9f9"><span style="color:#242424">df = df.fillna(df.median(numeric_only = <span style="color:#aa0d91">True</span>))</span></span></span></span>

对于类别不平衡,我对多数类别(森林)进行了欠采样,然后应用SMOTE对果园或水等少数类别进行上采样。这给了我一个更加平衡和易于学习的数据集,即不会让森林主导学习的数据集。

将时间序列转化为模型可以使用的内容

原始 NDVI 值只是数字。我需要它们来表达模式语言。

因此我设计了每个特征,旨在捕捉植被随时间的变化:

  • 基本属性:ndvi_mean,,,,ndvi_stdndvi_minndvi_maxndvi_range
  • 季节性:夏季与冬季的平均 NDVI 及其差异
  • 趋势检测:线性回归斜率(ndvi_trend
  • 局部变化:滚动平均值和标准差以减少噪音并放大信号
  • 变化指标:一阶差分(ndvi_diff)和绿化率

将序列转化为汇总统计数据有助于反映现实世界的行为。

建模:从简单到强大

我从逻辑回归开始。它易于解释,速度快,并且是一个很好的基准。令人惊讶的是,经过特征工程后,它的表现相当不错,f1 分数为 0.78,准确率为 85%。

接下来我添加了随机森林,这对于嘈杂的数据非常有用并且仍然可以解释。

最后,我运行了XGBoost,使用网格搜索来调整超参数。

快速查看结果

在干净的、保留的测试拆分上:

logistic regression    → macro f1 ≈ 0.78
random forest          → macro f1 ≈ 0.94
xgboost                → macro f1 ≈ 0.96

准确度很高,但由于类别不平衡,宏 f1 分数在这里更重要。令人惊讶的是,由于有效的特征工程,即使是像逻辑回归这样更简单的模型也能保持其地位。

我使用了特征重要性图(来自随机森林和 xgboost)来查看最突出的特征。一致的顶级特征是:

  • ndvi_greening_rate
  • season_diff
  • ndvi_trend
  • rolling_std

这些特征不仅仅是数学上的,而且代表了真实的季节性植被行为。看到这些特征反映在模型的首选中,感觉很有说服力。

这教会了我什么

这不仅仅是建立一个模型。这是一门速成课程:

  • 数据整理和归纳
  • 时间特征工程
  • 理解不平衡学习
  • 选择和调整模型
  • 使用特征重要性和视觉验证来解释结果

我了解到,即使数据混乱,经过深思熟虑的小步骤也能累积起来。如果做得正确,特征工程可以与复杂性竞争。

我接下来想尝试什么

我很好奇想了解更多:

  • 直接在 NDVI 序列上使用1d 卷积或 LSTM
  • 应用信号平滑(如 Savitzky-Golay)
  • 结合空间背景——这个数据点在地理上位于哪里?
  • 甚至可以构建一个小型 Web 应用程序,根据用户上传的 NDVI 数据预测土地覆盖类型
http://www.lryc.cn/news/589742.html

相关文章:

  • 【源力觉醒 创作者计划】百度携文心 4.5 入局,开源大模型市场再添一员猛将,与 Qwen3 对比如何?
  • 列车调度(vector)
  • Spring Boot 缓存 与 Redis
  • XXE漏洞2-漏洞原理及检测方式(超详细)
  • HandlerIntercepter,JWT和杂项知识点
  • LeetCode Hot 100 二叉树的最大深度
  • 【Java】【力扣】94.二叉树的中序遍历
  • C#获取当前系统账户是否为管理员账户
  • LeetCode经典题解:141、判断链表是否有环
  • LeetCode Hot100【4. 寻找两个正序数组的中位数】
  • C++之unordered_xxx基于哈希表(链地址法)的自我实现(难)
  • 逆向入门(39、40)程序逆向篇-DaNiEl-RJ.1、genocide1
  • 【LeetCode 热题 100】543. 二叉树的直径——DFS
  • STM32-RTC内部时钟
  • fastadmin会员单点登录
  • C#语法基础总结(超级全面)
  • flutter app内跳转到其他安卓 app的方法
  • HTML 入门教程:从零开始学习网页开发基础
  • HTML基础P1 | HTML基本元素
  • Android 升级targetSdk无法启动服务
  • APIs案例及知识点串讲(上)
  • FreeRTOS中断管理STM32
  • Java-74 深入浅出 RPC Dubbo Admin可视化管理 安装使用 源码编译、Docker启动
  • 【docker】将本地镜像打包部署到服务器上
  • LVS:高性能负载均衡利器
  • CVE-2005-4900:TLS SHA-1 安全漏洞修复详解
  • WIN10系统优化篇(一)
  • Samba服务器
  • 【RTSP从零实践】12、TCP传输H264格式RTP包(RTP_over_TCP)的RTSP服务器(附带源码)
  • Vue 结合 Zabbix API 获取服务器 CPU、内存、GPU 等数据