顾乾晖,曾 斌,涂振宇
(1.南昌工程学院 信息工程学院,江西 南昌 330099;2.江西省防汛信息中心,江西 南昌 330096)
水质预测工作是根据采集到的历史水质监测数据,通过建模等手段来预测水质的变化趋势,来达到掌握水质现状以及发展趋势的目的[1]。水质预测精度的提高对于水环境质量的评价、水资源管理制度的制定,以及水污染监测与控制系统的规划具有重大意义[2]。
目前,水质预测的方法主要有模糊综合分析法[3]、支持向量机法[4]、灰色预测法[5]和人工神经网络法[6]等。模糊综合评价法需要对各种因子进行模糊化加权赋值处理,计算精度高但过程复杂,运行时间长。灰色预测法存在只适合水质短期预测不适合长期预测的缺点[7],并且灰色预测法对复杂数据的预测效果较差[8]。近年来,随着人工智能的迅速发展,越来越多的学者把神经网络和机器学习运用到水质预测和评价模型当中。刘红梅[9]等运用最小二乘向量回归模型去预测水质,实验结果表明,大大降低了算法的计算复杂度并提高了水质预测的精确度。然而SVM对参数选取具有盲目性,有时候求出的模型并不是最优解[10]。张青等[11]建立了BP神经网络水质预测模型对水质相关指标进行预测,取得了良好的效果。何钰[12]等把BP神经网络应用于水质评价和水质预测之中,并与其他模型对比。结果表明,BP神经网络能降低计算复杂度,结果更加客观。BP神经网络虽然在水质预测方面取得了一定的成果,但是BP神经网络存在易陷入局部最优和收敛速度慢的问题[13],并且BP神经网络在时间序列的数据分析上还存在着欠缺[14]。
水质数据是以多元时间序列形式存在的数据集。在进行水质预测时,应该考虑时间序列问题。在处理时序问题上,由于LSTM神经网络独特的网络结构,相对于其他传统的神经网络,LSTM神经网络更易快速收敛,更能得到最优模型。2017年,Wang[15]首次将 LSTM 引入水质预测领域,并证明了其在水质预测领域的可行性。李彦杰[16]等提出了基于 LSTM 模型的海洋水质预测,通过将SVR和LSTM 两种算法做了对比发现LSTM算法表现出了较好的拟合效果。但是在实际生产情况下,影响水质的因素过多,水质数据往往会呈现出不平稳、波动性强、噪声大等现象,这使得传统神经网络模型不能取得理想效果。
变分模态分解(VMD,Variational Mode Decomposition)模型能将复杂的、非线性、不平稳的序列数据分解为多个相对平稳、频率逐级变化的本征模态函数(BLIMF,Band-Limited Intrinsic ModeFunctions),适用于处理不平稳数据[17]。
因此本文提出一种利用VMD分解水质数据中的高锰酸盐数据,并通过粒子群(PSO)优化LSTM神经网络模型的水质高锰酸盐预测方法,通过利用多种模型对河南南阳站点的水质数据进行仿真对比实验,以验证本文提出的VMD-PSO-LSTM模型的有效性和合理性。
LSTM神经网络是从RNN神经网络基础上改进而来。LSTM神经网络中的门控单元(输入门、输出门、遗忘门)使得模型具有较长时间的“记忆功能”,因此LSTM神经网络适用于长时间非线性序列预测问题,LSTM结构如图1所示。
图1 LSTM结构图
模型的输入数据分别为t时刻的输入数据xt,t-1时刻的记忆值ct-1和t-1时刻的LSTM的输出值ht-1,输出数据分别为t时刻的记忆值ct-1和LSTM输出值ht。
“遗忘门”通过ft保留和丢弃上一时刻的记忆单元的信息来影响当前时刻的细胞状态。ft如式(1)所示。
ft=σ(wf.[ht-1.xt]+bf),
(1)
式中σ为sigmoid激活函数;bf为偏置顶;wf为权重矩阵。
“输入门”通过激活函数sigmoid将变量控制在[0,1]之间,并输出it,如式(2)所示:
it=σ(wf.[ht-1.xt]+bf).
(2)
“遗忘门”和“输入门”的变化决定了细胞状态ct的变化,如式(3)~(4)所示:
gt=tanh(wc.[ht-1.xt]+bc),
(3)
ct=ftct-1+itgt.
(4)
“输出门”用来控制当时时刻细胞状态值的输出,如式(5)~(6)所示
Qt=σ(wQ.[ht-1.xt]+bQ),
(5)
ht=Qt×tanh(ct).
(6)
VMD模型是Dragomiretskiy和Zosso于2014年提出的一种自适应、完全非递归的模态变分和信号处理的方法,它根据预设的模态数将信号分解为具有不同中心频率的有限带宽,采用交替方向乘子法,不断更新各模态及其中心频率,逐步将各模态解调到相应的基频带,并将各个模态及其相应的中心频率提取出来,最终得到了具有不同中心频率的各个分量[18]。
VMD的本质是VMD模型的构建和求解变分问题,其具体过程如下[19]:
(1)通过希尔伯特变换计算每个模态uk(t)的分析信号以获取单边频谱;
(2)对于每个模态解析到的分析信号,通过与对应的中心频率指数项e-jwkt进行混叠,将各模态的频谱移位到基带上;
(3)根据梯度平方准则和高斯平滑度计算分析信号的梯度平方L2范数,来估计出每个模态的宽带,其变分约束模型为
(7)
(8)
(4)为将上述约束变分公式变成无约束问题,这里引入二次罚函数c和Lagrange乘子λ:
(9)
VMD运用交替方向乘子法更新各模态变量uk(t)和对应的中心频率ωk来求解出式(7)中的最优解,其中模态变量更新方法如式(10)所示:
(10)
中心频率更新公式如下:
(11)
本文提出的VMD-PSO-LSTM模型流程图具体如图2所示:
Step1:缺失值处理。在水质监测中,由于设备失灵或者人为原因会导致采集数据缺失,因此需要提前对样本数据进行预处理。处理样本缺失值一般是剔除样本和填补缺失值,但是在时序序列样本中,采用剔除缺失值的方法会导致时序中断,不利于训练和预测。所以本文采用一般线性插值法来填充缺失数据。
Step2:为了提高模型的收敛速度和计算精度,需要对水质中高锰酸盐样本数据进行最大最小值归一化处理。
Step3:将归一化后的高锰酸盐数据通过VMD进行模态分量分解为k个分量。
Step4:将每个高锰酸盐模态分量数据作为对应的LSTM神经网络模型的输入数据,输入数据表达式见式(12):
(12)
式中x分别表示高锰酸盐数据;i为(1~6);xi表示为第i个高锰酸盐模态分量。
Step5:利用粒子群(PSO)优化LSTM模型。选取均方误差MSE作为评价标准和各粒子的适应度值,得出各个分量对应最优LSTM模型的神经元个数m和学习率lr。
Step6:将各个分量最优LSTM模型进行水质中的高锰酸盐预测,得出各个分量对应的高锰酸钾盐预测值Dn。
Step7:把每个分量对应的高锰酸钾盐预测值Dn代入式(13),得到最终高锰酸钾盐预测值D。
D=D1+D2+…+Dn.
(13)
图2 模型流程图
实验所使用计算机配置如下:处理器为(英特尔)Intel(R)Core(TM)i5-8400 CPU @ 2.80GHz,显卡为 NVIDIA GeForce GTX 1050 Ti,内存为16 GB,操作系统为windows10;程序设计语言为Python3.7;集成开发环境为Anaconda和Visual Code;程序中TensorFlow由2.1.0版本实现,scikit-learn由0.2.0版本实现。
所用的数据是国家环境监测总局的河南南阳站2020年5月至2020年10月的水质数据,水质数据每4 h更新一次,一天共6组数据。按照GB3838—2002《地表水环境质量标准》中的水质评价标准,选取前7个时间段内高锰酸盐数据(1组数据,每组7个数据)作为水质预测模型的输入数据,同时输出下个时间段的高锰酸盐数据,模型输入输出示意图如图3。同时将训练集与测试集分别划分为90%与10%。
图3 模型输入输出示意图
本文采用一般线性插值法来填充缺失数据。即:
(14)
式中xk和xk+j分别是k和k+j时刻的数值,xk+i为k+i时刻的缺失值的取值。
由于水文数据类型不同,为了提高模型的收敛速度和计算精度,需要对水质样本数据进行归一化处理。本文采用最大值最小值归一化。即:
(15)
式中ximax表示变量i的最大值;ximin表示变量i的最小值。
为了使LSTM水质模型能更好的识别水质中高锰酸盐的变化规律,降低预测的难度,对水质数据中的高锰酸钾盐数据进行VMD分解。VMD算法的参数包括:模态数k、惩罚因子α、保真度系数τ及收敛停止条件ε,其中模态数k对VMD分解的结果影响较大,模态数k过大会引起模态混叠现象,反之模态数k过小会出现模态分量欠分解[20]。
k值通过中心频率的方法来确定,当不同模态个数k的最后一层IMF分量中心频率保持相对稳定时,可认为此时k取得最佳值[21]。本文分别设置模态数k=3、4、5、6、7、8得到各个模态分量的中心频率如表1所示。从表1中可以看出,在k>5后各个模态分量的最后一层IMF的中心频率保持稳定,因此本文选取模态数k=6,通过VMD处理得到的8个不同频率的尺度的平稳模态分量如图4所示。
表1 各个模态分量的中心频率
图4 VMD处理获得的模态分量
将VMD变分分解的5个高锰酸盐模态分量分别作为LSTM模型的输入,同时输出高锰酸盐数据。在传统LSTM神经网络中初始参数设定需要依靠人为的经验来主观设定初始参数,而不同的参数也会导致模型的训练速度、误差、拟合效果差异较大。
粒子群优化算法(PSO:Particle swarm optimization)是一种群智能优化算法,粒子群的优化是将种群中的个体当成多维搜索空间的粒子,每个粒子都有一个由目标函数决定的适应度值,在每一次迭代中,每一个粒子通过寻找个体最优位置和全局最优位置来不断更新自己的位置和速度,直至到达寻优条件[22]。因此本文通过粒子群优化(PSO)算法自动迭代寻优LSTM模型两个重要参数:神经元个数(m)和学习率(lr),并把预测结果的均方误差(MSE)作为目标函数,MSE如式(16)所示:
(16)
式中yt是真实数据,pt是预测值。
PSO参数设置如下:基本PSO中惯性权重w=0.8,学习因子c1=2,c2=2,迭代次数为100次,种群数量pop=30,神经元个数m取值范围为[1,50],学习率lr取值范围为[0.0001,0.01]。PSO-LSTM中LSTM模型部分由输入层、单隐藏层和输出层组成,经过PSO对LSTM模型以均方误差(MSE)为目标函数进行寻优。
为了验证本文提出的VMD-PSO-LSTM预测模型的有效性,选取LSTM,PSO-SVR,PSO-LSTM,PSO-BP,VMD-PSO-SVR,VMD-PSO-LSTM等预测模型进行对比实验。各个对比模型均在相同的实验平台和环境下进行实验,各对比模型参数选择如表2所示,其中LSTM,BP模型参数选择依据经验式(17)选择。
表2 对比模型参数设置
(17)
式中p和q分别是输出层和输入层的节点数,a为[0,10]之中的一个数。
为了更加直观的看出VMD-PSO-LSTM模型在预测精度上的提高,分为画出这几对比种模型在测试集上的预测数值,并且与真实数值进行对比,绘出图5~7。图5~6中可以看出,LSTM,PSO-LSTM,PSO-SVR,PSO-BP这几种模型与真实数据拟合度较差、效果不好。图7中可以看出,VMD-PSO-LSTM模型更能够拟合真实数据,有着很好的效果。
为了更加精确体现4种模型之间的性能对比,根据真实数据与预测数据绘制出这几种模型在的均方误差(MSE),均方根误差(RMSE),平均绝对误差(MAE)和相关系数(R2)性能对比表,结果如表3所示。可以从表中看出,在MSE指标上VMD-PSO-LSTM的均方误差最低,比VMD-PSO-BP下降24%左右。在R2指标上,VMD-PSO-LSTM的决定系数最高,比VMD-PSO-BP提高6%。在RMSE指标上,VMD-PSO-LSTM的均方根误差最低,比VMD-PSO-BP降低22%。在MAE指标上,VMD-PSO-LSTM的平均绝对误差最低,比VMD-PSO-BP降低20%。
图5 LSTM与PSO-LSTM模型图 图6 PSO优化各个模型对比图 图7 VMD各模型预测数据图
表3 各模型的预测结果对比
本文首先将地表水的水质数据中高锰酸盐指数数据通过均值平滑法填补缺失值。为减少数据的波动,把填补后的数据通过最大最小值归一化方法进行预处理。然后将水位数据通过VMD进行模态分解成6种分模态,将这6种模态对应的高锰酸盐数据分别为LSTM模型的输入,经过PSO优化和训练后得到6种预测值。再将这6种预测值进行相加,得到最终高锰酸盐预测值。实验结果表明本文提出的VMD-PSO-LSTM预测模型的误差最小,与真实数据更加吻合,预测模型的性能比PSO-LSTM,PSO-SVR,PSO-BP,VMD-PSO-SVR,VMD-PSO-BP等预测模型更加准确、取得更好的预测效果,为水环境的监测和监管提供更有力的参考依据。后续工作主要是尝试用多层隐藏层去预测。