%%
clc;clear;
warning off;
%% 导入数据
%%
data = xlsread('mata.xlsx', 'Sheet1', 'A3:M1250');
% 输入数据
input =data(:,1:12)';
output=data(:,13)';
nwhole =size(data,1);
train_ratio=0.9;
ntrain=round(nwhole*train_ratio);
ntest =nwhole-ntrain;
% 准备输入和输出训练数据
input_train =input(:,1:ntrain);
output_train=output(:,1:ntrain);
% 准备测试数据
input_test =input(:, ntrain+1:ntrain+ntest);
output_test=output(:,ntrain+1:ntrain+ntest);
%% 归一化(全部特征 均归一化)
[inputn_train,inputps] =mapminmax(input_train);
[outputn_train,outputps]=mapminmax(output_train);
inputn_test =mapminmax('apply',input_test,inputps);
outputn_test=mapminmax('apply',output_test,outputps);
%% GRU 层设置,参数设置
inputSize = size(inputn_train,1); %数据输入x的特征维度
outputSize = size(outputn_train,1); %数据输出y的维度
numhidden_units1=60;
numhidden_units2=180;
numhidden_units3=60;
%% gru
layers = [ ...
sequenceInputLayer(inputSize) %输入层设置
gruLayer(numhidden_units1,'name','hidden1') %学习层设置(cell层)
dropoutLayer(0.2,'name','dropout_1')
gruLayer(numhidden_units2,'Outputmode','sequence','name','hidden2')
dropoutLayer(0.3,'name','dropout_2')
gruLayer(numhidden_units3,'name','hidden3')
dropoutLayer(0.2,'name','dropout_3')
fullyConnectedLayer(outputSize) % 全连接层设置(影响输出维度)
regressionLayer('name','out')];
%% trainoption(gru)
opts = trainingOptions('adam', ...
'MaxEpochs',200, ...
'GradientThreshold',1,...
'ExecutionEnvironment','cpu',...
'InitialLearnRate',0.005, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',100, ... % epoch后学习率更新
'LearnRateDropFactor',0.8, ...
'Verbose',0, ...
'Plots','training-progress'...
);
%% GRU网络训练
tic
GRUnet = trainNetwork(inputn_train ,outputn_train ,layers,opts);
toc;
[GRUnet,GRUoutputr_train]= predictAndUpdateState(GRUnet,inputn_train);
GRUoutput_train = mapminmax('reverse',GRUoutputr_train,outputps);
%% GRU测试数据
%%
%网络测试输出
[GRUnet,GRUoutputr_test] = predictAndUpdateState(GRUnet,inputn_test);
%网络输出反归一化
GRUoutput_test= mapminmax('reverse',GRUoutputr_test,outputps);
%% GRU数据输出
%%
%-------------------------------------------------------------------------------------
error_test=GRUoutput_test'-output_test';
pererror_test=error_test./output_test';
error=error_test';
pererror=pererror_test';
avererror=sum(abs(error))/(ntest);
averpererror=sum(abs(pererror))/(ntest);
RMSE = sqrt(mean((error).^2));
disp('GRU网络预测绝对平均误差MAE');
disp(avererror);
disp('GRU网络预测平均绝对误差百分比MAPE');
disp(averpererror)
disp('GRU网络预测均方根误差RMSE')
disp(RMSE)
%% GRU数据可视化分析
%测试数据
figure()
plot(GRUoutput_test,'m-.','linewidth',1.5)
hold on
plot(output_test,'k--','linewidth',1)
legend( '预测测试数据','实际分析数据','Location','NorthWest','FontName','宋体');
title('GRU网络模型结果及真实值','fontsize',12,'FontName','宋体')
xlabel('时间','fontsize',12,'FontName','宋体');
ylabel('数值','fontsize',12,'FontName','宋体');
%-------------------------------------------------------------------------------------
figure()
stairs(pererror_test,'-.','Color',[255 50 0]./255,'linewidth',1.5)
legend('GRU网络测试相对误差','Location','NorthEast','FontName','宋体')
title('GRU网络预测相对误差','fontsize',12,'FontName','宋体')
ylabel('误差','fontsize',12,'FontName','宋体')
xlabel('样本','fontsize',12,'FontName','宋体')
%-------------------------------------------------------------------------------------
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
多元回归GRU.zip (5个子文件)
GRUNN.m 4KB
GRUNN1.png 46KB
mata.xlsx 115KB
GRUNN2.png 27KB
=GRU多输入单输出预测结果.docx 195KB
共 5 条
- 1
资源评论
- zyj4201772023-09-18果断支持这个资源,资源解决了当前遇到的问题,给了新的灵感,感谢分享~
- weixin_435392712022-06-07用户下载后在一定时间内未进行评价,系统默认好评。
- o_O7832022-06-29用户下载后在一定时间内未进行评价,系统默认好评。
- 差不多的杜先生2023-03-10简直是宝藏资源,实用价值很高,支持!
- 2301_792720662023-10-15超级好的资源,很值得参考学习,对我启发很大,支持!
机器学习之心
- 粉丝: 1w+
- 资源: 698
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功