clc;
clear;
close all;
%% 导入数据
load DATA; % 导入60天的负荷数据
figure(1);
plot(fuhe);
legend('电力负荷');
xlabel('时间(15min)');
ylabel('功率(Kw)');
title('60日总负荷数据');
%% 数据归一化处理
% 归一化到0-1之间
Temp = fuhe;
[~,PS] = mapminmax(fuhe,0,1);
Temp = mapminmax('apply',Temp,PS);
%% 输入输出构建及滑动时间窗输入结构构建
%数据分组
Windows = 8; %时间窗长度
T = 96; %预测未来一天(15min一次)
%各个输入集合大小
X_Train = cell(size(Temp,2)-T-Windows,1); % 训练数据
Y_Train = cell(size(Temp,2)-T-Windows,1); % 测试数据
X_Test = cell(T,1);
Y_Test = cell(T,1);
% 训练数据构建
for i = 1:size(Temp,2)-T-Windows
X_Train{i} = Temp(:,i:i+Windows-1)';
Y_Train{i} = Temp(:,i+Windows);
end
% 测试数据构建
for i = 1:T
X_Test{i} = Temp(:,end-T+i-Windows:end-T+i-1)';
Y_Test{i} = Temp(:,end-T+i);
end
%% 定义神经网络
numFeatures = Windows; % 输入特征个数(等于滑动窗口大小)
numResponses = 1; % 输出特征个数
numHiddenUnits = 80; % 隐含层神经元个数
Train_number = 120; % 训练次数
dorp_rate = 0.2; % 遗忘率(可以防止过拟合,0.1表示遗忘30%)
[layer_lstm,layer_bilstm,options] = Net_definition(numFeatures,numResponses,numHiddenUnits,Train_number,dorp_rate); %网络定义函数
%% 网络训练
net_lstm = trainNetwork(X_Train,Y_Train,layer_lstm,options);
net_bilstm = trainNetwork(X_Train,Y_Train,layer_bilstm,options);
%% 网络测试
YPred_lstm = predict(net_lstm,X_Test); %lstm预测
YPred_bilstm = predict(net_bilstm,X_Test); %bi-lstm预测
% 反归一化
True = []; Predict_lstm = []; Predict_bilstm = [];
for i = 1:T
True = [True,mapminmax('reverse',Y_Test{i},PS)];
Predict_lstm = [Predict_lstm,mapminmax('reverse',YPred_lstm{i},PS)];
Predict_bilstm = [Predict_bilstm,mapminmax('reverse',YPred_bilstm{i},PS)];
end
Predict_lstm = double(Predict_lstm);
Predict_bilstm = double(Predict_bilstm);
%% 误差分析
RMSE_lstm = sqrt(mean((True-Predict_lstm).^2));
RMSE_bilstm = sqrt(mean((True-Predict_bilstm).^2));
fprintf('LSTM的预测误差为:');
disp(RMSE_lstm);
fprintf('Bi-LSTM的预测误差为:');
disp(RMSE_bilstm);
%% 结果绘制
figure(2);
plot(True,'r-');
hold on
plot(Predict_lstm,'b-');
plot(Predict_bilstm,'g-');
hold off
legend('真实值','lstm预测','bi-lstm预测');
xlabel("时间(15min)");
ylabel("功率(Kw)");
title("一日内负荷预测情况");
figure(3)
subplot(2,1,1)
plot(True)
hold on
plot(Predict_lstm,'.-')
hold off
legend(["真实值" "LSTM预测值"])
ylabel("Cases")
title("LSTM预测误差图像")
subplot(2,1,2)
stem(True - Predict_lstm)
xlabel("时间")
ylabel("误差")
title("RMSE = " + RMSE_lstm)
figure(4)
subplot(2,1,1)
plot(True)
hold on
plot(Predict_bilstm,'.-')
hold off
legend(["真实值" "Bi-LSTM预测值"])
ylabel("Cases")
title("Bi-LSTM预测误差图像")
subplot(2,1,2)
stem(True - Predict_bilstm)
xlabel("时间")
ylabel("误差")
title("RMSE = " + RMSE_bilstm)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Matlab实现LSTM和BiLSTM时间序列预测对比(完整程序和数据) 1.输入输出单个变量; 2.考虑历史特征的影响,时间序列预测; 4.数据方便替换; 5.运行环境Matlab2018b及以上; 6.输出误差对比图。 --------------------------------------------------------------------------------------------------------------- Matlab实现LSTM和BiLSTM时间序列预测对比(完整程序和数据) 1.输入输出单个变量; 2.考虑历史特征的影响,时间序列预测; 4.数据方便替换; 5.运行环境Matlab2018b及以上; 6.输出误差对比图。
资源推荐
资源详情
资源评论
收起资源包目录
时序预测:LSTM-BiLSTM.zip (10个子文件)
LSTM对比Bi-LSTM时间序列预测
LSTM对比Bi-LSTM时间序列预测
LSTM-BiLSTM3.png 61KB
LSTM-BiLSTM2.png 49KB
LSTM-BiLSTM1.png 44KB
code.zip 28KB
LSTM-BiLSTM4.png 61KB
code
Net_definition.m 889B
DATA.mat 26KB
LSTM_vs_BiLSTM.m 3KB
LSTM-BiLSTM.png 49KB
时序预测:LSTM-BiLSTM.zip 263KB
共 10 条
- 1
资源评论
- ash4722024-01-09资源中能够借鉴的内容很多,值得学习的地方也很多,大家一起进步!
- weixin96378540012023-12-11超级好的资源,很值得参考学习,对我启发很大,支持!
- qq_459509042023-10-28终于找到了超赞的宝藏资源,果断冲冲冲,支持!
- 请你做我的眼睛2023-11-22资源中能够借鉴的内容很多,值得学习的地方也很多,大家一起进步!
- 2301_768884392024-04-14简直是宝藏资源,实用价值很高,支持!
机器学习之心
- 粉丝: 1w+
- 资源: 672
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功