clear
clc
close all
%% 数据预处理
% 数据读取
data = xlsread('数据1.xlsx','B:B');
figure;
plot(data);
title('原始序列');
ylabel('数据');
xlabel('样本数');
set(gcf,'color','w')
% 时间窗口划分
f_ = 10;
data_trans=add_timestep(data,f_);
input=data_trans(:,1:end-1);
output=data_trans(:,end);
% 数据集划分
m=round(size(data_trans,1)*0.7);
P_train=input(1:m,:)';
T_train=output(1:m,:)';
P_test=input(m+1:end,:)';
T_test=output(m+1:end,:)';
N = size(P_test, 2); % 测试集样本数
M = size(P_train, 2); % 训练集样本数
outdim= 1; % 输出的维度
% 数据归一化
[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);
% 数据平铺
P_train = double(reshape(P_train, f_, 1, M));
P_test = double(reshape(P_test , f_, 1, N));
t_train = t_train';
t_test = t_test' ;
% 数据格式转换
for ii = 1 : M
p_train{ii, 1} = P_train(:, 1, ii);
end
for ii = 1 : N
p_test{ii, 1} = P_test( :, 1, ii);
end
%% 构建网络并训练
% 网络构建
numChannels = 1;
maxPosition = 256;
numHeads = 8;
numKeyChannels = numHeads*32;
layers = [
sequenceInputLayer(10,Name="input")
convolution1dLayer(3,32, Name="Conv1_1", Padding="causal")
reluLayer
positionEmbeddingLayer(numChannels,maxPosition,Name="pos-emb");
additionLayer(2, Name="add")
selfAttentionLayer(numHeads,numKeyChannels,'AttentionMask','causal')
selfAttentionLayer(numHeads,numKeyChannels)
indexing1dLayer("last")
fullyConnectedLayer(1)
regressionLayer];
lgraph = layerGraph(layers);
lgraph = connectLayers(lgraph,"relu","add/in2");
% 参数设置
maxEpochs = 100;
miniBatchSize = 64;
learningRate = 0.001;
solver = 'adam';
shuffle = 'every-epoch';
gradientThreshold = 10;
executionEnvironment = "auto"; % chooses local GPU if available, otherwise CPU
options = trainingOptions(solver, ...
'Plots','training-progress', ...
'MaxEpochs', maxEpochs, ...
'MiniBatchSize', miniBatchSize, ...
'Shuffle', shuffle, ...
'InitialLearnRate', learningRate, ...
'GradientThreshold', gradientThreshold, ...
'ExecutionEnvironment', executionEnvironment);
% 开始训练
net = trainNetwork(p_train, t_train, lgraph, options);
% 数据预测
t_sim1 = predict(net, p_train);
t_sim2 = predict(net, p_test);
% 数据反归一化
T_sim1_imf_temp = mapminmax('reverse', t_sim1, ps_output);
T_sim2_imf_temp = mapminmax('reverse', t_sim2, ps_output);
% 数据格式转换
T_sim1 = double(T_sim1_imf_temp');
T_sim2 = double(T_sim2_imf_temp');
% 划分训练集测试集以供对比
data_trans=add_timestep(data,f_);
input=data_trans(:,1:end-1);
output=data_trans(:,end);
m=round(size(data_trans,1)*0.7);
P_train=input(1:m,:)';
T_train=output(1:m,:)';
P_test=input(m+1:end,:)';
T_test=output(m+1:end,:)';
%% 效果评估
figure
plot(1: M, T_train, 'r-', 1: M, T_sim1, 'g-*', 'LineWidth', 1)
legend('真实值','预测值')
xlabel('样本数')
ylabel('数据')
title('训练集预测结果对比')
xlim([1, M])
grid off
set(gcf,'color','w')
figure
plot(1: N, T_test, 'r-', 1: N, T_sim2, 'g-*', 'LineWidth', 1.2)
legend('真实值','预测值')
xlabel('样本数')
ylabel('数据')
title('测试集预测结果对比')
xlim([1, N])
grid off
set(gcf,'color','w')
% 测试集结果
figure;
plotregression(T_test,T_sim2,'回归图');
set(gcf,'color','w')
% 相关指标计算
disp('transformer训练集数据误差:')
[mae_train,mse_train,rmse_train,mape_train,error_train,errorPercent_train,R_train]=cal_metrics(T_train,T_sim1);
disp('transformer测试集数据误差:')
[mae_test,mse_test,rmse_test,mape_test,error_test,errorPercent_test,R_test]=cal_metrics(T_test,T_sim2);
没有合适的资源?快使用搜索试试~ 我知道了~
【Transformer时间序列预测】基于matlab CNN-transformer单变量时间序列预测【含Matlab源码 9...
共4个文件
m:3个
xlsx:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 39 浏览量
2024-12-18
15:47:57
上传
评论
收藏 23KB 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 科研合作
资源推荐
资源详情
资源评论
收起资源包目录
【Transformer时间序列预测】基于matlab CNN-transformer单变量时间序列预测【含Matlab源码 9888期】.zip (4个子文件)
【Transformer时间序列预测】基于matlab CNN-transformer单变量时间序列预测【含Matlab源码 9888期】
cal_metrics.m 2KB
main.m 4KB
数据1.xlsx 20KB
add_timestep.m 147B
共 4 条
- 1
资源评论
海神之光
- 粉丝: 5w+
- 资源: 6477
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功