基于SFLA-CNN和LSTM组合模型的水位预测

2021-04-23 02:09周勇强朱跃龙
计算机与现代化 2021年4期
关键词:水文青蛙水位

周勇强,朱跃龙

(河海大学计算机与信息学院,江苏 南京 211100)

0 引 言

水文时间序列是指水位、流量等指标随着时间变化而产生的一系列观测值。水文时间序列预测能够为水利工程的建设提供有效的设计指导和控制,为水资源的优化配置和合理开发提供科学的决策和规划。

近几十年来,随着大数据和人工智能时代的到来,水文时间序列预测技术也在不断地发展起来,国内外研究者提出了很多经典的传统预测模型、神经网络预测模型以及各种优化算法,极大地推动了水文时间序列领域的蓬勃发展。在20世纪70年代时,Box等[1]对自回归模型(AR)、自回归移动平均模型(ARMA)和自回归综合移动平均模型(ARIMA)进行了系统的介绍和表述,由于其结构简单的特点,因此被广泛应用于时间序列数据分析和预测。商其亚等[2]利用时间序列分析中的ARIMA模型对民勤地下水位主要影响因子的人口、耕地面积、大牲畜存栏、上游来水量4个指标进行预测,对类似地区的地下水位预测有一定的参考价值。Yu等[3]基于进化算法(Evolutionary Algorithm, EA),将混沌理论与支持向量机(Support Vector Machine, SVM)相结合,提出了EC-SVM模型,用于丹麦流域和维克斯堡河日径流预报,所提出的EC-SVM模型优于标准混沌、SVM和ARIMA模型。Yadav等[4]采用小波变换(Wavelet Transform, WT)和SVM对湖泊水量日变化进行预测,以湖泊日水位和其他水文气象数据作为输入,进行了多种组合试验,得到了最佳模型结构并将其推广应用于湖泊水位预测。Atiquzzaman等[5]将极限学习机(Extreme Learning Machine, ELM)应用于水文流量序列建模,并与基于遗传算法和进化算法的SVM进行性能比较。实验结果表明,在相同条件下,ELM表现出了更佳的稳健性。与此同时,随着水文时间序列数据的数据量和复杂性的不断增加,传统的统计学预测方法的算法效率、预测精度和准确度已经不能满足现实中的要求,许多研究者利用机器学习、深度学习和神经网络来搭建预测模型,从而提高模型的效率和预测准确性。Kalteh[6]使用人工神经网络(Artificial Neural Network, ANN)和SVM,结合小波变换来预测伊朗哈尔吉尔和波内尔站的月河流流量。结果表明,ANN-SVM比单个SVM模型具有更好的精度。Wang等[7]提出了一种基于长短期记忆神经网络(Long and Short-Term Memory, LSTM)模型的水质预测方法,并以太湖2000年至2006年每月的水质指标数据集作为训练数据进行了一系列仿真实验。该方法与基于BP神经网络和基于在线ELM的2种方法比较,实验结果表明LSTM预测方法具有较高的精度和通用性。许国艳等[8]提出了基于CNN-MC的水文时间序列预测组合模型,利用卷积神经网络(Convolutional Neural Networks, CNN)的权值共享优点和马尔科夫链(Markov Chain, MC)的残差对CNN的预测值进行修正,有效提高了预报的准确性。Hu等[9]提出了一种将集成经验模式分解(Ensemble Empirical Mode Decomposition, EEMD)和SVR相结合的混合预测方法,利用EEMD对非线性和非平稳性的风速时间序列进行分解,再使用SVM模型得到相应的预测值。该方法计算简单,数据需求量少,易于实现。Wang等[10]提出了基于ARIMA-Bi_LSTM混合模型对电解质容器早期的稳定性预测,其中ARIMA用来预测时间序列的线性部分,Bi_LSTM用来预测时间序列非线性部分,最后通过小波变换将线性和非线性结合起来,得到最优的预测值。传统单一模型结构简单,对于复杂的非线性水文时间序列具有预测精度较低、不能很好捕捉水文时间序列的复合特征的问题[11]。组合预测模型能够包含更多、全面的时序数据和信息,有效地提高了预测准确度,然而在模型参数选择方面需要手工调参,花费时间多且不准确[12]。

本文提出一种基于SFLA-CNN和LSTM的组合预测模型。该模型通过随机蛙跳算法对CNN模型进行参数寻优,然后利用BP神经网络[13]对SFLA-CNN和LSTM模型的预测值进行非线性组合,更准确地捕捉水文数据的局部特征和时序特征,可有效提高预测的准确度,具有更好的泛化能力。

1 相关技术

由于水位变化和降雨量之间存在复杂、高度非线性的关系,设计一个能够捕捉水位序列整体特征的水位预测模型,对于研究人员来说是一项具有挑战性的任务。近几十年来,水位预测方法主要分为物理学方法、统计学方法、机器学习方法、深度学习方法和组合模型方法等[14]。

1)物理学方法是使用数值模拟技术构建一个水位预报系统,该系统旨在重现水文过程,却忽视了计算过程费时和参数难确定的复杂问题。

2)统计学方法对于平稳、线性变化的水位预测效果良好,对于非平稳、非线性的水位预测表现较差。

3)机器学习方法在大数据处理和仿真方面具有优势,但在计算复杂性和鲁棒性方面存在不足。

4)深度学习方法是机器学习的延伸,在解决非线性模拟、预测问题方面具有良好的灵活性。

5)组合模型方法是将不同模型组合成一个整体,相互联系、补充,有效地提高预测精确度。

本文中的组合模型方法主要包括2部分:CNN用于提取水文序列的局部特征;LSTM用于提取水文序列的时序特征。

1.1 卷积神经网络

卷积神经网络(CNN)是一种包含卷积计算且具有深度结构的前馈神经网络,其灵感来自生物的自然视觉感知机制[15]。如图1所示,CNN网络结构主要由输入层、卷积层、池化层、全连接层以及输出层构成。

图1 CNN网络结构图

卷积层主要用于提取原始的各种特征,卷积操作具体过程可以用公式(1)来表示,其中xi,j表示第i行第j列元素,wm,n表示第m行第n列的权重,wb表示滤波器的偏置项,f表示激活函数。

(1)

激活层是对卷积层的输出结果作非线性变换,对权重进行适度地调整。池化层是在卷积操作输出结果之后,对数据以及参数进行压缩以达到降低维度的效果,可以有效解决过拟合的问题[16]。

1.2 长短期记忆神经网络

时间序列预测经常会面临历史信息的丢失问题,为了解决长期信息保留的问题,Graves提出了长短期记忆神经网络(LSTM)[17]。LSTM通过各种设计良好的门来更新、存储单元的信息,同时处理梯度消失和梯度爆炸问题,实现对时间序列更好的建模预测[18]。LSTM神经网络结构如图2所示,由遗忘门、输入门和输出门3个门控系统构成。各个门的计算公式如下。

图2 LSTM神经网络结构图

1)遗忘门。帮助LSTM决定哪些信息将从记忆单元状态删除。

ft=σ(Wfxxt+Wfhht-1+bf)

(2)

2)输入门。使用输入门it来决定将要存储到新单元状态Ct的信息。

it=σ(Wixxt+Wihht-1+bi)

(3)

gt=tanh(Wgxxt+Wghht-1+bg)

(4)

Ct=Ct-1ft+gtit

(5)

3)输出门。确定最终的输出值。

ot=σ(Woxxt+Wohht-1+bo)

(6)

ht=ottanh(Ct)

(7)

其中:σ、tanh为Sigmoid激活函数和双曲正切激活函数;W为权值矩阵,b为偏置项。

2 基于SFLA-CNN和LSTM的水位预测组合模型

2.1 整体流程

基于SFLA-CNN和LSTM的水位预测组合模型的整体流程如图3所示。该模型主要由数据预处理、基于SFLA的CNN网络单元、LSTM网络单元以及BP神经网络构成。

图3 模型整体流程图

首先,对于给定的水文数据,需要进行数据预处理,使其成为规范统一的格式,以便于后续的数据分析。本文的预处理主要有空值替换、归一化以及反归一化。其中水位序列L=(l1,l2,…,lt),降雨量序列R=(r1,r2,…,rt)。

输入:水位和降雨量值经过预处理后的训练集为trainX,形式如下:

分别构建CNN单元和LSTM单元。其中CNN单元需要利用SFLA算法进行参数寻优,得到最优的一组CNN参数向量,便于准确地提取水文数据的局部特征。LSTM单元用于提取水文数据的时序特征。最后利用BP神经网络对SFLA-CNN和LSTM进行拟合,从而得到最终的组合预测模型。

输出:水位的预测值序列为trainY,pt表示t时刻水位的预测值,形式如下:

2.2 SFLA-CNN模型构造

CNN具有强大的特征学习以及局部感知的能力,能够有效地捕获水位时间序列局部特征并提高算法运行的效率。但是,在使用CNN进行建模时需要花费大量的时间来进行调参,而且很难通过人为的方式为CNN设定一组较优的参数值。针对此问题,选用搜索速度更快、稳定性更好的随机蛙跳算法[19-20](Shuffled Frog Leaping Algorithm, SFLA)来对CNN的参数进行调优,建立SFLA-CNN模型。该模型利用SFLA较强的搜索能力对CNN手动调参所带来的问题进行优化,能够在较短时间内为CNN搜索到一组较优的参数,有效提高算法实验结果的准确性,具体实现见算法1。SFLA-CNN模型建立步骤如下。

步骤1建立CNN模型。CNN网络结构依次为:输入层、卷积层、BN层、激活层、Flatten层、Dropout层和全连接层,其参数信息如表1所示。

表1 CNN参数信息

步骤2初始化基本参数并随机生成初始蛙群,蛙群是CNN需要寻优的参数组成的向量Q=[Dropout, epoch, batch_size],每一个向量Q代表一个青蛙个体。

步骤3对青蛙个体进行排序并进行分组。生成数组并划分成多个社区,将青蛙按照适应度的好坏进行排序并划分到不同的社区。

步骤4组内进化,即进行局部搜索。首先根据公式(8)计算得到青蛙跳跃的距离Di,并对每个社区中适应度最差的青蛙位置进行调整。其中rand()为随机数,限定范围0到1,Pb为每个社区中性能最好的青蛙,Pw为性能最坏的青蛙。

Di=rand()·(Pb-Pw)

(8)

在计算得到青蛙跳跃的距离之后,根据青蛙当前位置,由公式(9)计算得到青蛙新的位置,公式中Dmax为青蛙跳跃的最大距离。

Pw=Pw(当前位置)+Di, -Dmax≤Di≤Dmax

(9)

步骤5青蛙经过跳跃若能找到更好的解,则原来解被替代;否则,用整个蛙群最优的解Pg替代每个子群体最优的解Pb并重复上述过程。若不能跳跃到更好的位置,则随机产生一个解,替代原来最坏的青蛙Pw。

步骤6进行种群迭代。蛙群中的青蛙个体在子群社区之间跳跃。在每个社区中执行一定的模因进化之后,将每个子群合并为一个整体并重新排序,更新整个蛙群中最好的青蛙Pg。若满足迭代终止条件,则算法停止;否则,继续迭代。

步骤7最终SFLA算法为CNN搜索到一组最优参数输入CNN模型并训练数据,得到水位预测值序列P。

算法1SFLA-CNN模型优化算法。

输入:水位值序列L,降雨量序列R,青蛙个体总数N,子种群数量n,种群迭代次数g,CNN参数向量Q。

输出:水位预测值序列P。

1. 建立CNN模型,初始化参数向量Q

2. 初始化蛙群,计算每只青蛙的适应度并降序排列,得到Pg

4. whilei≤g

5. fromj=1 tondo

6. froms=1 tokdo

7. 计算子种群Pb、Pw并更新

8. end for

9.计算全局Pg并更新

10. end for

11. end while

12. returnPg

13. 将得到的最优参数Q=Pg输入CNN,由CNN(Q,L,R)得到水位预测值序列P

2.3 LSTM模型构造

采用3层LSTM网络和一个全连接层构造LSTM预测模型,其参数信息如表2所示。使用通用的Adam动量估计算法作为梯度优化算法[21],并且对模型的每一个参数计算一个自适应的学习率,动态更新所有的学习参数,从而获得更优良的效果。使用Softsign函数作为激活函数输出其模型的水位预测值,使用平均绝对误差MAE(Mean Absolute Error)和均方根误差RMSE(Root Mean Square Error)作为损失函数对LSTM模型的预测准确度进行评估。

表2 LSTM参数信息

2.4 基于BP神经网络的模型组合

利用BP神经网络对SFLA-CNN和LSTM模型的预测值进行非线性组合,确定2个模型的预测值在非线性组合中的权重,从而得到最终的组合预测模型。将训练集的SFLA-CNN和LSTM预测模型的输出、训练集的真实值作为BP神经网络模型的输入数据,通过BP神经网络模型对输入的数据进行训练、拟合。BP神经网络的隐含神经元个数设置为12,网络层数设置为5,选用ReLU函数作为激活函数输出组合模型的水位预测值,使用平均绝对误差MAE和均方根误差RMSE作为损失函数对组合模型的预测准确度进行评估。

3 实验评估

3.1 实验环境

本文实验的预测模型均采用Python编程,使用基于TensorFlow框架搭建卷积神经网络、长短期记忆网络。实验配置环境如表3所示。

表3 实验配置环境

3.2 实验数据与预处理

实验训练和测试数据来源于江苏省太湖区域大浦口站点的河道水情表和附近站点实时雨情表,数据记录是从2015年5月1日至2018年5月31日每个时间对应的值,时间间隔为1 h,均为标准的csv文件,每个文件存储242830条数据。河道水情表包括测站编码、时间、水位、流量、断面过水面积和断面平均流速等维度;实时雨情表包括测站编码、时间、时段降雨量、时段长、降雨历时、天气状况等维度。

本文采用上一时刻与下一时刻数据的平均值填充缺失的某个时刻的数据[22]。为了提高组合模型的预测准确度和加速算法的效率,对水文时间序列数据进行归一化处理[23],将水文时间序列的水位值和降雨量统一量化在[0,1]区间内,具体使用的归一化方法如公式(10)所示:

(10)

其中,x为实际值,x′为归一化后的值,max(x)和min(x)为数据集中的最大值和最小值。

3.3 评价指标

为了综合衡量和检验实验模型拟合和预测的效果,本文采用3个常见的评价指标:平均绝对误差MAE、均方根误差RMSE和预测准确率FA(Forecast Accuracy)[24]。MAE、RMSE和FA的计算公式如下:

(11)

(12)

(13)

3.4 实验结果与分析

为了保证实验的客观性和降低数据选取的随机性,实验中对水文时间序列数据集使用交叉验证法,将数据集均匀划分为10个互斥子集,其中90%为训练集,10%为测试集,重复进行10次试验,并取实验结果的平均值作为最终的实验结果。实验由2个部分构成,分别为CNN参数调优对比和不同预测模型的结果对比。

1)实验1:CNN参数调优对比。在CNN预测过程中,弃权率、训练批次以及批次大小3个参数对于网络的训练结果影响较大。为了验证SFLA-CNN模型的有效性,本文使用手动调参、PSO与SFLA进行实验对比,结果如表4所示。手动调参即手动初始化弃权率、训练批次和批次大小,例如可以将(0.35,50,200)作为一个提前设定好的参数元组,在训练开始前进行手动输入和初始化操作。

表4 CNN参数调优对比

通过表4中的数据对比发现,当CNN的参数设置为弃权率等于0.05,训练批次等于80,批次大小等于200的时候,算法在各项指标均能达到较优的水平。在所有参数中,弃权率的值对预测结果的影响最大,批次大小其次,而训练的批次值的变化对于结果影响相对较小。另外,对比表4中PSO和SFLA算法搜索的结果发现,2种算法在RMSE、MAE以及FA上均表现较优。但是,在实验过程中PSO算法的性能相比于SFLA来说是极其不稳定的。

2)实验2:不同模型预测结果对比。通过对未来24小时水位数据的拟合、预测来评估组合预测模型的准确度和效果。分别采用CNN预测模型、LSTM预测模型、CNN-LSTM预测模型以及基于SFLA-CNN和LSTM组合预测模型对江苏省太湖区域大浦口站点的水位进行实验预测,获得的预测结果如图4~图7所示。其中横坐标表示未来24小时的时刻,纵坐标表示不同时刻相对应的水位值。

图4 CNN预测结果与真实值对比

图5 LSTM预测结果与真实值对比

图6 CNN-LSTM预测结果与真实值对比

图7 SFLA-CNN-LSTM预测结果与真实值对比

由实验结果可知,对于未来的24小时水位值的预测,以上4种预测模型均能大致描述出其基本水位变化情况,预测结果的趋势与水位真实值基本一致。CNN和LSTM这2种预测模型效果相对接近,比传统算法均有较大的提升。其中CNN预测在考虑水位各个时刻的局部特征效果时比较良好,LSTM预测模型在考虑水位各个时刻的时序特征时表现更好。不过2个模型在部分时间段的预测都呈现一定的滞后现象,而且2个模型在全局峰值的预测与真实值有一定的偏差。CNN-LSTM预测模型结合了2个模型的优点,捕捉了局部特征和时序特征,其预测结果曲线与真实值相比,滞后现象稍微减少,且对全局预测峰值处的偏差稍微减小,但是整体上与真实值还是有一定的偏差。基于SFLA-CNN和LSTM组合预测模型在CNN-LSTM预测模型加入SFLA算法进行参数选优,使得CNN模型能够准确地提取显著性局部特征,避免了重要特征的丢失;同时LSTM可以提取更加准确的时序特征,在整体上和峰值的预测结果更加准确。

实验中,各个模型的评估指标对比如表5所示。由结果可知,本文所提出的基于SFLA-CNN和LSTM组合预测模型在平均绝对误差MAE、均方根误差RMSE以及预报准确率FA的各项评价指标均为最优。

表5 各模型评估指标对比

4 结束语

本文针对单一模型对非线性水文时间序列预测精度低以及组合模型手动调参效率低下、不准确的问题,提出了一种基于SFLA-CNN和LSTM的组合预测模型。该模型利用随机蛙跳算法SFLA对CNN参数选择过程进行优化以提高参数选择精度,构造出SFLA-CNN模型;并通过BP神经网络对SFLA-CNN和LSTM模型进行非线性组合,从而得到最终的模型预测结果。本文基于江苏省太湖区域大浦口站点不同时间段的水位和降雨量的水文序列数据进行了相关实验。实验结果表明,基于SFLA-CNN和LSTM的组合预测模型相对于其他单一模型、传统CNN-LSTM组合模型,表现出了较高的预测准确度和泛化能力,具备良好的通用性和应用前景。未来将在此基础上继续开展相关研究,制定有效的水位预测方案,为水利信息领域提供合理的科学决策。

猜你喜欢
水文青蛙水位
继往开来 守正创新——河北省水文工程地质勘查院
水文
水文水资源管理
小青蛙捉虫
水文
谁能叫醒小青蛙?
基于MFAC-PID的核电站蒸汽发生器水位控制
青蛙便签夹
骄傲的青蛙
基于PLC的水位控制系统的设计与研究