1 简介
基于经验模式分解方法和长短期记忆网络(empirical model decomposition and long short-term memory network, EMD-LSTM)模型对水位数据进行预测.先采用中值滤波对数据序列进行预处理,然后对数据序列进行EMD分解,并对EMD分解的每个特征序列使用LSTM模型进行预测,最后叠加各个序列预测值,得到最终的预测结果.以南水北调工程某河流每隔1 h的瞬时流量,流速和水深监测数据为研究对象,采用EMD-LSTM模型进行建模,试验结果表明,该模型能够实现水位,水速和瞬时流量连续12 h和6 h的准确预测,且比LSTM模型具有更高的预测精度,可为水位预判和水资源的实时调度提供决策依据.
2 部分代码
clc;clear;close all
%%
load emd_data
data=sum(u);%所有序列加起来
[x,y]=data_process(data,24);%前24个时刻 预测下一个时刻
%归一化
[xs,mappingx]=mapminmax(x',0,1);x=xs';
[ys,mappingy]=mapminmax(y',0,1);y=ys';
%划分数据
n=size(x,1);
m=round(n*0.7);%前70%训练,对最后30%进行预测
XTrain=x(1:m,:)';
XTest=x(m+1:end,:)';
YTrain=y(1:m,:)';
YTest=y(m+1:end,:)';
numFeatures = size(XTrain,1);
numResponses = 1;
numHiddenUnits = 200;
layers = [ ...
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits)
fullyConnectedLayer(numResponses)
regressionLayer];
options = trainingOptions('adam', ...
'MaxEpochs',200, ...
'GradientThreshold',1, ...
'InitialLearnRate',0.005, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',125, ...
'LearnRateDropFactor',0.2, ...
'Verbose',0);
net = trainNetwork(XTrain,YTrain,layers,options);
numTimeStepsTest = size(XTest,2);
for i = 1:numTimeStepsTest
[net,YPred(:,i)] = predictAndUpdateState(net,XTest(:,i),'ExecutionEnvironment','cpu');
end
% 反归一化
predict_value=mapminmax('reverse',YPred,mappingy);
true_value=mapminmax('reverse',YTest,mappingy);
save 结果/lstm predict_value true_value
%%
load 结果/lstm
disp('结果分析')
rmse=sqrt(mean((true_value-predict_value).^2));
disp(['根均方差(RMSE):',num2str(rmse)])
mae=mean(abs(true_value-predict_value));
disp(['平均绝对误差(MAE):',num2str(mae)])
mape=mean(abs(true_value-predict_value)/true_value);
disp(['平均相对百分误差(MAPE):',num2str(mape*100),'%'])
fprintf('\n')
figure
plot(true_value,'-*','linewidth',3)
hold on
plot(predict_value,'-s','linewidth',3)
legend('实际值','预测值')
grid on
title('LSTM')
3 仿真结果
4 参考文献
[1]王亦斌、孙涛、梁雪春、谢海洋. "基于EMD-LSTM模型的河流水量水位预测." 水利水电科技进展 40.6(2020):8.
部分理论引用网络文献,若有侵权联系博主删除。