%% 多步预测
clc;
clear;
%%
data.data=xlsread('BJPM10.xlsx');
option.len_windows=20; %滑动时间窗长度
option.p_train=0.8; %训练集样本比例
option.num_D=1;
%% 滑动时间窗整理数据
%向后预测3步
Step=3;
data.data_x=[];
data.data_y=[];
for i=1:option.len_windows
data.data_x=[data.data_x,data.data(i:i+length(data.data(:,1))-option.len_windows-1,:)];
end
i=i+Step;
data.data_x(1:Step-1,:)=[];
data.data_y=(data.data(i:i+length(data.data(:,1))-option.len_windows-Step,:));
%% 归一化
[data.data_x1,data.data_x1_ps]=mapminmax(data.data_x');
data.data_x1=data.data_x1';
[data.data_y1,data.data_y1_ps]=mapminmax(data.data_y');
data.data_y1=data.data_y1';
%% 划分训练集和测试集
data.train_x=data.data_x1(1:ceil(length(data.data_x1(:,1))*option.p_train),:);
data.test_x=data.data_x1(ceil(length(data.data_x1(:,1))*option.p_train)+1:end,:);
data.train_y=data.data_y1(1:ceil(length(data.data_x1(:,1))*option.p_train),option.num_D);
data.test_y=data.data_y1(ceil(length(data.data_x1(:,1))*option.p_train)+1:end,option.num_D);
%% 实验参数
option.repeat_num=2; %重复实验10次,取平均值
%% 初始种群生成
for i=1:option.repeat_num
%% 使用神经网络进行训练
tic
net=newff(data.train_x',data.train_y',[20,20]);
[net,tr]=train(net,data.train_x',data.train_y');
result.train_y_BP=sim(net,data.train_x');
result.test_y_BP=sim(net,data.test_x');
resulttrain.train_y_BP(i,:)=result.train_y_BP';
resulttest.test_y_BP(i,:)=result.test_y_BP';
time.time1(i,1)=toc;
%% ELM神经网络预测
tic
[IW,B,LW,TF,TYPE] = elmtrain2(data.train_x',data.train_y',100,'sig',0);
result.train_y_ELM = elmpredict(data.train_x',IW,B,LW,TF,TYPE);
result.test_y_ELM= elmpredict(data.test_x',IW,B,LW,TF,TYPE);
resulttrain.train_y_ELM(i,:)=result.train_y_ELM';
resulttest.test_y_ELM(i,:)=result.test_y_ELM';
time.time2(i,:)=toc;
%% 创建变量
%% 构建LSTM网络
%重新整理训练数据
tic
for j=1:length(data.train_x(:,1))
data.train_x_LSTM{j}=data.train_x(j,:)';
data.train_y_LSTM{j}=data.train_y(j,:)';
end
for k=1:length(data.test_x(:,1))
data.test_x_LSTM{k}=data.test_x(k,:)';
data.test_y_LSTM{k}=data.test_y(k,:)';
end
numResponses = 1;
numFeatures = length(data.train_x(1,:));
numHiddenUnits = 20;
layers = [ ...
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits)
fullyConnectedLayer(numResponses)
regressionLayer];
options = trainingOptions('adam', ...
'MaxEpochs',250, ...
'GradientThreshold',1, ...
'InitialLearnRate',0.01, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',125, ...
'LearnRateDropFactor',0.1, ...
'Verbose',0);
%%
net = trainNetwork(data.train_x_LSTM,data.train_y_LSTM,layers,options);
[~,result.train_y_LSTM0 ] = predictAndUpdateState(net,data.train_x_LSTM);
[~,result.test_y_LSTM0 ] = predictAndUpdateState(net,data.test_x_LSTM);
result.train_y_LSTM=zeros(1,length(result.train_y_LSTM0));
for l=1:length(result.train_y_LSTM0)
result.train_y_LSTM(l)=result.train_y_LSTM0{l};
end
result.test_y_LSTM=zeros(1,length(result.test_y_LSTM0));
for m=1:length(result.test_y_LSTM0)
result.test_y_LSTM(m)=result.test_y_LSTM0{m};
end
resulttrain.train_y_LSTM(i,:)=result.train_y_LSTM';
resulttest.test_y_LSTM(i,:)=result.test_y_LSTM';
time.time3(i,:)=toc;
%% 基于SAE的LSTM
%SAE
tic
hiddenSize1 = 40;
autoenc1 = trainAutoencoder(data.train_x_LSTM,hiddenSize1, ...
'MaxEpochs',500, ...
'EncoderTransferFunction','satlin',...
'DecoderTransferFunction','purelin',...
'L2WeightRegularization',0.001,...
'SparsityRegularization',4,...
'SparsityProportion',0.6);
xReconstructed = predict(autoenc1,data.train_x_LSTM);
numResponses = 1;
numFeatures = length(data.train_x(1,:));
numHiddenUnits = 20;
layers = [ ...
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits)
fullyConnectedLayer(numResponses)
regressionLayer];
options = trainingOptions('adam', ...
'MaxEpochs',250, ...
'GradientThreshold',1, ...
'InitialLearnRate',0.01, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',125, ...
'LearnRateDropFactor',0.5, ...
'Verbose',0);
net = trainNetwork(xReconstructed,[data.train_y_LSTM],layers,options);
[~,result.train_y_SAE_LSTM0 ] = predictAndUpdateState(net,data.train_x_LSTM);
[~,result.test_y_SAE_LSTM0 ] = predictAndUpdateState(net,data.test_x_LSTM);
result.train_y_SAE_LSTM=zeros(1,length(result.train_y_SAE_LSTM0));
for l=1:length(result.train_y_SAE_LSTM0)
result.train_y_SAE_LSTM(l)=result.train_y_SAE_LSTM0{l};
end
result.test_y_SAE_LSTM=zeros(1,length(result.test_y_SAE_LSTM0));
for m=1:length(result.test_y_SAE_LSTM0)
result.test_y_SAE_LSTM(m)=result.test_y_SAE_LSTM0{m};
end
resulttrain.train_y_SAE_LSTM(i,:)=result.train_y_SAE_LSTM';
resulttest.test_y_SAE_LSTM(i,:)=result.test_y_SAE_LSTM';
time.time4(i,:)=toc;
%% bilstm
tic
numResponses = 1;
numFeatures = length(data.train_x(1,:));
numHiddenUnits = 20;
layers = [ ...
sequenceInputLayer(numFeatures)
bilstmLayer(numHiddenUnits)
fullyConnectedLayer(numResponses)
regressionLayer];
options = trainingOptions('adam', ...
'MaxEpochs',250, ...
'GradientThreshold',1, ...
'InitialLearnRate',0.01, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',125, ...
'LearnRateDropFactor',0.1, ...
'Verbose',0);
net = trainNetwork(data.train_x_LSTM,data.train_y_LSTM,layers,options);
[~,result.train_y_BiLSTM0 ] = predictAndUpdateState(net,data.train_x_LSTM);
[~,result.test_y_BiLSTM0 ] = predictAndUpdateState(net,data.test_x_LSTM);
result.train_y_BiLSTM=zeros(1,length(result.train_y_BiLSTM0));
for l=1:length(result.train_y_BiLSTM0)
result.train_y_BiLSTM(l)=result.train_y_BiLSTM0{l};
end
result.test_y_BiLSTM=zeros(1,length(result.test_y_BiLSTM0));
for m=1:length(result.test_y_BiLSTM0)
result.test_y_BiLSTM(m)=result.test_y_BiLSTM0{m};
end
resulttrain.train_y_BiLSTM(i,:)=result.train_y_BiLSTM';
resulttest.test_y_BiLSTM(i,:)=result.test_y_BiLSTM';
time.time5(i,:)=toc;
end
%%
time.time1=mean(time.time1);
time.time2=mean(time.time2);
time.time3=mean(time.time3);
time.time4=mean(time.time4);
time.time5=mean(time.time5);
resulttrain.train_y_BP=mean(resulttrain.train_y_BP);
resulttrain.train_y_ELM=mean(resulttrain.train_y_ELM);
resulttrain.train_y_LSTM=mean(resulttrain.train_y_LSTM);
resulttrain.train_y_BiLSTM=mean(resulttrain.train_y_BiLSTM);
resulttrain.train_y_SAE_LSTM=mean(resulttrain.train_y_SAE_LSTM);
resulttest.test_y_BP=mean(resulttest.test_y_BP);
resulttest.test_y_ELM=mean(resulttest.test_y_ELM);
resulttest.test_y_LSTM=mean(resulttest.test_y_LSTM);
resulttest.test_y_BiLSTM=mean(resulttest.test_y_BiLSTM);
resulttest.test_y_SAE_LSTM=mean(resulttest.test_y_SAE_LSTM);
data.train_y=mapminmax('reverse',data.train_y,data.data_y1_ps);
data.test_y=mapminmax('reverse',data.test_y,data.data_y1_ps);
resulttrain.train_y_BP=mapminmax('reverse',resulttrain.train_y_BP,data.data_y1_ps);
resulttrain.train_y_ELM=mapminmax('reverse',resulttrain.train_y_ELM,data.data_y1_ps);
resulttrain.train_y_LSTM=mapminmax('reverse',resulttrain.train_y_LSTM,data.data_y1_ps);
resulttrain.train_y_BiLSTM=mapminmax('reverse',resulttrain.train_y_BiLSTM,data.data_y1_ps);
resulttrain.train_y_SAE_LSTM=mapminmax('reverse',resulttrain.train_y_SAE_LSTM,data.data_y1_ps);
resulttest.test_y_BP=mapminmax('reverse',resulttest.test_y_BP,data.data_y1_ps);
resulttest.test_y_ELM=mapminmax('reverse',resulttest.test_y_ELM,data.data_y1_ps);
resulttest.test_y_LSTM=mapminmax('reverse',resulttest.test_y_LSTM,data.data_y1_ps);
resulttest.test_y_BiLSTM=mapminmax('reverse',resulttest.test_y_BiLSTM,data.data_y1_ps);
resulttest.test_y_SAE_LSTM=mapminmax('reverse',resulttest.test_y_SAE_LSTM,data.data_y1_ps);
%%
[RMSE(1),MAE(1),U1(1),U2(1)]=draw(data.train_y',resulttrain.train_y_BP,'BP训练集');
[RMSE(2),MAE(2),U1(2),U2(2)]=draw(data.train_y',r
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
CSDN海神之光上传的全部代码均可运行,亲测可用,尽我所能,为你服务; 1、代码压缩包内容 主函数:Main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,可私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开除Main.m的其他m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博主博客文章底部QQ名片; 4.1 CSDN博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 智能优化算法优化LSTM分类预测系列程序定制或科研合作方向: 4.4.1 遗传算法GA/蚁群算法ACO优化LSTM 4.4.2 粒子群算法PSO/蛙跳算法SFLA优化LSTM 4.4.3 灰狼算法GWO/狼群算法WPA优化LSTM 4.4.4 鲸鱼算法WOA/麻雀算法SSA优化LSTM 4.4.5 萤火虫算法FA/差分算法DE优化LSTM 4.4.6 其他优化算法优化LSTM
资源推荐
资源详情
资源评论
收起资源包目录
【LSTM数据预测】基于matlab BP+ELM+LSTM+BiLSTM+SAELSTM数据预测【含Matlab源码 1825期】.zip (18个子文件)
【LSTM数据预测】基于matlab BP+ELM+LSTM+BiLSTM+SAELSTM数据预测【含Matlab源码 1825期】
elmtrain2.m 2KB
运行结果10.jpg 43KB
运行结果1.jpg 45KB
运行结果6.jpg 43KB
运行结果5.jpg 48KB
main1.m 10KB
elmpredict.m 1KB
运行结果9.jpg 44KB
运行结果2.jpg 48KB
draw.m 479B
运行结果8.jpg 43KB
main2.m 10KB
运行结果11.jpg 36KB
运行结果4.jpg 48KB
运行结果7.jpg 43KB
BJPM10.xlsx 27KB
运行结果3.jpg 48KB
draw1.m 195B
共 18 条
- 1
资源评论
海神之光
- 粉丝: 3w+
- 资源: 2095
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功