社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

RSE | 协同机器学习和插值法的全球卫星土壤水分缺失值填补新框架

气象学家 • 9 月前 • 240 次点击  




土壤水分是衡量地球生态系统健康与否的关键指标,对气候预测、农作物生长、洪旱灾害预警等研究具有重要意义。目前,卫星遥感是获取全球范围土壤水分数据最有效的手段,但受卫星轨道设计和传感器性能限制、地表复杂地形、人为射频干扰等多种因素影响,卫星获取的土壤水分产品常存在大范围数据缺失,严重制约了其在实际科研与应用中的使用效能。因此,如何实现产品中缺失数据的高精度填补,是遥感领域面临的重要挑战。


现有的填补方法主要分为两类,一类是传统的插值方法,一类是热门的机器学习方法。然而,两类方法都存在明显的优缺点:

  • 插值法在数据缺失程度低的局部区域填补效果较好,但当数据连续大范围缺失时,填补的不确定性显著增加(图1)。

  • 机器学习法依赖于全局统计结果,在大范围填补时整体表现较好,但在土壤水分高值和低值区域会产生“平均化”效应,从而弱化土壤水分在这些区域的细节特征(图2)。


两者具有潜在的互补性,因此将两者进行结合,有望提升卫星土壤水分产品的填补精度。然而,以往研究很少真正实现两类方法的有效结合。


图1  插值法模拟填补示意图


图2  机器学习方法模拟填补示意图


中国科学院空天信息创新研究院(空天院)研究员、中国科学院青促会优秀会员曾江源研究团队创新性地使用异质集成的Stacking (堆叠)技术融合多种机器学习和插值方法,建立了一种全球卫星土壤水分缺失值的填补新框架。该框架结合了机器学习在大尺度填补和插值法在局部区域填补的优势,有效改善了全球卫星土壤水分产品中普遍存在的大范围数据缺失状况,显著提升了数据的完整性和可用性,并为其他卫星产品的缺失值填补提供了新的思路。


该方法主要分为三部分(图3):

  • 数据预处理

  • 传统方法填补(机器学习和插值法)

  • Stacking方法填补


其中参与填补的辅助数据均是与土壤水分紧密相关的变量,验证手段主要包括两个方面:原始产品有值区域与填补(这里称为“重建”)数据的对比,来自全球不同区域的1086个站点的实测数据对原始产品与填补后产品的精度对比。


图3  研究方法整体流程示意图


机器学习和插值法单独填补效果


机器学习


机器学习因其强大的数据拟合能力被广泛应用于缺失值填补研究,其根据不同的方法(随机森林、支持向量机等)构建目标数据(土壤水分)与特征数据之间的关系,进而通过建立的模型填补缺失数据。


研究团队采用了六种常用的机器学习方法,包括广义线性模型、决策树、随机森林、梯度提升决策树、前馈神经网络和支持向量机。针对ESA CCI卫星土壤水分产品,使用2018年数据构建填补模型,填补2019年数据,并使用2019年原始未缺失数据进行精度验证(表1)。根据精度结果选择表现最优的随机森林、梯度提升决策树和前馈神经网络作为Stacking中涉及机器学习的三个基模型。


表1  机器学习法填补的ESA CCI土壤水分相对于原始ESA CCI土壤水分的误差指标统计结果


插值法


插值法不依赖辅助数据,仅通过未缺失数据来估算缺失值。其根据不同的插值原理(线性插值、多项式插值等),构建已知数据(土壤水分)与空间或时间位置之间的关系,进而通过建立的函数关系估算缺失值。


研究团队采用了四种常用的插值方法包括线性插值、自然邻点插值、最邻近插值和三次插值,填补2019年ESA CCI土壤水分产品。由于插值法不会重建未缺失的数据(不能采用和机器学习同样的精度验证方式),所以全球均匀挖空144×288个格网作为验证格网,使用验证格网中的原始土壤水分进行精度验证。根据精度结果选择表现最优的自然邻点插值作为Stacking中涉及插值法的基模型。


表2 验证格网中插值法填补的ESA CCI土壤水分相对于原始ESA CCI土壤水分的误差指标统计结果


协同机器学习和插值法的Stacking填补


通过机器学习和插值法单独填补的结果表现以及对Stacking最优填补框架的实验对比,研究团队确定了以LASSO(最小绝对收缩和选择算子)为元模型,以随机森林、梯度提升决策树、前馈神经网络和自然邻点插值为基模型的Stacking填补框架。


Stacking填补时首先通过各个基模型(包含机器学习和插值法)生成不同的初级填补结果,然后元模型根据这些初级填补结果进行融合生成最终的填补结果。


构建好Stacking框架后,研究团队同样使用2018年数据建立模型,对2019年的ESA CCI土壤水分产品进行了填补。图4展示了2019年1月1日和6月1日不同方法填补前后的全球土壤水分分布图。区域①显示当原始数据连续大量缺失时,插值法填补结果出现明显误差,甚至无法填补。区域②和区域③显示在土壤水分低值和高值地区,机器学习填补结果会趋于“平均化”,从而弱化土壤水分的细节特征。Stacking填补结合了两者的优势,既融合了机器学习在大尺度填补的表现,又通过插值法改善了局部区域的细节特征。


协同了机器学习和插值法的Stacking填补方法在全球整体精度指标(以2019年全球原始未缺失ESA CCI数据为参考)上也得到了大幅提升,其ubRMSE为0.017 m3/m3,RMSE为0.022 m3/m3,Bias为0.006 m3/m3,R为0.87。相对表现最好的单一填补方法随机森林,其RMSE降低了0.009 m3/m3,ubRMSE降低了0.006 m3/m3,相关系数提高了0.15。精度差异全球分布图(图5)显示,所有的误差指标中,Stacking的填补结果在全球绝大部分区域均优于随机森林。   


图4  2019年1月1日和6月1日不同方法填补前后全球ESA CCI土壤水分分布图(单位m3/m3


图5  Stacking相对随机森林填补的精度差异全球分布图:(a) ubRMSE (RF-Stacking, m3/m3), (b) RMSE (RF-Stacking, m3/m3), (c) Bias (|RF|-Stacking|, m3/m3 ), and (d) R (Stacking-RF)


不同填补方法的全球实测数据验证


研究团队使用来自全球覆盖不同地表的1086个站点的实测土壤水分数据对原始ESA CCI产品、再分析ERA5产品、以及不同方法填补后的ESA CCI产品进行精度对比。


结果显示协同机器学习和插值法的Stacking填补产品具有最低的ubRMSE和最高的R,相对原始ESA CCI产品能够提升相关性的同时保持其他误差指标的稳定性。从选取的9个典型观测网时序图(图6)可以看出,协同机器学习和插值法的Stacking填补结果能很好地捕捉实测土壤水分的变化趋势且显著提升了有效数据量。


表3 不同土壤水分产品相对实测土壤水分的误差指标统计结果


图6  九个典型观测网的土壤水分时序图,其中蓝色折线为实测土壤水分,蓝色圆形为原始ESA CCI土壤水分,红色三角形为Stacking填补后的ESA CCI土壤水分


研究团队使用Stacking创新性地融合了机器学习和插值法在不同情景下的填补优势,提出的新框架能显著提升卫星产品缺失值的填补精度。该框架不仅可应用于卫星土壤水分产品的填补,同样可以应用到其他卫星产品(如地表温度、植被参数、大气参数等),为地球系统科学研究、农业生产与粮食安全、生态保护与可持续发展、自然灾害监测预警等应用提供更可靠的数据支撑,实质性的提升这些产品在不同领域的实用性。


研究成果以“Synergizing Machine Learning and Interpolation Methods: A Stacking Framework for Global-Scale Satellite Soil Moisture Gap Filling”为题,近期已发表于遥感领域国际学术期刊《Remote Sensing of Environment》(中国科学院一区Top)。空天院硕士生荣家明为第一作者,曾江源为通讯作者。研究工作得到国家自然科学优秀青年科学基金、中国科学院青年创新促进会优秀会员、空天院自主部署等项目资助。


论文链接:
https://www.sciencedirect.com/science/article/pii/S0034425725004444
语引导语引导语导语引导语引导语




以上内容由遥感与数字地球全国重点实验室曾江源提供。



END


声明:欢迎转载、转发。气象学家公众号转载信息旨在传播交流,其内容由作者负责,不代表本号观点。文中部分图片来源于网络,如涉及内容、版权和其他问题,请联系小编(微信:qxxjgzh)处理。




气象学家
微信公众号|小红书|微信视频号

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/187842