%双向长短时记忆的神经网络BiLSTM多步预测
clc;clear;
warning off;
%导入数据
data= xlsread('datatimen.xls', 'sheet1', 'B2:B116');
lag1=10;
lag2=100;
%计算数据长度
n=length(data);
u=n-lag1-lag2+1;
%%
%准备输入和输出训练数据
input_train=zeros(lag1,u);
for i=1:u
input_train(:,i)=data(i:i+lag1-1)';
end
output_train=zeros(lag2,u);
for i=1:u
output_train(:,i)=data(i+lag1:i+lag1+lag2-1)';
end
%% 归一化(全部特征 均归一化)
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
%% BiLSTM 层设置,参数设置
inputSize = size(inputn,1); %数据输入x的特征维度
outputSize = size(outputn,1); %数据输出y的维度
numhidden_units1=50;
numhidden_units2=300;
numhidden_units3=100;
%% bilstm
layers = [ ...
sequenceInputLayer(inputSize) %输入层设置
bilstmLayer(numhidden_units1,'name','hidden1') %隐藏层学习层设置(cell层)
dropoutLayer(0.2,'name','dropout_1') %隐藏层权重丢失率,防止过拟合
bilstmLayer(numhidden_units2,'Outputmode','sequence','name','hidden2')%隐藏层
dropoutLayer(0.3,'name','dropout_2') %隐藏层权重丢失率,防止过拟合
bilstmLayer(numhidden_units3,'name','hidden3') %隐藏层
dropoutLayer(0.2,'name','dropout_3') %隐藏层权重丢失率,防止过拟合
fullyConnectedLayer(outputSize) %全连接层设置(影响输出维度)(cell层出来的输出层)
regressionLayer('name','out')]; %回归层(因为预测值为连续值,所以为回归层)
%% trainoption(bilstm)
opts = trainingOptions('adam', ... %优化算法
'MaxEpochs',800, ... %遍历样本最大循环数
'GradientThreshold',1,... %梯度阈值
'ExecutionEnvironment','cpu',... %运算环境
'InitialLearnRate',0.005, ... %初始学习率
'LearnRateSchedule','piecewise', ...% 学习率计划
'LearnRateDropPeriod',160, ... %epoch后学习率更新
'LearnRateDropFactor',0.8, ... %学习率衰减速度
'Verbose',0, ... %命令控制台是否打印训练过程
'Plots','training-progress'... %打印训练进度
);
%% 网络训练
tic
net = trainNetwork(inputn,outputn,layers,opts);
% 滚动预测
toc;
[net,bn] = predictAndUpdateState(net,inputn);
outputnn=mapminmax('reverse',bn,outputps);
%% 测试数据
%导入测试数据
dat= data;
la1=10;
la2=100;
nn=length(dat);
uu=nn-la1-la2+1;
%准备测试数据
input_test=zeros(la1,uu);
for i=1:uu
input_test(:,i)=dat(i:i+la1-1)';
end
inputn_test=mapminmax('apply',input_test,inputps);
%网络测试输出
[net,yBiLSTMoutput] = predictAndUpdateState(net,inputn_test);
%网络输出反归一化
BiLSTMoutput= mapminmax('reverse',yBiLSTMoutput,outputps);
o1=BiLSTMoutput(1,1:end-1);
o2=BiLSTMoutput(:,end)';
BiLSTMoutputnew=[o1 o2];
output_test=dat(la1+1:nn)';
%% 未来预测
%输入单组数据进行网络测试
afBiLSTMoutputtest=dat(nn-la1+1:nn,1);
afBiLSTMoutputtestn=mapminmax('apply',afBiLSTMoutputtest,inputps);
%网络预测输出
[net,af] = predictAndUpdateState(net,afBiLSTMoutputtestn);
%网络输出反归一化
afBiLSTMoutput=mapminmax('reverse',af,outputps);
aaf=afBiLSTMoutput';
afBiLSTMoutnew=[o1 o2 aaf];%合并
%% 数据绘图
t0=1:n;
t1=n-nn+la1+1:n;
t2=n-nn+la1+1:n+la2;
afBiLSTMoutnew=afBiLSTMoutnew(1:end);
output_test=output_test(1:end);
figure()
plot(t1,output_test,':o','Color',[0 0 180]./255,'linewidth',0.8,'Markersize',4,'MarkerFaceColor',[0 0 180]./255);
hold on
plot(t2,afBiLSTMoutnew,'r:s','Color',[255 0 0]./255,'linewidth',0.8,'Markersize',5,'MarkerFaceColor',[255 0 0]./255)
legend('期望输出','预测输出')
title('BiLSTM网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)
h = gca;
h.FontName = '华文宋体';
h.FontSize = 12;
grid minor;
axis tight
%% 预测误差
%———————————————————————————————————————
error=BiLSTMoutputnew-output_test;
figure()
bar(error)
title('BiLSTM网络预测误差','fontsize',12)
ylabel('误差','fontsize',12)
xlabel('样本','fontsize',12)
h = gca;
h.FontName = '华文宋体';
h.FontSize = 12;
grid minor;
axis tight
%———————————————————————————————————————
figure()
percentage=(error)./output_test;
plot(percentage,'r:s','Color',[255 0 0]./255,'linewidth',0.8,'Markersize',5,'MarkerFaceColor',[255 0 0]./255);
title('BiLSTM网络预测相对误差')
ylabel('相对误差','fontsize',12)
xlabel('样本','fontsize',12)
h = gca;
h.FontName = '华文宋体';
h.FontSize = 12;
grid minor;
axis tight
%———————————————————————————————————————
E = mse(BiLSTMoutputnew - output_test);
disp('MSE')
disp(E)
rmse = sqrt(mean((error).^2));
disp('RMSE')
disp(rmse)
MAE=sum(abs(error))/n;
disp('MAE')
disp(MAE)
MAPE=sum(abs(percentage))/n;
disp('MAPE')
disp(MAPE)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
时序预测 | MATLAB实现BiLSTM时间序列未来多步预测(完整源码和数据) 数据为一维时序列数据,运行环境MATLAB2018b及以上,可以实现未来100个值的预测。
资源推荐
资源详情
资源评论
收起资源包目录
时间序列BiLSTM多步.zip (7个子文件)
BiLSTMTSN1.png 73KB
BiLSTMTSN2.png 23KB
BiLSTMTSN4.png 148KB
datatimen.xls 39KB
BiLSTMTSN3.png 33KB
=BiLSTM时间序列多步预测结果.docx 292KB
BiLSTMTIMEN.m 5KB
共 7 条
- 1
机器学习之心
- 粉丝: 1w+
- 资源: 659
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页