%% GRU多变量回归预测 海神之光
%% 加载数据与数据集划分
clc;clear;close all
data = xlsread('data.xlsx', 'Sheet1', 'A3:M1250');
% 输入数据
input =data(:,1:12)';
output=data(:,13)';
nwhole =size(data,1);
% 打乱数据集
% temp=randperm(nwhole);
% 不打乱数据集
temp=1:nwhole;
train_ratio=0.9;
ntrain=round(nwhole*train_ratio);
ntest =nwhole-ntrain;
% 准备输入和输出训练数据
input_train =input(:,temp(1:ntrain));
output_train=output(:,temp(1:ntrain));
% 准备测试数据
input_test =input(:, temp(ntrain+1:ntrain+ntest));
output_test=output(:,temp(ntrain+1:ntrain+ntest));
%% 数据归一化
method=@mapminmax;
[inputn_train,inputps]=method(input_train);
inputn_test=method('apply',input_test,inputps);
[outputn_train,outputps]=method(output_train);
outputn_test=method('apply',output_test,outputps);
% 创建元胞或向量,长度为训练集大小;
XrTrain = cell(size(inputn_train,2),1);
YrTrain = zeros(size(outputn_train,2),1);
for i=1:size(inputn_train,2)
XrTrain{i,1} = inputn_train(:,i);
YrTrain(i,1) = outputn_train(:,i);
end
% 创建元胞或向量,长度为测试集大小;
XrTest = cell(size(inputn_test,2),1);
YrTest = zeros(size(outputn_test,2),1);
for i=1:size(input_test,2)
XrTest{i,1} = inputn_test(:,i);
YrTest(i,1) = outputn_test(:,i);
end
%% 创建混合GRU网络架构
% 输入特征维度
numFeatures = size(inputn_train,1);
% 输出特征维度
numResponses = 1;
FiltZise = 10;
% 创建"-GRU"模型
layers = [...
% 输入特征
sequenceInputLayer([numFeatures 1 1],'Name','input')
sequenceFoldingLayer('Name','fold')
% 特征提取
% convolution2dLayer([FiltZise 1],32,'Padding','same','WeightsInitializer','he','Name','conv','DilationFactor',1);
% batchNormalizationLayer('Name','bn')
% eluLayer('Name','elu')
% averagePooling2dLayer(1,'Stride',FiltZise,'Name','pool1')
% 展开层
sequenceUnfoldingLayer('Name','unfold')
% 平滑层
flattenLayer('Name','flatten')
% GRU特征学习
gruLayer(128,'Name','BiGRU1','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')
% GRU输出
gruLayer(32,'OutputMode',"last",'Name','bil4','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')
% GRU特征学习
gruLayer(128,'Name','BiGRU2','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')
% GRU输出
gruLayer(32,'OutputMode',"last",'Name','bil2','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')
dropoutLayer(0.25,'Name','drop3')
% 全连接层
fullyConnectedLayer(numResponses,'Name','fc')
regressionLayer('Name','output') ];
layers = layerGraph(layers);
layers = connectLayers(layers,'fold/miniBatchSize','unfold/miniBatchSize');
%%GRU训练选项
% 批处理样本
MiniBatchSize =24;
% 最大迭代次数
MaxEpochs = 60;
% 学习率
learningrate = 0.005;
% 一些参数调整
if gpuDeviceCount>0
mydevice = 'gpu';
else
mydevice = 'cpu';
end
options = trainingOptions( 'adam', ...
'MaxEpochs',100, ...
'GradientThreshold',1, ...
'InitialLearnRate',learningrate, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',20, ...
'LearnRateDropFactor',0.8, ...
'L2Regularization',1e-3,...
'Verbose',false, ...
'ExecutionEnvironment',mydevice,...
'Plots','training-progress');
%% 训练混合网络
% rng(0);
% 训练
net = trainNetwork(XrTrain,YrTrain,layers,options);
% 预测
YPredtrain = predict(net,XrTrain,"ExecutionEnvironment",mydevice,"MiniBatchSize",numFeatures);
% 结果
YPredtrain =double(YPredtrain');
% 反归一化
GRUoutput_train=method('reverse',YPredtrain,outputps);
GRUoutput_train=double(GRUoutput_train);
% 预测
YPredtest = predict(net,XrTest,"ExecutionEnvironment",mydevice,"MiniBatchSize",numFeatures);
% 结果
YPredtest =double(YPredtest');
% 反归一化
GRUoutput_test=method('reverse',YPredtest,outputps);
GRUoutput_test=double(GRUoutput_test);
%% 测试集误差评价
GRUerror_test=GRUoutput_test'-output_test';
GRUpererror_test=GRUerror_test./output_test';
% RMSE
RMSEtest = sqrt(sumsqr(GRUerror_test)/length(output_test));
% MAPE
MAPEtest = mean(abs(GRUpererror_test));
disp("——————BiGRU网络模型测试数据——————————")
disp(" 预测值 真实值 误差 ")
disp([GRUoutput_test' output_test' GRUerror_test])
%--------------------------------------------------------------------------
disp('BiGRU测试平均绝对误差百分比MAPE');
disp(MAPEtest)
disp('BiGRU测试均方根误差RMSE')
disp(RMSEtest)
%--------------------------------------------------------------------------
%% 数据可视化
figure()
plot(GRUoutput_test,'ro-','linewidth',2)
hold on
plot(output_test,'bs-','linewidth',2)
legend( '测试数据','实际数据','Location','NorthWest','FontName','黑体');
title('BiGRU模型测试结果及真实值','fontsize',12,'FontName','黑体')
xlabel('样本','fontsize',12,'FontName','黑体');
ylabel('数值','fontsize',12,'FontName','黑体');
xlim([1 ntest]);
%-------------------------------------------------------------------------------------
figure()
plot(GRUerror_test,'ro-','Color',[1 0 0]./255,'linewidth',2)
legend('BiGRU模型测试误差','Location','NorthEast','FontName','黑体')
title('BiGRU模型测试误差','fontsize',12,'FontName','黑体')
ylabel('误差','fontsize',12,'FontName','黑体')
xlabel('样本','fontsize',12,'FontName','黑体')
xlim([1 ntest]);
%-------------------------------------------------------------------------------------
figure()
plot(GRUpererror_test,'bs-','Color',[128 110 255]./255,'linewidth',2)
legend('BiGRU模型测试相对误差','Location','NorthEast','FontName','黑体')
title('BiGRU模型测试相对误差','fontsize',12,'FontName','黑体')
ylabel('误差','fontsize',12,'FontName','黑体')
xlabel('样本','fontsize',12,'FontName','黑体')
xlim([1 ntest]);
没有合适的资源?快使用搜索试试~ 我知道了~
【GRU回归预测】基于matlab双向门控循环单元GRU数据预测(多输入单输出)【含Matlab源码 3248期】.zip
共5个文件
png:3个
xlsx:1个
m:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 189 浏览量
2023-10-18
19:11:52
上传
评论
收藏 247KB ZIP 举报
温馨提示
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 科研合作 智能优化算法优化GRU门控循环单元分类预测系列程序定制或科研合作方向: 4.4.1 遗传算法GA/蚁群算法ACO优化GRU 4.4.2 粒子群算法PSO/蛙跳算法SFLA优化GRU 4.4.3 灰狼算法GWO/狼群算法WPA优化GRU 4.4.4 鲸鱼算法WOA/麻雀算法SSA优化GRU 4.4.5 萤火虫算法FA/差分算法DE优化GRU
资源推荐
资源详情
资源评论
收起资源包目录
【GRU回归预测】基于matlab双向门控循环单元GRU数据预测(多输入单输出)【含Matlab源码 3248期】.zip (5个子文件)
【GRU回归预测】基于matlab双向门控循环单元GRU数据预测(多输入单输出)【含Matlab源码 3248期】
3.png 37KB
main.m 6KB
1.png 53KB
data.xlsx 115KB
2.png 44KB
共 5 条
- 1
资源评论
海神之光
- 粉丝: 5w+
- 资源: 6110
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功