时序预测算法TimeXer代码解析

在时序预测领域,如何有效地利用外部变量(exogenous variables)来提升内部变量(endogenous variables)的预测性能一直是一个挑战。

在上一篇文章中,我结合论文为大家解读了TimeXer框架,今天,我将对TimeXer代码进行解析。

论文精度链接: TimeXer:融合外部变量与内部变量,提升时序预测性能

TimeXer算法框架中包括模块有:Endogenous Embedding,Exogenous Embedding,Endogenous Self-Attention,Exogenous-to-Endogenous Cross-Attention。

1. Endogenous Embedding

Endogenous Embedding 通过Patch级表示精细捕捉内生变量时间变化,针对内生、外生变量嵌入粒度不同产生的信息对齐问题,引入可学习的全局令牌促进外生因果信息向内生时间Patch传递,助力预测。


class EnEmbedding(nn.Module):
	def __init__(self, n_vars, d_model, patch_len, dropout):
	    super(EnEmbedding, self).__init__()
	    # patch_len: 每个补丁的长度
	    # d_model: 嵌入维度
	    self.patch_len = patch_len
	    # 将 patch_len 维投影到 d_model 维,生成时间 token
	    self.value_embedding = nn.Linear(patch_len, d_model, bias=False)
	    # 全局可学习 token,初始化为 [1, n_vars, 1, d_model] 的随机值
	    self.glb_token = nn.Parameter(torch.randn(1, n_vars, 1, d_model))
	    # 位置嵌入,用于补充位置信息
	    self.position_embedding = PositionalEmbedding(d_model)
	    # Dropout 正则化
	    self.dropout = nn.Dropout(dropout)
	def forward(self, x):
	    # 输入维度 [B, V, L]
	    n_vars = x.shape[1]
	    # 全局令牌复制到每个 batch
	    glb = self.glb_token.repeat((x.shape[0], 1, 1, 1))
	    # 将时间序列划分为不重叠补丁 [B, V, N, patch_len]
	    x = x.unfold(dimension=-1, size=self.patch_len, step=self.patch_len)
	    # 展平为 [B*V, N, patch_len]
	    x = torch.reshape(x, (x.shape[0] * x.shape[1], x.shape[2], x.shape[3]))
	    # 通过线性投影生成时间 token [B*V, N, d_model]
	    x = self.value_embedding(x) + self.position_embedding(x)
	    # 恢复为 [B, V, N, d_model]
	    x = torch.reshape(x, (-1, n_vars, x.shape[-2], x.shape[-1]))
	    # 拼接全局令牌 [B, V, N+1, d_model]
	    x = torch.cat([x, glb], dim=2)
	    # 展平为 [B*V, N+1, d_model]
	    x = torch.reshape(x, (x.shape[0] * x.shape[1], x.shape[2], x.shape[3]))
	    # 应用 dropout
	    return self.dropout(x), n_vars

 完整文章链接: 时序预测算法TimeXer代码解析

03-08
### TimeXer简介 TimeXer是一种基于Transformer架构设计的时间序列预测工具,特别适用于包含外部变量的时间序列预测任务。该模型在保持经典Transformer结构不变的基础上,引入了特定于时间序列的改进措施[^1]。 #### 特征概述 - **双路径嵌入机制**:为了有效区分并处理内部(内生)和外部(外生)因素的影响,TimeXer实现了两种不同类型的嵌入——即`Endogenous Embedding`用于表示内在特征;`Exogenous Embedding`则负责编码外界条件的变化情况。 - **多级注意力网络**:通过集成自注意力层(`Self-Attention`)以及跨模态交互层(`Cross-Attention`),能够同时捕捉到沿时间轴发展的模式关联性及时变要素间的相互作用规律。 ```python import timexer as txr # 初始化配置参数字典 config = { 'input_size': 784, # 输入向量长度 'output_size': 10, # 输出类别数 'hidden_dim': 512, # 隐藏单元数量 } model = txr.TimeXerModel(config) # 加载预训练权重 (如果有的话) if pretrained_weights_path is not None: model.load_state_dict(torch.load(pretrained_weights_path)) ``` 此段代码展示了如何创建一个简单的TimeXer实例,并加载可能存在的预训练权重文件。需要注意的是,在实际应用中还需要根据具体场景调整输入尺寸和其他超参设置。 ### 使用指南 对于想要利用TimeXer来进行更深入研究或者项目开发的研究人员来说: - 应当熟悉Python编程环境及其常用的数据科学库; - 掌握基本的时间序列理论基础,了解ARIMA等传统方法的工作原理有助于更好地理解新旧技术之间的联系与区别; - 学习掌握PyTorch或其他支持动态计算图构建的深度学习框架将是必不可少的前提之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值