%% 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));
T_train=output_train;
T_test=output_test;
%% 数据归一化
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
M=size(inputn_train,2);
N=size(inputn_test,2);
%% 创建混合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','GRU1','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')
% GRU输出
gruLayer(32,'OutputMode',"last",'Name','bil4','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);
%% 训练混合网络
% rng(0);
%% 训练模型
% 权重初始化
D = ones(1, M) / M;
%% 参数设置
K = 10; % 弱回归器个数
H = 6; % 隐藏层节点个数
%% 弱回归器回归
for i = 1 : K
%% 训练网络
net = trainNetwork(XrTrain,YrTrain, layers , options);
%% 仿真预测
t_sim1{i} = predict(net, XrTrain);
t_sim2{i} = predict(net,XrTest );
%% 数据格式转换
t_sim1{i} = double(t_sim1{i});
t_sim2{i} = double(t_sim2{i});
%% 数据反归一化
T_sim11 = mapminmax('reverse', t_sim1{i}', outputps);
T_sim22 = mapminmax('reverse', t_sim2{i}', outputps);
%% 均方根误差
error1(i,:) = T_sim11 - T_train;
%% 调整D值
weight(i) = 0;
for j = 1 : M
if abs(error1(i, j)) > 0.1
weight(i) = weight(i) + D(i, j);
D(i + 1, j) = D(i, j) * 1.1;
else
D(i + 1, j) = D(i, j);
end
end
%% 弱分类器i权重
weight(i) = 0.5 / exp(abs(weight(i)));
%% D值归一化
D(i + 1, :) = D(i + 1, :) / sum(D(i + 1, :));
end
%% 强预测器预测
weight = weight / sum(weight);
%% 强分类器分类结果
T_sim1 = zeros(M,1);
T_sim2 = zeros(N,1);
for i = 1 : K
output1 = (weight(i) * t_sim1{i});
output2 = (weight(i) * t_sim2{i});
T_sim1 = output1 + T_sim1;
T_sim2 = output2 + T_sim2;
end
%% 数据反归一化
T_sim1 = mapminmax('reverse', T_sim1', outputps);
T_sim2 = mapminmax('reverse', T_sim2', outputps);
%% 均方根误差
error1 = sqrt(sum((T_sim1 - T_train).^2) ./ M);
error2 = sqrt(sum((T_sim2 - T_test ).^2) ./ N);
%% 相关指标计算
% R2
R1 = 1 - norm(T_train - T_sim1)^2 / norm(T_train - mean(T_train))^2;
R2 = 1 - norm(T_test - T_sim2)^2 / norm(T_test - mean(T_test ))^2;
disp(['训练集数据的R2为:', num2str(R1)])
disp(['测试集数据的R2为:', num2str(R2)])
% MAE
mae1 = sum(abs(T_sim1 - T_train)) ./ M ;
mae2 = sum(abs(T_sim2 - T_test )) ./ N ;
disp(['训练集数据的MAE为:', num2str(mae1)])
disp(['测试集数据的MAE为:', num2str(mae2)])
%% 平均绝对百分比误差MAPE
MAPE1 = mean(abs((T_train - T_sim1)./T_train));
MAPE2 = mean(abs((T_test - T_sim2)./T_test));
disp(['训练集数据的MAPE为:', num2str(MAPE1)])
disp(['测试集数据的MAPE为:', num2str(MAPE2)])
% MBE
mbe1 = sum(T_sim1 - T_train) ./ M ;
mbe2 = sum(T_sim2 - T_test ) ./ N ;
disp(['训练集数据的MBE为:', num2str(mbe1)])
disp(['测试集数据的MBE为:', num2str(mbe2)])
%均方误差 MSE
mse1 = sum((T_sim1 - T_train).^2)./M;
mse2 = sum((T_sim2 - T_test).^2)./N;
disp(['训练集数据的MSE为:', num2str(mse1)])
disp(['测试集数据的MSE为:', num2str(mse2)])
[R1_Transformer,rmse1_Transformer,biaozhuncha1_Transformer,mae1_Transformer,mape1_Transformer]=calc_error(T_train,T_sim1);%训练集
[R2_Transformer,rmse2_Transformer,biaozhuncha2_Transformer,mae2_Transformer,mape2_Transformer]=calc_error(T_test,T_sim2);%测试集
%% 绘图
figure
plot(T_sim1,'-p','Color',[255 0 0]./255,'linewidth',1,'Markersize',2,'MarkerFaceColor','b')
hold on
plot(T_train,'-^','Color',[50 50 50]./255,'linewidth',1,'Markersize',2,'MarkerFaceColor','r')
legend('预测值','真实值')
xlabel('预测样本')
ylabel('预测结果')
string = {'训练集预测结果对比'; ['RMSE=' num2str(error1)]};
title(string)
xlim([1, M])
grid
ax=gca;hold on
% -------------------------------------------------------------------------
% 坐标区域修饰
ax.XLabel.FontWeight='bold';
ax.YLabel.FontWeight='bold';
% 设置轴线粗细和刻度朝外
ax.LineWidth=1;
ax.TickDir='out';
%% 训练集误差图
figure
bar((T_sim1 - T_train)./T_train)
legend('模型训练集相对误差','Location','NorthEast','FontName','楷体')
title('模型训练集相对误差','fontsize',12,'FontName','楷体')
ylabel('误差','fontsize',12,'FontName','楷体')
xlabel('样本','fontsize',12,'FontName','楷体')
xlim([1 M]);
figure
plot(T_sim2,'-p','Color',[255 0 0]./255,'linewidth',1,'Markersize',2,'MarkerFaceColor','b')
hold on
plot(T_test,'-^','Color',[50 50 50]./255,'linewidth',1,'Markersize',2,'MarkerFaceColor','r')
legend('预测值','真实值')
xlabel('预测样本')
ylabel('预测结果')
string = {'测试集预测结果对比'; ['RMSE=' num2str(error2)]};
title(string)
xlim([1, N])
grid
ax=gca;hold on
% -------------------------------------------------------------------------
% 坐标区域修饰
ax.XLabel.FontW
没有合适的资源?快使用搜索试试~ 我知道了~
【Transformer回归预测】基于EMD-Transformer实现多变量交通数据回归预测附matlab代码 (2).rar
共10个文件
png:6个
m:2个
xlsx:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 149 浏览量
2024-07-29
20:39:09
上传
评论
收藏 323KB RAR 举报
温馨提示
1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 5.作者介绍:某大厂资深算法工程师,从事Matlab算法仿真工作10年;擅长智能优化算法、神经网络预测、信号处理、元胞自动机等多种领域的算法仿真实验,更多仿真源码、数据集定制私信+。 替换数据可以直接使用,注释清楚,适合新手
资源推荐
资源详情
资源评论
收起资源包目录
【Transformer回归预测】基于EMD-Transformer实现多变量交通数据回归预测附matlab代码 (2).rar (10个子文件)
calc_error.m 2KB
3.png 21KB
main.m 9KB
1.png 23KB
main.asv 6KB
6.png 23KB
5.png 17KB
4.png 42KB
data.xlsx 115KB
2.png 85KB
共 10 条
- 1
资源评论
matlab科研助手
- 粉丝: 3w+
- 资源: 5974
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- fish-kong,Yolov5-Instance-Seg-Tensorrt-CPP.zip
- 排球场地的排球识别 yolov7标记
- 微信小程序毕业设计-基于SSM的英语学习激励系统【代码+论文+PPT】.zip
- DOTA 中的 YOLOX 损失了 KLD (定向物体检测)(Rotated BBox)基于YOLOX的旋转目标检测.zip
- caffe-yolo-9000.zip
- 11sadsadfasfsafasf
- Android 凭证交换和更新协议 - “你只需登录一次”.zip
- 2024 年 ICONIP 展会.zip
- 微信小程序毕业设计-基于SSM的电影交流小程序【代码+论文+PPT】.zip
- 微信小程序毕业设计-基于SSM的食堂线上预约点餐小程序【代码+论文+PPT】.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功