如何利用Transformer建立时间序列预测模型

本文涉及的产品
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 如何利用Transformer建立时间序列预测模型

我最近读了一篇非常有趣的论文,叫做 Deep Transformer Models for Time Series Forecasting: The Influenza Prevalence Case。我认为这可能是一个有趣的项目,他的实现是从头开始的,并且可以帮助你了解更多关于时间序列预测。

预测的任务

在时间序列预测中,目标是预测给定历史值的时间序列的未来值。时间序列预测任务的一些例子是:

预测流感流行病例:时间序列预测的深度变形模型:流感流行病例

能源生产预测:能源消耗预测使用堆叠非参数贝叶斯方法

天气预报:MetNet:一个用于降水预报的神经天气模型

例如,我们可以将一个城市的能源消耗指标存储几个月,然后训练一个模型,该模型将能够预测该城市未来的能源消耗。这可以用来估计能源需求,因此能源公司可以使用这个模型来估计任何给定时间需要生产的能源的最佳值。

640.png

模型

我们将使用的模型是一个编码器-解码器的Transformer,其中编码器部分将时间序列的历史作为输入,而解码器部分以自回归的方式预测未来的值。

解码器使用注意力机制与编码器连接。通过这种方式,解码器可以学习在做出预测之前“关注”时间序列历史值中最有用的部分。

解码器使用了掩蔽的自注意力,这样网络就不会在训练期间获取未来的值,不会导致信息的泄露。

编码器:

640.png

解码器:

640.png

全部模型:

640.png

这个架构可以通过以下方式使用PyTorch构建:

encoder_layer=nn.TransformerEncoderLayer(
d_model=channels,
nhead=8,
dropout=self.dropout,
dim_feedforward=4*channels,
)
decoder_layer=nn.TransformerDecoderLayer(
d_model=channels,
nhead=8,
dropout=self.dropout,
dim_feedforward=4*channels,
)
self.encoder=torch.nn.TransformerEncoder(encoder_layer, num_layers=8)
self.decoder=torch.nn.TransformerDecoder(decoder_layer, num_layers=8)

数据

每当我实现一种新方法时,我喜欢首先在合成数据上尝试它,以便更容易理解和调试。这降低了数据的复杂性,并将重点更多地放在实现/算法上。

我编写了一个小脚本,可以生成具有不同周期、偏移量和模式的时间序列。

defgenerate_time_series(dataframe):
clip_val=random.uniform(0.3, 1)
period=random.choice(periods)
phase=random.randint(-1000, 1000)
dataframe["views"] =dataframe.apply(
lambdax: np.clip(
np.cos(x["index"] *2*np.pi/period+phase), -clip_val, clip_val      )
*x["amplitude"]
+x["offset"],
axis=1,
  ) +np.random.normal(
0, dataframe["amplitude"].abs().max() /10, size=(dataframe.shape[0],)
  )
returndataframe

640.png

640.png

640.png

640.png

然后,该模型将一次性对所有这些时间序列进行训练:

640.png

结果

我们现在使用这个模型来预测这些时间序列的未来值。但是结果有些复杂:

预测未拟合的样例

640.png

640.png

拟合样例:

640.png

640.png

640.png

640.png

结果并不像我预期的那么好,特别是考虑到对合成数据做出好的预测通常很容易,但它们仍然令人鼓舞。

模型的预测有些不一致,对一些坏例子的振幅有轻微的过高估计。在好的例子中,预测与地面事实非常吻合,排除了噪声。

我可能需要调试我的代码多一点,并在我可以预期获得更好的结果之前优化超参数的工作。

总结

Transformers是目前在机器学习应用中非常流行的模型,所以它们将被用于时间序列预测是很自然的。但是Transformers应该不是你在处理时间序列时的第一个首选方法,但是可以做为尝试来进行测试。

本文代码:https://github.com/CVxTz/time_series_forecasting

目录
相关文章
|
6月前
|
机器学习/深度学习 资源调度
【机器学习】归一化目的分析
【1月更文挑战第27天】【机器学习】归一化目的分析
LSTM+Transformer混合模型时间序列预测实战教学
LSTM+Transformer混合模型时间序列预测实战教学
662 0
|
1月前
|
机器学习/深度学习 数据采集 存储
时间序列预测新突破:深入解析循环神经网络(RNN)在金融数据分析中的应用
【10月更文挑战第7天】时间序列预测是数据科学领域的一个重要课题,特别是在金融行业中。准确的时间序列预测能够帮助投资者做出更明智的决策,比如股票价格预测、汇率变动预测等。近年来,随着深度学习技术的发展,尤其是循环神经网络(Recurrent Neural Networks, RNNs)及其变体如长短期记忆网络(LSTM)和门控循环单元(GRU),在处理时间序列数据方面展现出了巨大的潜力。本文将探讨RNN的基本概念,并通过具体的代码示例展示如何使用这些模型来进行金融数据分析。
221 2
|
11天前
|
机器学习/深度学习 自然语言处理 C++
TSMamba:基于Mamba架构的高效时间序列预测基础模型
TSMamba通过其创新的架构设计和训练策略,成功解决了传统时间序列预测模型面临的多个关键问题。
34 4
TSMamba:基于Mamba架构的高效时间序列预测基础模型
|
4月前
|
机器学习/深度学习 存储 数据可视化
谷歌的时间序列预测的基础模型TimesFM详解和对比测试
在本文中,我们将介绍模型架构、训练,并进行实际预测案例研究。将对TimesFM的预测能力进行分析,并将该模型与统计和机器学习模型进行对比。
163 2
|
3月前
|
计算机视觉
利用各类回归模型,对数据集进行建模
【8月更文挑战第8天】利用各类回归模型,对数据集进行建模。
48 4
|
5月前
|
机器学习/深度学习 数据采集
开源多结构蛋白质预测大模型——Genie 2
【6月更文挑战第24天】Genie 2,一款开源的深度学习蛋白质设计模型,扩展了原始Genie的结构预测能力,通过创新架构和大规模数据增强处理更复杂多样的蛋白质结构。引入的多基序框架允许设计多功能蛋白质,提升无条件和有条件生成的性能。尽管面临数据质量、复杂相互作用处理及模型可解释性的挑战,Genie 2仍为蛋白质设计树立新标杆。[论文链接](https://arxiv.org/abs/2405.15489)
63 1
|
5月前
|
Python
时间序列分析与预测模型建立
【6月更文挑战第2天】时间序列分析是预测未来趋势的工具,通过分析历史数据(如小猴子的脚印)来预判未来。涉及数据收集、预处理和选择合适模型(如ARIMA)。Python的statsmodels库可用于构建ARIMA模型。尽管预测不保证完全准确,但它仍能为生活和工作提供便利。一起来探索这个有趣的领域吧!
49 0
|
机器学习/深度学习 算法 数据可视化
机器学习-特征选择:如何使用相关性分析精确选择最佳特征?
本文致力于利用相关性分析来辅助特征选择过程。相关性分析作为一种用于量化特征之间关系的方法,可以帮助我们理解数据中的潜在模式和相互作用。通过分析特征之间的相关性,我们可以更加准确地选择具有高预测能力和独立性的特征,从而提高特征选择的效果和结果。
2324 0
|
机器学习/深度学习 监控 vr&ar
时间序列预测的20个基本概念总结
时间序列是一组按时间顺序排列的数据点
282 2

热门文章

最新文章