clc;
clear all;
close all
warning off
addpath pathA
%% 导入数据
% 训练集——190个样本
P_train = xlsread('data','training set','B2:G191')'; T_train= xlsread('data','training set','H2:H191')';
% 测试集——44个样本
P_test=xlsread('data','test set','B2:G45')';T_test=xlsread('data','test set','H2:H45')';
N = size(P_test, 2); % 测试集样本数
M = size(P_train, 2); % 训练集样本数
%% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
%% 利用优化得到的参数重新训练
rng(0)
numFeatures = size(p_train,1);%输入节点数
numResponses = size(t_train,1);%输出节点数
miniBatchSize = 128; %单次训练样本数
numHiddenUnits1 = 20; %第一层隐藏层节点数
numHiddenUnits2 = 20; %第二层隐藏层节点数
maxEpochs=50; %最大迭代数
learning_rate=0.1; %学习率
layers = [ ...
sequenceInputLayer(numFeatures)
gruLayer(numHiddenUnits1)
gruLayer(numHiddenUnits2)
fullyConnectedLayer(numResponses)
regressionLayer];
options = trainingOptions('adam', ... %训练函数
'MaxEpochs',maxEpochs, ... %最大迭代书
'MiniBatchSize',miniBatchSize, ... %单次训练样本数
'InitialLearnRate',learning_rate, ... %学习率
'GradientThreshold',1, ...
'Shuffle','every-epoch', ...
'Verbose',true,...
'Plots','training-progress');
net = trainNetwork(p_train,t_train,layers,options);
% 预测
t_sim2= double(predict(net,p_test,'MiniBatchSize',1));
t_sim1= double(predict(net,p_train,'MiniBatchSize',1));
%% 数据反归一化
T_sim1 = mapminmax('reverse', t_sim1, ps_output);
T_sim2 = mapminmax('reverse', t_sim2, ps_output);
%% 均方根误差
error1 = sqrt(sum((T_sim1 - T_train).^2) ./ M);
error2 = sqrt(sum((T_sim2 - T_test ).^2) ./ N);
%% 绘图
figure
plot(1: M, T_train, 'r-^', 'LineWidth', 1,'MarkerFaceColor', 'r','MarkerSize', 4);
hold on
plot(1: M, T_sim1, 'b-o', 'LineWidth', 1,'MarkerFaceColor', 'b','MarkerSize', 4);
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'训练集预测结果对比'; ['RMSE=' num2str(error1)]};
title(string)
xlim([1, M])
grid off
figure
plot(1: N, T_test, 'r-^', 'LineWidth', 1,'MarkerFaceColor', 'r','MarkerSize', 4);
hold on
plot(1: N, T_sim2, 'b-o', 'LineWidth', 1,'MarkerFaceColor', 'b','MarkerSize', 4);
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'测试集预测结果对比';['RMSE=' num2str(error2)]};
title(string)
xlim([1, N])
grid off
%% 误差图
figure
[AX,H1,H2]=plotyy(1:N,(T_sim2-T_test),1:N,(T_sim2-T_test)./T_test,'plot')%plot函数图像
set(AX(1),'XColor','k','YColor','b');%设置左边y轴
set(AX(2),'XColor','k','Ycolor','r');%设置右边y轴
xlabel('测试集样本编号'); %设置右边y轴
HH1=get(AX(1),'Ylabel');
set(HH1,'String','绝对误差');%设置左边y坐标轴标题
set(HH1,'color','b');%设置左边y坐标轴图样颜色为‘b’,蓝色
HH2=get(AX(2),'Ylabel');
set(HH2,'String','相对误差');%设置右边y坐标轴标题
set(HH2,'color','r');%设置右边y坐标轴图样颜色为‘r’红色
set(H1,'LineStyle','-','marker','o', 'LineWidth', 1,'MarkerFaceColor', 'b','MarkerSize', 4);%设置函数y1的线形状
set(H1,'color','b');%设置函数y1的线颜色
set(H2,'LineStyle',':','marker','^', 'LineWidth', 1,'MarkerFaceColor', 'r','MarkerSize', 4);%设置函数y2的线形状
set(H2,'color','r');%设置函数y2的线颜色
set(gca, 'FontSize', 10);
figure
[AX,H1,H2]=plotyy(1:M,(T_sim1-T_train),1:M,(T_sim1-T_train)./T_train,'plot');%plot函数图像
set(AX(1),'XColor','k','YColor','b');%设置左边y轴
set(AX(2),'XColor','k','Ycolor','r');%设置右边y轴
xlabel('训练集样本编号'); %设置右边y轴
HH1=get(AX(1),'Ylabel');
set(HH1,'String','绝对误差');%设置左边y坐标轴标题
set(HH1,'color','b');%设置左边y坐标轴图样颜色为‘b’,蓝色
HH2=get(AX(2),'Ylabel');
set(HH2,'String','相对误差');%设置右边y坐标轴标题
set(HH2,'color','r');%设置右边y坐标轴图样颜色为‘r’红色
set(H1,'LineStyle','-','marker','o', 'LineWidth', 1,'MarkerFaceColor', 'b','MarkerSize', 4);%设置函数y1的线形状
set(H1,'color','b');%设置函数y1的线颜色
set(H2,'LineStyle',':','marker','^', 'LineWidth', 1,'MarkerFaceColor', 'r','MarkerSize', 4);%设置函数y2的线形状
set(H2,'color','r');%设置函数y2的线颜色
set(gca, 'FontSize', 10);
%% 测试集结果
figure;
plotregression(T_test,T_sim2,['回归图']);
figure;
ploterrhist(T_test-T_sim2,['误差直方图']);
%% 相关指标计算
disp(['训练集数据误差:'])
[mae_train,mse_train,rmse_train,mape_train,error_train,errorPercent_train,R_train]=calc_error(T_train,T_sim1); %
disp(['测试集数据误差:'])
[mae_test,mse_test,rmse_test,mape_test,error_test,errorPercent_test,R_test]=calc_error(T_test,T_sim2); %
没有合适的资源?快使用搜索试试~ 我知道了~
免费GRU基于门控循环单元的回归预测 Matlab源代码 替换Excel直接运行 适合新手小白
共3个文件
m:2个
xlsx:1个
需积分: 0 31 下载量 162 浏览量
2023-05-23
22:56:30
上传
评论 4
收藏 34KB RAR 举报
温馨提示
1. Matlab实现基于门控循环单元的数据回归预测(完整源码和数据) 2. 多变量输入,单变量输出,数据回归预测 3. 评价指标包括:R2、MAE、MSE、RMSE 4. 包括拟合效果图、预测误差图、预测结果图等等 5. Excel数据,暂无版本限制,推荐2018B及以上版本 6. 其他代码连接:https://docs.qq.com/sheet/DT1hWRkpoVVJ3TGZv?tab=BB08J2
资源推荐
资源详情
资源评论
收起资源包目录
GRU.rar (3个子文件)
GRU
calc_error.m 2KB
main.m 5KB
data.xlsx 36KB
共 3 条
- 1
资源评论
Terwy
- 粉丝: 33
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功