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

预测的任务

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

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

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

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

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

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

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

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

全部模型:

这个架构可以通过以下方式使用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)

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

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

def generate_time_series(dataframe):
    clip_val = random.uniform(0.3, 1)
    period = random.choice(periods)
    phase = random.randint(-1000, 1000)
    dataframe["views"] = dataframe.apply(
        lambda x: 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],)
    return dataframe

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

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

预测未拟合的样例

拟合样例:

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

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

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

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

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

提到的论文 arxiv:2001.08317

作者:Youness Mansar

我最近读了一篇非常有趣的论文,叫做 Deep Transformer Models for Time Series Forecasting: The Influenza Prevalence Case。我认为这可能是一个有趣的项目,他的实现是从头开始的,并且可以帮助你了解更多关于时间序列预测。预测的任务在时间序列预测中,目标是预测给定历史值的时间序列的未来值。时间序列预测任务的一些例子是:预测流感流行病例:时间序列预测的深度变形模型:流感流行病例能源生产预测:能源消耗预测使用堆叠非参数贝叶斯方法天
2月22日打卡学习记录 一开始把Aliyun和Docker账号搞混了,出了很多模型奇妙的bug最后还是好不容易在最后关头跑通了。。太难了我的天。 通过pycharm终端构建图像 将图像推送到我的注册表 成功记录得分:-16 2月26日打卡学习记录 因为数据很多,所以我们使用tsfresh来生成功能,只是一个自动的功能工程,然后套入了模型。 后续思路是使用transformer来进行预测。
2017年,Google的一篇 Attention Is All You Need 为我们带来了Transformer,其在NLP领域的重大成功展示了它对时序数据的强大建模能力,自然有人想要把Transformer应用到时序数据预测上。在Transformer的基础上构建时序预测能力可以突破以往的诸多限制,最明显的一个增益点是,Transformer for TS可以基于Multi-head Attention结构具备同时建模长期和短期时序特征的能力。 本文将要介绍的一个充分利用Transformer的优
from sklearn.model_selection import train_test_split boston = datasets.load_boston() # 导入波士顿房价数据 train = boston.data # sample target = boston.target # target # 切割数据样本集合测试集 X_train,... Transformer 模型的实现(最初来自 )应用于时间序列(由提供支持)。 变压器型号 Transformer 是基于注意力的神经网络,旨在解决 NLP 任务。 它们的主要特点是: 特征向量维度的线性复杂度; 序列计算的并行化,而不是顺序计算; 长期记忆,因为我们可以直接查看任何输入时间序列步骤。 这个 repo 将专注于它们在时间序列中的应用。 数据集和应用作为元模型 我们的用例是为建筑能耗预测建模一个数字模拟器。 为此,我们通过对随机输入(建筑特征和使用情况、天气等)进行采样创建了一个数据集,并获得了模拟输出。 然后我们以时间序列格式转换这些变量,并将其提供给转换器。 时间序列的改编 为了在时间序列上表现良好,必须进行一些调整: 嵌入层被通用线性层取代; 原始位置编码被删除。 可以改用“常规”版本,更好地匹配输入序列日/夜模式; 在注意力图上应用一个
PUE是Power Usage Effectiveness的简写,是评价数据中心能源效率的指标,是数据中心消耗的所有能源与IT负载消耗的能源的比值。 PUE = 数据中心总能耗/IT设备能耗,其中数据中心总能耗包括IT设备能耗和制冷、配电等系统的能耗,其值大于1,越接近1表明非IT设备耗能越少,即能效水平越好。 本次实验主要是根据给出的数据集进行下一时刻PUE的预测以及优化。 二.实验目的: 在进行了深度学习课程的学习之后,希望同学们能够拥有使用深度学习相关方法解决实际问题的能力,本次的数据集来自数据中心,需要大家对数据进行分析,建议采用transfomer与强化学习方法相结合来对PUE进行预测和优化。 三.实验内容: ① 阅设备参数特征选择:请利用特征选择方法,对上述pue.csv数据【非前64维度的特征】进行特征筛选,自动化选出和pue相关的设备参数,使用方法不限。 ② PUE预测:利用特征选择后的参数,对下一时刻的pue进行建模预测,请根据问题构建合适的预测模型; 五.报告要求: 1)针对实验内容(1),请阐述你的特征选择方法和原因,并分析选择后的特征具有什么特点(筛选掉的特征有
linearRegression.m:计算r值和简单的线性回归。 您只需要运行此文件。 logisticRegression.m:由linearRegression.m使用,计算logistic回归的结果。 multipleLinRession.m:由linearRegression.m使用,计算多变量线性回归的结果。 IF1-FEB22-detailed.csv:无法共享的私人信息。 但是,matlab代码可用于您自己的数据。 列包括年份,测得的水含量(ppm),总酸值(mgKOH / g),击穿电压,耗散因数,颜色,界面张力(mN / m)和类别。 将存储库克隆到本地文件夹 在Matlab中打开linearRegression.m并运行文件 输出线性和逻辑回