机器学习周报-文献阅读

发布于:2025-03-04 ⋅ 阅读:(14) ⋅ 点赞:(0)

摘要

本周阅读了题目为Deep learning model based on coupled SWAT and interpretable methods for water quality prediction under the influence of non-point source pollution文章,文章构建了耦合机理模型和可解释的深度学习模型的水质预测模型SWAT-XGBoost-LSTM,在目前非常成熟的LSTM模型基础上,引入机理模型SWAT模拟非点源污染对河流的影响,通过可解释性方法,进行特征筛选和可解释性分析,深入探讨了非点源污染对河流NH3-N和TN的影响。通过一种新的耦合模型提高了水质预测的准确性,并进一步分析了非点源污染对研究区的影响。该研究为通过耦合模型和可解释方法来理解和分析非点源污染对水质的影响提供了一个新的研究视角。

Abstract

This week, I read an article titled “Deep learning model based on coupled SWAT and interpretable methods for water quality prediction under the influence of non-point source pollution”. The article constructed a water quality prediction model, SWAT-XGBoost-LSTM, which couples a mechanistic model with an interpretable deep learning model. Based on the current very mature LSTM model, it introduces the mechanistic model SWAT to simulate the impact of non-point source pollution on rivers. Through interpretable methods, feature screening and interpretability analysis were performed to deeply discuss the effects of non-point source pollution on NH3-N and TN in rivers. The experiments show that non-point source pollution significantly impacts river water quality, where the three features provided by the SWAT model contribute about 21% and 22% of the importance in predicting NH3-N and TN, respectively. Compared with the model relying solely on water quality monitoring data, the SWAT-XGBoost-LSTM model improved the R² by about 6.3% and 7.5% in predicting NH3-N and TN, respectively, and reduced the MAE and RMSE by 12.5% and 20.5% and 17.3% and 14.6%, respectively. This study improves the accuracy of water quality prediction through a novel coupled model and further analyzes the impacts caused by non-point source pollution in the study area. This study provides a new research perspective to understand and analyze the impacts of non-point source pollution on water quality through coupled modeling and interpretable methods.

1 文章内容

现有问题:
非点源污染的监测和量化困难: 非点源污染是一个复杂的过程,难以监测和量化,这对水质预测研究提出了挑战。
模型可解释性不足: 深度学习模型通常被视为“黑盒”模型,缺乏可解释性,这限制了模型的可信度和应用范围。

创新点:

耦合SWAT模型与深度学习模型: 通过耦合SWAT模型和深度学习模型(LSTM),论文中提出了一种新的水质预测模型(SWAT-XGBoost-LSTM),以更准确地预测在非点源污染影响下的河流水质。
引入XGBoost-SHAP方法进行特征筛选和解释: 利用XGBoost-SHAP方法进行特征筛选和模型解释,提高了模型的可解释性和预测准确性。这种方法通过计算特征的贡献度来简化模型输入,消除冗余,防止过拟合。
提高模型性能: 通过特征筛选和模型优化,SWAT-XGBoost-LSTM模型在预测NH3-N和TN时表现出比传统LSTM模型更高的准确性和更好的泛化能力。

1.1 模型

1.1.1 非点源污染及其机理模型

SWAT model

SWAT,美国农业部开发的水文模型,是一个基于物理的,概念性的,连续时间流域模型。

采用SWAT软件对研究区非点源污染进行模拟。首先,通过DEM和河流矢量文件,划定流域边界和子流域,共划定了21个子流域的研究区的研究。其次,根据土地利用、土壤类型、坡度和气象数据,对每个子流域进行HRU划分,共划分出193个HRU,其中土地利用、土壤类型和坡度数据的HRU阈值参数设置为10%。最后,进行了模拟,本研究以2019年和2020年为预热期,模拟了2021年至2023年。

SWAT模型被用来模拟非点源污染过程,为水质预测提供关键特征。通过模拟土壤含水量(SW)、侧向流贡献(LAT)和侧向流中的硝酸盐含量(LAT_NO3)等特征,SWAT模型为LSTM模型提供了重要的输入数据。这些特征在水质预测中表现出显著的贡献,验证了SWAT模型在非点源污染模拟中的有效性。

1.1.2 耦合的可解释LSTM模型

1.1.2.1 XGBoost-SHAP可解释方法

XGBoost-SHAP方法在耦合可解释LSTM模型中的应用。XGBoost-SHAP方法结合了XGBoost模型的高效预测能力和SHAP值的可解释性,以提高深度学习模型的可解释性。

XGBoost模型

XGBoost由Chen和Guestrin提出,是一种基于决策树的集成学习算法,常用于分类和回归任务。它结合了梯度增广树和随机森林的优点,并采用并行处理,显著提高了模型训练和预测的效率和性能的报告。

目标函数由模型的损失函数L和抑制模型复杂性的正则项Ω组成,其中M是样本的数量, y i y_i yi是真值, y ^ i \hat y_i y^i是预测值,并且 f i f_i fi是集合中的第 j j j棵树,目标函数如下:

在这里插入图片描述

接下来,最关键的事情是通过精确的分裂来构建每棵树。 XGBoost的分裂标准主要基于最大化目标函数的增益,增益的表达式如下:

在这里插入图片描述

其中, G L G_L GL G R G_R GR分别是左子树和右子树的增益, H L H_L HL H R H_R HR 分别是左子树和右子树的二阶导数之和, λ \lambda λ是模型的惩罚系数, γ \gamma γ是叶节点的惩罚系数。

SHAP值

在许多情况下,深度学习模型基于复杂算法,也称为黑盒模型,即无法理解黑盒的操作。解释性学习方法提供了理解深度学习模型的见解。此外,研究表明这些工具也可用于特征筛选。

SHAP是从博弈论中派生出来的一类加性解释模型。具体来说,SHAP使用Shapley值作为度量,量化每个输入变量对模型预测结果的独立贡献Shapley值是SHAP的核心,是博弈论中的一种分配方法,用于衡量合作游戏中每个参与者的边际贡献,在机器学习模型中,Shapley值衡量每个特征对模型预测结果的贡献。

在本研究中,SHAP方法用于解释XGBoost算法。XGBoost SHAP可解释性方法被组合并用于提高深度学习模型的可解释性。总体而言,XGBoost用于构建预测模型并计算特征的重要性,而SHAP用于更详细地分析这些特征对模型预测的贡献。

对于树模型中的特定特征 j j j,需要计算所有可能的特征组合的Shapley值,然后加权求和,公式如下:

在这里插入图片描述

其中,S是模型中使用的特征的子集,x是待解释的样本的特征向量,p是特征的数量,val(S)是指在特征组合S下模型输出的值。

1.1.2.2 LSTM model

LSTM的核心思想是引入一种“门控机制”有效地解决了传统RNN在处理长期依赖关系时遇到的梯度消失或爆炸问题。因此,LSTM可以选择性地保留和丢弃时间序列信息,这使得LSTM特别适用于与时间序列数据密切相关的问题,尤其是需要捕获和处理长期依赖性的那些复杂场景。
LSTM通过门控机制控制信息传输的路径。这主要包括遗忘门、输出门和输入门。如图所示,

在这里插入图片描述

在这里插入图片描述

1.1.2.3 耦合混合建模方法

为了量化非点源污染过程的特征,首先采用SWAT模型对非点源污染特征进行模拟。同时,为了更好地反映非点源污染过程,本研究将SWAT模型的子流域日尺度输出文件作为SWAT模型的输出。子流域输出文件包含了各子流域的汇总信息,文件中的特征是基于HRU的总和或加权平均计算的,很大程度上反映了子流域和监测站子流域的整体情况,作为SWAT模型的最终输出数据。监测点所在的子流域在很大程度上反映了非点源污染对监测点的影响。其次,我们处理SWAT的最终输出数据,并将其输入XGBoost-SHAP可解释性方法与监测站监测的水质特征进行特征筛选和可解释性分析。利用XGBoost计算各特征的贡献度,利用SHAP分析模型的解释性,通过减少特征的输入量和输入关键特征来消除冗余和防止过拟合现象,提高模型的解释性和预测精度。最后,将过滤后的SWAT输出特征和水质特征组合输入LSTM模型,进行TN和NH3-N的预测

  • 首先利用SWAT模型模拟非点源污染特征。
  • 通过XGBoost-SHAP方法筛选出关键特征。
  • 将筛选后的特征输入LSTM模型进行水质预测。

在这里插入图片描述

如图所示SWAT-XGBoost-LSTM模型的结构和流程。该模型结合了SWAT模型、XGBoost-SHAP方法和LSTM网络,用于预测水质指标(如氨氮NH3-N和总氮TN)

最左侧部分:数据输入和预处理

Weather(气象数据):包括温度、降水等气象信息。
River network superposition correction(河网叠加校正):对河流网络进行校正,以确保模型输入的准确性。
Water quality data(水质数据):包括溶解氧、氨氮、总氮等水质指标。

将这些数据被输入到LSTM网络中,LSTM网络包含多个层:

LSTM layer(LSTM层):用于处理时间序列数据,捕捉水质变化的动态特征。
Dropout layer(Dropout层):用于防止过拟合,通过随机丢弃一些神经元来增强模型的泛化能力
Dense layer(全连接层):用于输出最终的预测结果。

中间部分:SWAT模型和XGBoost-SHAP方法

DEM, Land Use, Soil(数字高程模型、土地利用、土壤数据):这些地理空间数据被输入到SWAT模型中。
SWAT(土壤和水评估工具):用于模拟流域内的水文过程和非点源污染。
Daily scale estimation(日尺度估计):SWAT模型输出日尺度的模拟结果。
XGBoost-SHAP:结合XGBoost模型和SHAP值,用于特征重要性分析和模型解释。通过XGBoost计算每个特征的贡献度,SHAP进一步分析这些特征对模型预测的具体贡献。

最右侧部分:模型解释和特征筛选

Initialize XGBRegressor(初始化XGBRegressor):设置XGBoost回归模型。
GridSearchCV Search(网格搜索):通过网格搜索找到最优的超参数。
Feature importance ranking(特征重要性排序):根据XGBoost的结果对特征进行重要性排序。
Initialize SHAPExplainer(初始化SHAP解释器):设置SHAP解释器来计算SHAP值。
Calculate the SHAP value(计算SHAP值):计算每个特征的SHAP值,量化其对预测结果的贡献。
Feature filtering(特征筛选):根据SHAP值筛选出最重要的特征,减少输入特征的数量,提高模型的解释性和预测准确性。
Explainable analysis(可解释分析):对模型进行解释性分析,提供模型预测的可解释性。

1.1.2.4 模型设置和评价指标

本研究将通过三个性能指标分析结果,并比较不同模型和不同数据集输入的性能。这三个性能指标是决定系数( R 2 R^2 R2平均绝对误差(MAE)和均方根误差(RMSE) R 2 R^2 R2衡量模型预测值与真实值的接近程度,通常取值范围为0到1。越接近1,模型拟合效果越好。MAE衡量预测值与实际值之间差异的平均绝对大小,RMSE是预测误差平方的平均值的平方根。性能指标的公式如下:

其中,N是样本数量, y i y_i yi y ^ i \hat y_i y^i分别是观察值和预测值, y ˉ \bar y yˉ是观察值的平均值。综合来看,当 R 2 R^2 R2较大,MAE和RMSE较小时,表示模型性能更好。

所有数据被分为70%的训练集和30%的测试集。基于先前的研究和重复的精细测试,最终确定了机器学习模型SVR和深度学习模型的最佳超参数组合,结果如表所示。

在这里插入图片描述

1.2 结果和讨论

1.2.1 TN与NH3-N的相关性

富营养化已成为影响水体水质的主要原因之一,其中非点源氮污染是富营养化的重要原因。因此,本研究以NH3-N和TN为研究对象。TN是湖水体中游离NH3-N的总和,NH3-N是湖泊中最具活性的氮物质之一,是湖泊离子平衡、生态平衡和水质变化的最有影响力的因素之一。因此,NH3-N的积累是影响TN含量的主要变化因素之一。理论上,NH3-N和TN之间存在很大的相互影响关系。

在这里插入图片描述

为了明确NH3-N和TN之间的相关程度,以便更好地预测NH3-N和TN,本研究首先使用皮尔逊相关系数计算不同水质因素之间的相关性。如上图通过比较NH3-N和TN与其他水质因素的皮尔逊相关系数,发现NH3-N和TN的Erskine相关系数高达0.67,表明TN和NH3-N之间有很强的相关性。其次,如下图a和图b所示,在XGBoost-SHAP可解释方法的特征贡献分析中,发现TN对NH3-N的预测有积极贡献,单独对NH3-N的预测贡献了约31%,同样,NH3-N对NH3-N的预测也有积极贡献,单独对NH3-N的预测贡献了约25.2%。NH3-N和TN之间的理论关系在可解释方法中得到了反映,为我们在下一步解释黑盒模型提供了信心。

在这里插入图片描述

如图(a)用于预测NH3-N的特征重要性图;(B)用于预测TN的特征重要性图;

1.2.2 使用XGBoost-SHAP方法进行特征筛选

简单地将水质监测特征和SWAT模拟特征一起输入到LSTM模型中可能会使模型输入更丰富并提供更多信息,但也可能导致由于特征冗余和过拟合问题而降低模型性能。为了确保模型在获得丰富输入特征的同时提高准确性和可解释性,简单的多变量特征融合无法实现目标。作者引入了XGBoost-SHAP可解释方法,该方法通过网格划分方法计算XGBoost的最优参数进行训练,然后将结果输入SHAP方法进行分析,以计算不同变量对预测任务的贡献程度。

在下图中,根据Shapley值选择了贡献最高的前8个特征并将其输入LSTM模型,其中蓝色是水质数据,红色是SWAT模拟的数据。可以看到,影响NH3-N和TN的特征是相同的,这也表明由于NH3-N和TN之间的相关性,在预测过程中有相似的结果。这表明SWAT模拟特征对NH3-N和TN的预测有非常重要的影响。最后,根据XGBoost-SHAP可解释方法的分析,SWAT的特征主要是SW(土壤含水量)、LAT(侧向流对河流排放每单位时间的贡献)和LAT_NO3(侧向流中每单位时间进入河流通道的NO3量)。

在这里插入图片描述
此外,五个选定的特性来自水质监测值。一方面,水质因素仍然是影响氨氮和总氮的重要因素。另一方面,水质监测值是真实的观测值,比SWAT模型值具有更高的精度。此外,考虑到NH3-N和TN的相互关系,河流水质特征仍是影响预测的主要特征。总之,本研究引入XGBoost-SHAP可解释方法筛选对TN和NH3-N预测贡献最大的特征集,为构建高性能、高解释性的SWAT-XGBoost-LSTM模型提供了重要基础。

进一步研究SW、LAT和LAT_NO3三个特征对水质的影响。我们绘制了总量和NH3-N与SW,LAT和LAT_NO3三个特征之间的相关性。下图中子图a、b、c分别为预测NH3-N时LAT、SW、LAT_NO3与TN的相关图,表明当TN> 3.2(mg/L)时,SHAP为正且逐渐增大,对特征筛选结果产生正影响,验证了非点源污染对水质恶化有一定贡献。以及揭示这些关键特征在预测模型中的重要性。类似地,下图中子图d、e和f显示了在预测TN时NH3-N的LAT、SW和LAT_NO3的相关性图,具有类似的结论,当NH3-N大于0.25(mg/L)时,SHAP值为正,这对特征筛选的结果产生了积极影响。

在这里插入图片描述

XGBoost-SHAP可解释学习方法为LSTM模型的预测提供了可靠的基础,量化了每个特征的贡献,当我们选择贡献百分比高的特征时,它使模型输入更加简洁,消除冗余并防止在训练深度学习模型时可能发生的过拟合现象。这也提高了我们对训练模型在未来相同地点的预测性能的信心。同时,它还为我们提供了适应研究区域的分析解释,基于相关分析结果可以使相关生态和环境部门更好地了解研究区域的非点源污染情况,并开展相应的非点源污染预防和控制工作,例如,它可以专注于监测研究区域的土壤水分含量,以预测非点源污染的风险。

1.2.3 SWAT-XGBoost-LSTM模型的性能

在通过XGBoost-SHAP可解释方法确定输入特征后,选择基础深度学习模型以更好地提高预测精度至关重要。首先,我们比较了SVR、GRU、LSTM和Bi-LSTM模型,结果如下表所示。发现传统的机器学习模型很难应对复杂的时间任务,GRU的性能略弱于LSTM,这可能是因为使用了三年的数据并选择了更多的输入特征。因此,考虑到计算效率,作者全面选择了LSTM模型作为基础模型。

在这里插入图片描述

在深度学习中,时间步的重要性在于它直接影响模型捕获时间序列数据中的时间依赖性的能力,因此选择适当的时间步至关重要。之前,我们确定了数据集的划分并识别了其他相关参数,在此基础上我们比较了不同滑动窗口下模型的性能,结果如下图所示。对于NH3-N和TN,模型在步长为24时表现最佳。在这个时间序列预测任务中,我们每四小时监控一次数据,这意味着每次预测都使用前96小时的信息,这充分学习了时间序列数据之间的长期依赖关系,并将计算复杂度降低到相对较低的水平。

在这里插入图片描述

作者提出了一种SWAT-XGBoost-LSTM模型,用于研究非点源污染对河流水质的影响,该模型将难以监测和量化的非点源污染纳入河流水质研究中。为了测试混合模型的性能和可行性,我们将仅考虑水质监测值的LSTM模型与SWAT模拟后的水质监测值结合的SWAT-LSTM模型以及特征筛选后的SWAT-XGBoost-LSTM模型进行了比较。对于NH3-N的预测,如图所示。SWAT-LSTM由于输入特征太多,可能会出现过拟合现象,使得精度低于LSTM,而SWAT-XGBoost-LSTM的性能最好,R2为0.93,MAE和RMSE分别为0.02和0.03。与LSTM相比,R2提高了约6.3%,MAE和RMSE分别降低了12.5%和20.5%。

在这里插入图片描述

2 相关知识

2.1 SWAT模型

SWAT (Soil and Water Assessment Tool)是美国农业部(USDA)农业研究局(ARS)开发的流域尺度模型,用于模拟地表水和地下水的水质和水量,长期预测土地管理措施对具有多种土壤、土地利用和管理条件的大面积复杂流域的水文、泥沙和农业化学物质产量的影响。

SWAT模型是一种基于物理过程的分布式流域模型,广泛应用于水资源管理和非点源污染研究。它通过模拟流域内的水文过程和污染物传输,帮助研究者和管理者评估土地利用变化、气候变化和管理措施对水资源和水质的影响。

  • SWAT模型的基本原理
    SWAT模型通过模拟流域内的物理过程,包括降水、径流、土壤侵蚀、养分循环和植被生长等,来评估水资源和水质的变化。其核心功能包括:
    水文过程模拟:模拟降水、地表径流、地下水流动、蒸散发和土壤水分平衡。
    水质模拟:模拟污染物(如氮、磷、农药等)的传输和转化过程。
    土地利用和管理措施的影响:评估不同土地利用方式和管理措施(如施肥、灌溉、植被覆盖等)对流域水文和水质的影响。

  • SWAT模型的结构
    SWAT模型将流域划分为多个子流域(Sub-basins)水文响应单元(Hydrological Response Units, HRUs)。这种划分方式使得模型能够更精细地模拟流域内的异质性。
    子流域(Sub-basins):根据地形和流域边界划分,是流域内的基本单元。
    水文响应单元(HRUs):基于土地利用、土壤类型、坡度等因素进一步划分,是模型模拟的最小单元。每个HRU具有独特的水文和水质特征。

  • SWAT模型的主要输入数据
    地形数据:数字高程模型(DEM),用于划分子流域和HRUs。
    土地利用数据:土地利用类型(如森林、农田、城市等)。
    土壤数据:土壤类型、质地、渗透性等。
    气象数据:降水、气温、湿度、风速等气象数据,用于模拟蒸散发和降水过程。
    植被数据:植被类型、覆盖度等,用于模拟植被对水文过程的影响。
    管理措施数据:施肥、灌溉、植被管理等措施的实施情况。

  • SWAT模型的输出结果
    水文过程:地表径流、地下水流量、土壤含水量、蒸散发量等。
    水质指标:溶解氧(DO)、氨氮(NH3-N)、总氮(TN)、总磷(TP)等污染物的浓度和负荷。
    土壤侵蚀和沉积:土壤侵蚀量、沉积量等。
    生态系统服务评估:如水源涵养、土壤保持等。

在论文中,SWAT模型被用来模拟非点源污染过程,为水质预测提供关键特征。通过模拟土壤含水量(SW)、侧向流贡献(LAT)和侧向流中的硝酸盐含量(LAT_NO3)等特征,SWAT模型为LSTM模型提供了重要的输入数据。这些特征在水质预测中表现出显著的贡献,验证了SWAT模型在非点源污染模拟中的有效性。

2.2 代码

XGBoost-SHAP特征筛选

import xgboost as xgb
import shap

# 训练 XGBoost 模型
xgb_model = xgb.XGBRegressor()
xgb_model.fit(X_train, y_train)

# 使用 SHAP 进行特征重要性分析
explainer = shap.TreeExplainer(xgb_model)
shap_values = explainer.shap_values(X_train)

# 可视化特征重要性
shap.summary_plot(shap_values, X_train)

# 选择最重要的特征
important_features = np.argsort(np.abs(shap_values).mean(axis=0))[-8:]
X_train_selected = X_train[:, important_features]
X_test_selected = X_test[:, important_features]

# 更新 PyTorch 张量
X_train_tensor = torch.tensor(X_train_selected, dtype=torch.float32)
X_test_tensor = torch.tensor(X_test_selected, dtype=torch.float32)

# 更新 DataLoader
train_dataset = TensorDataset(X_train_tensor, y_train_tensor)
test_dataset = TensorDataset(X_test_tensor, y_test_tensor)

train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)

LSTM模型构建和训练

import torch.nn as nn

class LSTMModel(nn.Module):
    def __init__(self, input_size, hidden_size, num_layers, output_size):
        super(LSTMModel, self).__init__()
        self.hidden_size = hidden_size
        self.num_layers = num_layers
        self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)
        self.fc = nn.Linear(hidden_size, output_size)
        self.dropout = nn.Dropout(0.1)

    def forward(self, x):
        # 初始化隐藏状态和细胞状态
        h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device)
        c0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(x.device)

        # LSTM 前向传播
        out, _ = self.lstm(x, (h0, c0))
        out = self.dropout(out[:, -1, :])  # 取最后一个时间步的输出
        out = self.fc(out)
        return out

# 初始化模型
input_size = X_train_selected.shape[1]  # 输入特征数
hidden_size = 64  # 隐藏层大小
num_layers = 2    # LSTM 层数
output_size = 1   # 输出大小

model = LSTMModel(input_size, hidden_size, num_layers, output_size)

模型训练

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.0015)

# 训练模型
num_epochs = 80
for epoch in range(num_epochs):
    model.train()
    for batch_X, batch_y in train_loader:
        # 前向传播
        outputs = model(batch_X.unsqueeze(1))  # 增加时间步维度
        loss = criterion(outputs, batch_y)

        # 反向传播和优化
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

    # 打印训练损失
    if (epoch + 1) % 10 == 0:
        print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')

模型评估

model.eval()
with torch.no_grad():
    y_pred = model(X_test_tensor.unsqueeze(1)).squeeze().numpy()
    y_true = y_test_tensor.squeeze().numpy()

# 计算性能指标
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score

mae = mean_absolute_error(y_true, y_pred)
rmse = np.sqrt(mean_squared_error(y_true, y_pred))
r2 = r2_score(y_true, y_pred)

print(f'MAE: {mae:.4f}')
print(f'RMSE: {rmse:.4f}')
print(f'R2: {r2:.4f}')

总结

本文为解决非点源污染影响下的河流水质监测与预测难题提供了新方法。模型综合考虑非点源污染因素,提高了水质预测准确性和模型可解释性,有助于相关部门了解非点源污染情况,开展污染防控工作,为非点源污染研究提供了新视角和思路。