当前位置: 首页 > news >正文

SCI一区 | Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测

目录

    • SCI一区 | Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测
      • 预测效果
      • 基本介绍
      • 程序设计
      • 参考资料

预测效果

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

基本介绍

1.基于PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测,要求Matlab2023版以上,自注意力机制,一键单头注意力机制替换成多头注意力机制;
2.输入多个特征,输出单个变量,考虑历史特征的影响,多变量时间序列预测;
3.data为数据集,main.m为主程序,运行即可,所有文件放在一个文件夹;
4.命令窗口输出R2、MSE、MAE、MAPE和RMSE多指标评价;
5.优化学习率,神经元个数,注意力机制的键值, 正则化参数。

程序设计

  • 完整源码和数据获取方式私信博主回复Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测

%% %% 粒子群算法优化TCN-BiGRU-Attention,实现多变量输入单步预测
clc;
clear 
close allX = xlsread('data.xlsx');
num_samples = length(X);                            % 样本个数 
kim = 6;                      % 延时步长(kim个历史数据作为自变量)
zim =  1;                      % 跨zim个时间点进行预测
or_dim = size(X,2);%  重构数据集
for i = 1: num_samples - kim - zim + 1res(i, :) = [reshape(X(i: i + kim - 1,:), 1, kim*or_dim), X(i + kim + zim - 1,:)];
end% 训练集和测试集划分
outdim = 1;                                  % 最后一列为输出
num_size = 0.9;                              % 训练集占数据集比例
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim;                  % 输入特征维度P_train = res(1: num_train_s, 1: f_)';
T_train = res(1: num_train_s, f_ + 1: end)';
M = size(P_train, 2);P_test = res(num_train_s + 1: end, 1: f_)';
T_test = res(num_train_s + 1: end, f_ + 1: end)';
N = size(P_test, 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);%  格式转换
for i = 1 : M vp_train{i, 1} = p_train(:, i);vt_train{i, 1} = t_train(:, i);
endfor i = 1 : N vp_test{i, 1} = p_test(:, i);vt_test{i, 1} = t_test(:, i);
endoutputSize = 1;  %数据输出y的维度  
numFilters = 64;
filterSize = 5;
dropoutFactor = 0.1;
numBlocks = 2;layer = sequenceInputLayer(f_,Normalization="rescale-symmetric",Name="input");
lgraph = layerGraph(layer);     convolution1dLayer(filterSize,numFilters,DilationFactor=dilationFactor,Padding="causal")layerNormalizationLayerreluLayerdropoutLayer(dropoutFactor) additionLayer(2,Name="add_"+i)];% Add and connect layers.lgraph = addLayers(lgraph,layers);lgraph = connectLayers(lgraph,outputName,"conv1_"+i);% Skip connection.if i == 1% Include convolution in first skip connection.layer = convolution1dLayer(1,numFilters,Name="convSkip");lgraph = addLayers(lgraph,layer);lgraph = connectLayers(lgraph,outputName,"convSkip");lgraph = connectLayers(lgraph,"convSkip","add_" + i + "/in2");elselgraph = connectLayers(lgraph,outputName,"add_" + i + "/in2");end% Update layer output name.outputName = "add_" + i;
endtempLayers = flattenLayer("Name","flatten");
lgraph = addLayers(lgraph,tempLayers);tempLayers = gruLayer(NumNeurons,"Name","gru1");
lgraph = addLayers(lgraph,tempLayers);tempLayers = [FlipLayer("flip3")gruLayer(NumNeurons,"Name","gru2")];
lgraph = addLayers(lgraph,tempLayers);tempLayers = [concatenationLayer(1,2,"Name","concat")

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/128577926?spm=1001.2014.3001.5501
[2] https://blog.csdn.net/kjm13182345320/article/details/128573597?spm=1001.2014.3001.5501

相关文章:

  • Rust腐蚀怎么用服务器一键开服联机教程
  • Github 2024-05-21 开源项目日报 Top10
  • 【并发小知识】
  • Redis 中 List 数据结构详解
  • 2023、2024国赛web复现wp
  • 【vue】el-select选择器实现宽度自适应
  • Py列表(list)
  • 2024/5/28 P1247 取火柴游戏
  • 【Linux学习】进程间通信 (3) —— System V (1)
  • pygame raycasting纹理
  • 整理好了!2024年最常见 20 道 Rocket MQ面试题(一)
  • JavaScript面试 题
  • JavaScript与版本控制:编译时光机的双重奏——git仓库
  • redis基本数据结构与应用
  • 【vue-1】vue入门—创建一个vue应用
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【mysql】环境安装、服务启动、密码设置
  • 【知识碎片】第三方登录弹窗效果
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 0基础学习移动端适配
  • 2017届校招提前批面试回顾
  • Android框架之Volley
  • Java应用性能调优
  • October CMS - 快速入门 9 Images And Galleries
  • React-生命周期杂记
  • STAR法则
  • vue-cli在webpack的配置文件探究
  • Vue官网教程学习过程中值得记录的一些事情
  • vue中实现单选
  • 二维平面内的碰撞检测【一】
  • 给新手的新浪微博 SDK 集成教程【一】
  • 关于List、List?、ListObject的区别
  • 将 Measurements 和 Units 应用到物理学
  • 老板让我十分钟上手nx-admin
  • 你真的知道 == 和 equals 的区别吗?
  • 判断客户端类型,Android,iOS,PC
  • 使用common-codec进行md5加密
  • 使用权重正则化较少模型过拟合
  • 走向全栈之MongoDB的使用
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​VRRP 虚拟路由冗余协议(华为)
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (35)远程识别(又称无人机识别)(二)
  • (二)JAVA使用POI操作excel
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (一)为什么要选择C++
  • (已解决)vscode如何选择python解释器
  • ***通过什么方式***网吧
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET Core 2.1路线图