LSTM+改进的itransformer时间序列预测模型代码
代码在最后
本次设计了一个LSTM+基于差分多头注意力机制的改进的iTransformer时间序列预测模型结合了LSTM(长短期记忆网络)和改进版的iTransformer(差分多头注意力机制),具备以下优势:
-
时序特征建模能力:
- LSTM的优势:LSTM擅长捕捉时间序列中的长期依赖关系,对于周期性、趋势性变化的建模非常有效,能够处理复杂的时间序列模式,尤其是在非线性和动态变化的序列中。
- 多头注意力机制的优势:通过多头注意力机制,可以从不同的子空间并行地关注序列中的不同部分,有助于捕捉输入序列中的多尺度和多层次的依赖关系。差分注意力机制则能够进一步增强模型对序列中不同时间点间变化的敏感性。
-
增强模型的灵活性与适应性:
- 传统的iTransformer模型通过自注意力机制建模序列中的全局依赖,而引入差分多头注意力机制后,能够更加灵活地处理不同时间步之间的依赖关系,并通过差分操作提高模型对短期波动和突变的响应能力。
- 对于具有周期性波动或突发性变化的时间序列,差分操作能够有效减少长期趋势的干扰,使得模型能够专注于更加细粒度的变化。
-
减少噪声干扰:
- 传统的iTransformer模型在处理含有噪声的时间序列时,可能会因为自注意力机制对全局依赖关系的过度关注而被噪声干扰。差分多头注意力机制能够通过差分的方式抑制噪声的影响,从而提高预测的准确性。
-
多尺度学习:
- 多头注意力机制在不同的头部学习不同尺度的信息,这对于时间序列预测尤其重要,因为时间序列数据通常存在不同的时间尺度(例如日、周、月的周期性波动)。差分多头注意力能够根据数据的不同特征动态调整各个头部的关注点,从而获得多层次、多尺度的预测能力。
-
增强的预测性能:
- 结合LSTM的长短期记忆能力和差分多头注意力机制的灵活性,LSTM+差分多头注意力机制改进版的iTransformer能够更好地捕捉复杂时间序列数据中的非线性关系、周期性特征以及局部趋势变化,因此相比传统的时间序列预测模型(如LSTM或iTransformer单独使用)具有更好的预测精度和泛化能力。
1.LSTM
LSTM(Long Short-Term Memory,长短期记忆网络)是一种特殊的递归神经网络(RNN),设计用于解决标准RNN在处理长序列时的梯度消失和梯度爆炸问题。LSTM通过引入记忆单元和门控机制,可以在长时间跨度内保持和更新关键信息,从而在许多序列数据任务中表现出色。
LSTM的结构
LSTM的基本单元包括以下三个主要组件:
-
细胞状态(Cell State):
- 细胞状态是LSTM的核心部分,贯穿整个序列的数据流。它相当于一个直通通道,允许信息以最少的修改通过时间步长传播。细胞状态通过加法和乘法操作来控制信息的传递和遗忘,避免了梯度消失问题。
-
门控机制(Gates): LSTM通过三个门控来调节信息的流动:
- 遗忘门(Forget Gate):决定细胞状态中哪些信息需要被遗忘。它接受前一时间步长的隐藏状态和当前输入,通过一个Sigmoid激活函数输出一个0到1之间的值,控制信息是否被丢弃。
- 输入门(Input Gate):决定当前时间步长的新信息对细胞状态的更新程度。输入门与当前输入和前一隐藏状态结合,通过Sigmoid激活函数输出控制信号。
- 输出门(Output Gate):决定细胞状态中的哪些部分将作为隐藏状态输出,并传递到下一时间步长。输出门通过Sigmoid激活函数,结合当前输入和前一隐藏状态,生成下一步的隐藏状态。
-
隐藏状态(Hidden State):
- 隐藏状态是LSTM输出的主要内容,也是传递到下一个时间步长的信息。它包含了LSTM单元对当前时间步长输入和细胞状态的理解。
本文尝试使用傅里叶卷积改进itransformer,相结合进行时间序列的预测,作为一个创新性模型。
2.itransformer
基于Transformer模型的时序预测架构通常将同一时间步的不同变量编码成一个统一的多维temporal token,并通过注意力机制来建模不同时间步之间的时序相关性。然而,近年来线性时序预测模型重新崛起,展现出比Transformer模型更优的效果,促使人们反思当前基于Transformer的时序预测架构的一些局限性:
-
对于同一时间步的数据点,变量之间可能具有不同的物理意义,采集时间可能不一致,且尺度差异显著。将这些变量强行编码为统一的temporal token,不再区分不同的通道(channels),可能会导致多变量间的相关性被削弱,从而无法有效学习基于变量的高效表征,不适用于多变量时序预测任务。在某些数据集中,保持变量通道的独立性并考虑变量之间的互相关性是非常必要的。此外,由于变量之间存在时滞性,一个时间点的temporal token所包含的信息量有限,从这些token出发,可能不利于建模全局的时序相关性。
-
在建模时间方向上的长期依赖性时,随着历史窗口长度的增加,Transformer面临性能下降和计算量爆炸的问题。
基于这些思考,提出了一种全新的基于Transformer的时序预测架构,该架构并未改变Transformer的网络结构,而是重新定义了注意力机制和前馈网络的作用。iTransformer将不同的变量独立编码为各自的token,通过注意力机制来建模变量之间的相关性,同时通过前馈网络建模变量的时序相关性,从而获取更优的时序表征。
2.工作原理
图上部分是传统Transformer的运行机制,传统的Transformer是将同一时间戳下的各个变量赋予相同的Token值,会影响各个变量之间相关性的提取;同时当遇到时间不对齐事件时,这种方式也会引入噪声。传统的Transformer的self-attention和Embedding也会将时序信息打乱,这样也会对预测产生影响。基于此,本文提出iTransformer“倒置Transformer”,简而言之就是对时间序列采取一种“倒置视角”,将每个变量的整个时间序列独立地Embedding为一个token,并用注意力机制进行多元关联,同时利用FNN进行序列表示。
具体介绍可以看源码论文:https://arxiv.org/pdf/2310.06625
目前清华大学排列的不同任务预测效果,itransformer也排在前列,是一个相对优秀的模型。
3.差分注意力机制
原论文:https://arxiv.org/pdf/2410.05258
需要的同学可以看原论文,这里就不在详细介绍,很好理解。
Transformer 模型倾向于将注意力过多分配到与任务无关的上下文,导致注意力噪声问题。
在此工作中,作者提出了一种名为 DIFF Transformer 的新架构,使用差分注意力机制来强化对关键信息的关注,同时抑制噪声。具体而言,该机制通过计算两组独立的 Softmax 注意力分布之间的差值来实现降噪,从而促进稀疏注意力模式的形成。
实验表明,DIFF Transformer 在扩展模型规模和训练数据时的表现优于传统 Transformer,
并在长上下文建模、关键信息检索、减少幻觉(如问答和文本摘要任务中的错误生成)以及上下文学习等实际应用中表现出显著优势。
此外,该方法还能减轻模型激活值的离群问题,为量化和训练稳定性提供新的可能性。
通过更专注于相关上下文,DIFF Transformer 提高了模型的准确性和鲁棒性,
尤其是在处理长序列和复杂任务时。
核心创新:
引入了差分注意力机制,通过计算两个独立的 Softmax 注意力分布的差异来消除噪声,增强对关键信息的关注。
它确保模型将注意力集中在与任务相关的关键信息上,而不是被无关上下文干扰。
类似于降噪耳机中的差分放大器,该机制通过相减操作过滤掉公共噪声。
4.实验部分
部分实验代码
class Model(nn.Module):"""Vanilla Transformerwith O(L^2) complexityPaper link: https://proceedings.neurips.cc/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf"""def __init__(self, configs):super(Model, self).__init__()self.pred_len = configs.pred_lenself.output_attention = configs.output_attentionself.lstm = LSTM(input_size=configs.enc_in, hidden_size=configs.d_model, num_layers=3,batch_size=configs.batch_size)# Embeddingself.enc_embedding = DataEmbedding(configs.enc_in, configs.d_model, configs.embed, configs.freq,configs.dropout)# Encoderself.encoder = Encoder([EncoderLayer(AttentionLayer(FullAttention(False, configs.factor, attention_dropout=configs.dropout,output_attention=configs.output_attention), configs.d_model, configs.n_heads),configs.d_model,configs.d_ff,dropout=configs.dropout,activation=configs.activation) for l in range(configs.e_layers)],norm_layer=torch.nn.LayerNorm(configs.d_model))# Decoderself.dec_embedding = DataEmbedding(configs.dec_in, configs.d_model, configs.embed, configs.freq,configs.dropout)self.decoder = Decoder([DecoderLayer(AttentionLayer(FullAttention(True, configs.factor, attention_dropout=configs.dropout,output_attention=False),configs.d_model, configs.n_heads),AttentionLayer(FullAttention(False, configs.factor, attention_dropout=configs.dropout,output_attention=False),configs.d_model, configs.n_heads),configs.d_model,configs.d_ff,dropout=configs.dropout,activation=configs.activation,)for l in range(configs.d_layers)],norm_layer=torch.nn.LayerNorm(configs.d_model),projection=nn.Linear(configs.d_model, configs.c_out, bias=True))
数据集
数据集都可以,只要是时间序列格式,不限领域,类似功率预测,风电光伏预测,负荷预测,流量预测,浓度预测,机械领域预测等等各种时间序列直接预测。可以做验证模型,对比模型。格式类似顶刊ETTH的时间序列格式即可。
这里是时间列+7列影响特征+1列预测特征(也可以没有时间)
实验结果
这里我按照训练集80%测试集20%进行训练。
第一个是改进前的,第二个是改进后的,可以看出,效果有非常明显的提升,也证实了设计的可行性。
功能如下
1.多变量输入,单变量输出/可改多输出
2.多时间步预测,单时间步预测
3.评价指标:R方 RMSE MAE MAPE 对比图
4.数据从excel/csv文件中读取,直接替换即可。
5.结果保存到文本中,可以后续处理。
6.对比模型消融实验也准备好了,一步到位
代码带数据,注释清晰,直接一键运行即可,适合新手小白。
接运行,主页还有其他优质模型,或者需要在此基础缝合模型或者其他模型要求,直接发要求给博主就行。
6.补充
创新性非常高,保底3区以上完全够用,效果也不错。代码里也有pdf理论知识和注释方便理解,代码是在顶会源码的基础上解决了大量报错,删除多余部分并且添加功能,适合小白,注释清楚,没学过都能看懂。
继续改进:LSTM也可以改为其他创新卷积或者提取特征模块,例如可将LSTM改为TCN,CNN或者其他提取特征的方式,itransformer也可以替换为其他主预测模型,另外也可以改其他优化算法,继续提升创新。比如SSA,多元宇宙,VMd等等其他优化算法。如果需要也可以发要求私信博主。
模型预测效果优秀。结合其他模型或者其他效果都很不错。
7.源码以及详细视频讲解地址(适合小白)
代码地址:https://www.bilibili.com/video/BV1atqLY8EAz/?spm_id_from=333.999.0.0&vd_source=7dc3f07cab7883fe035e5ceef5206f80
相关文章:

LSTM+改进的itransformer时间序列预测模型代码
代码在最后 本次设计了一个LSTM基于差分多头注意力机制的改进的iTransformer时间序列预测模型结合了LSTM(长短期记忆网络)和改进版的iTransformer(差分多头注意力机制),具备以下优势: 时序特征建模能力&am…...

Apache-HertzBeat 开源监控默认口令登录
0x01 产品描述: HertzBeat(赫兹跳动) 是一个开源实时监控系统,无需Agent,性能集群,兼容Prometheus,自定义监控和状态页构建能力。HertzBeat 的强大自定义,多类型支持,高性能,易扩展,希望能帮助用户快速构建自有监控系统。0x02 漏洞描述: HertzBeat(赫兹跳动) 开源实时…...

Delete Number
翻译: 主要思路解释 整体思路概述: 本题的目标是给定整数(要删除的数字个数)和整数(以字符串形式表示的数字),通过合理删除个数字,使得最终得到的新数字最小。程序采用了一种贪心算…...

Linux常用快捷键
目录 编辑 剪切/复制/粘贴/删除等快捷键 终端及标签页快捷键 历史命令快捷键 移动光标快捷键 控制命令 剪切/复制/粘贴/删除等快捷键 快捷键 功能 ShiftCtrlC 复制 ShiftCtrlV 粘贴 CtrlInsert 复制命令行内容 ShiftInsert 粘贴命令行内容 Ctrlk 剪切&#…...
针对xpath局限的解决方案
上篇《网页数据提取利器 -- Xpath》我们对xpath的介绍中提到了xpath的几点局限性: 结构依赖性强性能动态网页支持不足 本篇是针对这些局限提出的解决方案和补充方法,以提升 XPath 的实用性和适应性。 1. 动态网页的处理 局限: XPath 无法…...

深入解析 HTML Input 元素:构建交互性表单的核心
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

ffmpeg转码与加水印
文章目录 转码 与加水印引入jar包代码ffmpeg安装错误解决方法 转码 与加水印 引入jar包 <dependency><groupId>net.bramp.ffmpeg</groupId><artifactId>ffmpeg</artifactId><version>0.6.2</version></dependency>代码 impo…...

Leetcode 104. 二叉树的最大深度(Java-深度遍历)
题目描述: 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例: 输入:root [3,9,20,null,null,15,7] 输出:3示例 2: 输入:…...
阳明心学-传习录学习总结
资料 王阳明介绍:明代杰出的思想家、军事家、教育家;自刑部主事历任贵州龙场驿丞、庐陵知县、右佥都御史、南赣巡抚、两广总督等职,接连平定南赣、两广盗乱及宸濠之乱,因功获封“新建伯”,成为明代因军功封爵的三位文…...
macOS sequoia 15.1中应用程序“程序坞”没有权限打开
在macOS sequoia 15.1版本中新安装的应用程序在访达中打开报错显示应用程序“程序坞”没有权限打开“(null)”。 解决办法 在启动台中找到终端,点击打开,切换到应用目录下,输入 cd /Applications/ 找到需要打开的应用程序目录࿰…...

使用 MinIO 和 KKFileView 实现在线文件预览功能
在项目开发中,文件的在线预览是常见的需求,尤其是对 PDF、Word、Excel 等格式的文件进行无客户端依赖的直接查看。本文将介绍如何通过 MinIO 和 KKFileView 搭建在线文件预览服务,并通过 docker-compose 一键部署。 一、环境准备 1. Docker …...
Conda-Pack打包:高效管理Python环境
在Python开发中,环境管理是一个不可忽视的重要环节。Conda是一个流行的包管理器和环境管理器,它允许用户创建隔离的环境,以避免不同项目之间的依赖冲突。Conda-pack是一个工具,可以帮助我们将一个conda环境打包成一个可移植文件&a…...
云服务器上搭建 WordPress 全流程指南
WordPress 是全球最受欢迎的开源内容管理系统(CMS),通过 WordPress,你可以轻松搭建博客、企业网站或电子商务平台。而通过云服务器搭建 WordPress,可以使网站获得更好的性能和灵活性。本文将为你提供详细的步骤&#x…...

图像超分辨率技术新进展:混合注意力聚合变换器HAAT
目录 1. 引言: 2. 混合注意力聚合变换器(HAAT): 2.1 Swin-Dense-Residual-Connected Block(SDRCB): 2.2 Hybrid Grid Attention Block(HGAB): 3. 实验结…...

文件IO——01
1. 认识文件 1)文件概念 “文件”是一个广义的概念,可以代表很多东西 操作系统里,会把很多的硬件设备和软件资源抽象成“文件”,统一管理 但是大部分情况下的文件,都是指硬盘的文件(文件相当于是对“硬…...

【opencv入门教程】5. Mat 类用法
文章选自: 一、BackGround Mat对象是一种图像数据结构,它是一个容器,存储任何通道任何数的图片数据以及对应的矩阵,使用完成后,内存自动释放。二、Code void Samples::MatFunc() {1. 图像处理// 方法1:…...

SSM虾米音乐项目2--分页查询
1.分页查询的底层逻辑 首先根据用户输入的流派,进行模糊查询根据查询的数据进行分页需要前端用户提供pageNo(当前页数)和pageSize(每页的数据量)并且要从后端计算count(总数据量)和totalPage(总页数),以及startNum(每页开始的记录)从而将对应的页面数据…...
nodejs 获取本地局域网 ip 扫描本地端口
因为傻逼老板的垃圾需求,不得不成长 示例代码: 获取本地局域网 ip 地址: 需要注意的是:如果存在虚拟机网络,则返回的是虚拟机网络的 ipv4 地址 import os from os; export const getLocalIp () > {const in…...
区块链签名种类
1. eth_sign 简介:最早实现的签名方法,用于对任意数据进行签名。签名内容:直接对原始消息的哈希值进行签名。特点: 安全性较低,因为签名的消息没有明确的上下文或结构。很容易被滥用,攻击者可以伪造签名内…...
【062B】基于51单片机无线病房呼叫系统(+时间)【Keil程序+报告+原理图】
☆、设计硬件组成:51单片机最小系统NRF24L01无线模块DS1302时钟芯片LCD1602液晶显示按键设置蜂鸣器LED灯。 1、本设计采用STC89C51/52、AT89C51/52、AT89S51/52作为主控芯片,采用LCD1602液晶显示呼叫信息,系统共有两个板子(一个接…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...