%% 基于麻雀算法优化的GRU预测算法
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;
%输入GRU的时间序列交替一个时间步
XTrain = dataTrainStandardized(1:end-1);
YTrain = dataTrainStandardized(2:end);
XTest = dataTest(1:end-1);
YTest = dataTest(2:end);
%%
%创建GRU回归网络,指定GRU层的隐含单元个数96*3
%序列预测,因此,输入一维,输出一维
numFeatures = 1;
numResponses = 1;
%% 定义麻雀优化参数
pop=5; %种群数量
Max_iteration=10; % 设定最大迭代次数
dim = 4;%维度,即GRU网路包含的隐藏单元数目,最大训练周期,初始学习率,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-GRU收敛曲线')
%训练集测试
PredictTrainSSA = predict(netSSA,XTrain, 'ExecutionEnvironment','cpu');
%测试集测试
PredictTestSSA = predict(netSSA,XTest, 'ExecutionEnvironment','cpu');
%训练集mse
mseTrainSSA= mse(YTrain-PredictTrainSSA);
%测试集mse
mseTestSSA = mse(YTest-PredictTestSSA);
%% 基础GRU测试
numHiddenUnits = 100;
layers = [ ...
sequenceInputLayer(numFeatures)
gruLayer(numHiddenUnits)
fullyConnectedLayer(numResponses)
regressionLayer];
%指定训练选项
options = trainingOptions('adam', ...
'MaxEpochs',500, ...
'ExecutionEnvironment' ,'cpu',...
'GradientThreshold',1, ...
'InitialLearnRate',0.001, ...
'L2Regularization',0.0001,...
'Verbose',0);
%训练GRU
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-GRU优化得到的最优参数为:')
disp(['SSA-GRU优化得到的隐藏单元数目为:',num2str(round(Best_pos(1)))]);
disp(['SSA-GRU优化得到的最大训练周期为:',num2str(round(Best_pos(2)))]);
disp(['SSA-GRU优化得到的InitialLearnRate为:',num2str((Best_pos(3)))]);
disp(['SSA-GRU优化得到的L2Regularization为:',num2str((Best_pos(4)))]);
disp('-------------------------------------------------------------')
disp('SSA-GRU结果:')
disp(['SSA-GRU训练集MSE:',num2str(mseTrainSSA)]);
disp(['SSA-GRU测试集MSE:',num2str(mseTestSSA)]);
disp('GRU结果:')
disp(['GRU训练集MSE:',num2str(mseTrain)]);
disp(['GRU测试集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','GRU','SSA_GRU');
title('训练集结果');
xlabel('Sample Index');
grid on;
subplot(2,2,3);
plot(errors);
hold on
plot(errorsSSA);
legend('GRU-Error','SSA-GRU-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','GRU','SSA-GRU');
title('测试集结果');
xlabel('Sample Index');
grid on;
subplot(2,2,3);
plot(errors);
hold on
plot(errorsSSA);
legend('GRU-Error','SSA-GRU-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-GRU、GRU麻雀算法优化门控循环单元时间序列预测对比(Matlab完整程序和数据)
共4个文件
m:4个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 98 浏览量
2023-04-29
14:52:27
上传
评论 1
收藏 4KB ZIP 举报
温馨提示
SSA-GRU、GRU麻雀算法优化门控循环单元时间序列预测对比(Matlab完整程序和数据) SSA-GRU、GRU麻雀算法优化门控循环单元时间序列预测对比(Matlab完整程序和数据) 运行环境2020及以上。
资源推荐
资源详情
资源评论
收起资源包目录
SSA-GRU_GRU.zip (4个子文件)
initialization.m 611B
SSA.m 3KB
main.m 4KB
fun.m 1KB
共 4 条
- 1
资源评论
前程算法屋
- 粉丝: 4256
- 资源: 712
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功