%% 基于麻雀算法优化的BiLSTM预测算法
clear;close all;
clc
rng('default')
%% 仿真数据,正弦信号
data = sin(0:1:200)';
%序列的前 90% 用于训练,后 10% 用于测试
numTimeStepsTrain = floor(0.9*numel(data));
dataTrain = data(1:numTimeStepsTrain+1)';
dataTest = data(numTimeStepsTrain+1:end)';
%数据预处理,将训练数据标准化为具有零均值和单位方差。
mu = mean(dataTrain);
sig = std(dataTrain);
dataTrainStandardized = (dataTrain - mu) / sig;
%输入BiLSTM的时间序列交替一个时间步
XTrain = dataTrainStandardized(1:end-1);
YTrain = dataTrainStandardized(2:end);
XTest = dataTest(1:end-1);
YTest = dataTest(2:end);
%%
%创建BiLSTM回归网络,指定BiLSTM层的隐含单元个数96*3
%序列预测,因此,输入一维,输出一维
numFeatures = 1;
numResponses = 1;
%% 定义麻雀优化参数
pop=5; %种群数量
Max_iteration=10; % 设定最大迭代次数
dim = 4;%维度,即BiLSTM网路包含的隐藏单元数目,最大训练周期,初始学习率,L2参数
lb = [2,2,10E-3,10E-3];%下边界
ub = [50,100,1,1];%上边界
fobj = @(x) fun(x,numFeatures,numResponses,XTrain,YTrain,XTest,YTest);
[Best_pos,Best_score,SSA_curve,netSSA]=SSA(pop,Max_iteration,lb,ub,dim,fobj); %开始优化
figure
plot(SSA_curve,'linewidth',1.5);
grid on
xlabel('迭代次数')
ylabel('适应度函数')
title('SSA-BiLSTM收敛曲线')
%训练集测试
PredictTrainSSA = predict(netSSA,XTrain, 'ExecutionEnvironment','cpu');
%测试集测试
PredictTestSSA = predict(netSSA,XTest, 'ExecutionEnvironment','cpu');
%训练集mse
mseTrainSSA= mse(YTrain-PredictTrainSSA);
%测试集mse
mseTestSSA = mse(YTest-PredictTestSSA);
%% 基础BiLSTM测试
numHiddenUnits = 100;
layers = [ ...
sequenceInputLayer(numFeatures)
bilstmLayer(numHiddenUnits)
fullyConnectedLayer(numResponses)
regressionLayer];
%指定训练选项
options = trainingOptions('adam', ...
'MaxEpochs',500, ...
'ExecutionEnvironment' ,'cpu',...
'GradientThreshold',1, ...
'InitialLearnRate',0.001, ...
'L2Regularization',0.0001,...
'Verbose',0);
%训练BiLSTM
net = trainNetwork(XTrain,YTrain,layers,options);
%训练集测试
PredictTrain = predict(net,XTrain, 'ExecutionEnvironment','cpu');
%测试集测试
PredictTest = predict(net,XTest, 'ExecutionEnvironment','cpu');
%训练集mse
mseTrain = mse(YTrain-PredictTrain);
%测试集mse
mseTest = mse(YTest-PredictTest);
disp('-------------------------------------------------------------')
disp('SSA-BiLSTM优化得到的最优参数为:')
disp(['SSA-BiLSTM优化得到的隐藏单元数目为:',num2str(round(Best_pos(1)))]);
disp(['SSA-BiLSTM优化得到的最大训练周期为:',num2str(round(Best_pos(2)))]);
disp(['SSA-BiLSTM优化得到的InitialLearnRate为:',num2str((Best_pos(3)))]);
disp(['SSA-BiLSTM优化得到的L2Regularization为:',num2str((Best_pos(4)))]);
disp('-------------------------------------------------------------')
disp('SSA-BiLSTM结果:')
disp(['SSA-BiLSTM训练集MSE:',num2str(mseTrainSSA)]);
disp(['SSA-BiLSTM测试集MSE:',num2str(mseTestSSA)]);
disp('BiLSTM结果:')
disp(['BiLSTM训练集MSE:',num2str(mseTrain)]);
disp(['BiLSTM测试集MSE:',num2str(mseTest)]);
%% 训练集结果绘图
figure
errors=YTrain-PredictTrain;
errorsSSA=YTrain-PredictTrainSSA;
MSE=mean(errors.^2);
RMSE=sqrt(MSE);
MSESSA=mean(errorsSSA.^2);
RMSESSA=sqrt(MSESSA);
error_mean=mean(errors);
error_std=std(errors);
error_meanSSA=mean(errorsSSA);
error_stdSSA=std(errorsSSA);
subplot(2,2,[1 2]);
plot(YTrain,'k');
hold on;
plot(PredictTrain,'b');
plot(PredictTrainSSA,'r');
legend('Target','BiLSTM','SSA_BiLSTM');
title('训练集结果');
xlabel('Sample Index');
grid on;
subplot(2,2,3);
plot(errors);
hold on
plot(errorsSSA);
legend('BiLSTM-Error','SSA-BiLSTM-Eoor');
title(['MSE = ' num2str(MSESSA) ', RMSE = ' num2str(RMSESSA),'MSESSAS = ']);
grid on;
subplot(2,2,4);
histfit(errorsSSA, 50);
title(['Error Mean = ' num2str(error_mean) ', Error St.D. = ' num2str(error_std)]);
%% 测试集结果绘图
figure
errors=YTest-PredictTest;
errorsSSA=YTest-PredictTestSSA;
MSE=mean(errors.^2);
RMSE=sqrt(MSE);
MSESSA=mean(errorsSSA.^2);
RMSESSA=sqrt(MSESSA);
error_mean=mean(errors);
error_std=std(errors);
error_meanSSA=mean(errorsSSA);
error_stdSSA=std(errorsSSA);
subplot(2,2,[1 2]);
plot(YTest,'k');
hold on;
plot(PredictTest,'b');
plot(PredictTestSSA,'r');
legend('Target','BiLSTM','SSA-BiLSTM');
title('测试集结果');
xlabel('Sample Index');
grid on;
subplot(2,2,3);
plot(errors);
hold on
plot(errorsSSA);
legend('BiLSTM-Error','SSA-BiLSTM-Eoor');
title(['MSE = ' num2str(MSESSA) ', RMSE = ' num2str(RMSESSA),'MSESSAS = ']);
grid on;
subplot(2,2,4);
histfit(errorsSSA, 50);
title(['Error Mean = ' num2str(error_mean) ', Error St.D. = ' num2str(error_std)]);
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
SSA-BiLSTM、BiLSTM麻雀算法优化双向长短期记忆神经网络时间序列预测对比(Matlab完整程序和数据) 运行环境2018及以上。 ------------------------------------------------------------- SSA-BiLSTM优化得到的最优参数为: SSA-BiLSTM优化得到的隐藏单元数目为:9 SSA-BiLSTM优化得到的最大训练周期为:19 SSA-BiLSTM优化得到的InitialLearnRate为:0.095122 SSA-BiLSTM优化得到的L2Regularization为:0.15231 ------------------------------------------------------------- SSA-BiLSTM结果: SSA-BiLSTM训练集MSE:0.014575 SSA-BiLSTM测试集MSE:0.033147 BiLSTM结果: BiLSTM训练集MSE:0.00040462 BiLSTM测试集MSE:0.15018
资源推荐
资源详情
资源评论
收起资源包目录
SSA-BiLSTM_BiLSTM.zip (4个子文件)
initialization.m 611B
SSA.m 3KB
main.m 5KB
fun.m 1KB
共 4 条
- 1
前程算法屋
- 粉丝: 4157
- 资源: 711
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 二叉树7-1-1.cpp
- android 9.0 原生模拟器 签名文件
- 技术面试最后反问面试官的话 校招面试非技术问题有哪些 非技术问题如何回答.png
- NB-IOT-BC26全网通模块Altium+ CADENCE +PADS三种格式(原理图SCH+PCB封装库)文件.zip
- 基于微信小程序开发的校园失物招领系统源码毕业设计(优质项目源码).zip
- 词向量是一种将自然语言中的单词转换为数值向量的技术,它能够捕捉词义和上下文信息
- nmap与masscan的简单使用
- MyBatis动态SQL.pdf
- 基于stm32单片机protues仿真的温湿度控制系统设计(仿真图、源代码)
- 词向量:自然语言处理的基石
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页