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

发布于:2025-07-17 ⋅ 阅读:(16) ⋅ 点赞:(0)

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

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

解码任务:根据 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 数据预测土地覆盖类型

网站公告

今日签到

点亮在社区的每一天
去签到