「今日爆料」如何使用Transformer构建时间序列预测模型

 admin   2024-01-21 00:07   22 人阅读  0 条评论

我最近读了一篇非常有趣的论文,名为“时间序列预测的深度变压器模型”:“流感患病率案例”。我认为这可能是一个从头开始实施的有趣项目,可以帮助我了解有关时间序列预测的更多信息。


预测任务


时间序列预测的目标是根据过去的值来预测时间序列的未来值。时间序列预测任务的一些示例是


流感疫情病例预测时间序列预测的深度变换模型流感疫情病例


能源生产预测使用累积非参数贝叶斯方法进行能源消耗预测


天气预报MetNet:用于降水预测的神经气象模型


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


模型


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


解码器使用注意力机制连接到编码器。通过这种方式,解码器可以学会在进行预测之前“关注”时间序列过去值中最有用的部分。


解码器使用MaskedSelf-Attention来防止网络在训练过程中获取未来值,造成信息泄漏。


编码器


解码器


所有型号


该架构可以通过使用PyTorch构建。


编码器层=nnTransformerEncoderLayerd_model=通道,nhead=8,dropout=selfdropout,dim_feedforward=4通道,decoder_layer=nnTransformerDecoderLayerd_model=通道,nhead=8,dropout=selfdropout,dim_feedforward=4通道,selfencoder=torchnnTransformerEncoderencoder_layer,num_layers=8selfdecoder=torchnnTransformerDecoderdecoder_layer,num_layers=8数据


每当我实现一个新方法时,我喜欢首先在合成数据上尝试它,以使其更容易理解和调试。这降低了数据的复杂性并更加关注实现/算法。


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


defgenerate_time_seriesdataframe:clip_val=Randomuniform03,1period=RandomchoiceperiodPhase=Randomrandint-1000,1000数据帧[34;]=应用数据帧lambdax:npclipnpcosx[34;]2nppi/period+Phase,-clip_val,clip_valx[34;]]+x[34;],axis=1,+nprandomnormal0,dataframe[34;]absmax/10,size=dataframeshape[0],返回dataframe


然后立即对所有这些时间序列进行模型训练。


结果


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


糟糕的例子预测


适配示例


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


该模型的预测有些不一致,稍微高估了一些不正确示例的幅度。在一个很好的例子中,预测与现实非常吻合,消除了噪音。


为了获得更好的结果,您可能需要进一步调试代码并优化超参数。


总结


Transformer是目前机器学习应用中非常流行的模型,因此将它们用于时间序列预测是有意义的。转换器不应该是处理时间序列时的首选,但您可以将其用作测试的试用版本。


arxiv上提到的论文200108317


作者尤尼斯曼萨尔


本文地址:http://eptisonshop.com/post/31296.html
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?