当使用多个样本时,如何与Keras一起使用多元时间序列预测

时间:2019-12-03 19:13:50

标签: python tensorflow keras time-series lstm

正如标题所述,我正在进行多元时间序列预测。我对这种情况有一些经验,能够在TF Keras中成功设置和训练工作模型。

但是,我不知道处理多个不相关的时间序列样本的“正确”方法。我有大约8000个独特的样品“块”,每个样品的时间步长从800个时间步到30,000个时间步。当然,我无法将它们全部合并为一个单一的时间序列,因为样本2的第一点在时间上与样本1的最后点没有关系。

因此,我的解决方案是将每个样本分别放入一个循环中(效率极低)。

我的新想法是/可以/应该将每个样本的开头填充空的时间步长=到RNN的回顾量,然后将填充的样本连接成一个时间序列吗?这将意味着第一步将具有大部分为0的回溯数据,这听起来像是解决我的问题的另一个“方法”,而不是正确的解决方法。

1 个答案:

答案 0 :(得分:2)

主要挑战在于800到30,000个时间步长,但您无能为力。

  • 模型设计将序列分组为大块-例如,填充800-900个时间步的30个序列,然后填充900-1000个60个序列,等等-不必是连续的(即下一个可以是1200到1500)
  • 输入形状(samples, timesteps, channels)-或等效地,(sequences, timesteps, features)
  • Conv1D和/或RNN-例如GRU, LSTM。每个人都可以处理可变的时间步长
  • 串联不要这样做。如果您的每个序列都是独立的,则每个序列都必须沿Keras中的维度0进行馈送-批处理样本维度。如果它们是依赖的,例如多元时间序列,就像信号中的许多通道一样-然后沿channels维(维度2)进行馈送。但是绝不要沿时间序列维度进行连接,因为这暗示着因果连续性不存在。
  • 有状态RNN :可以帮助处理长序列-有关其工作方式的信息here
  • RNN功能:受到限制序列很长,即使对于LSTM来说,也已经有800个处于危险区域;我建议通过输入时使用自动编码器或带有strides > 1的CNN来降低维度,然后将其输出馈送到RNN。
  • RNN培训:非常困难。训练时间长,超参数灵敏度,梯度消失-但是,通过适当的正则化,它们可能会很强大。更多信息here
  • 零填充:之前/之后/两者-值得商,,可以阅读,但可能与“两者”保持清晰,因为在一个地方学习忽略填充更容易;我个人使用“之前”
  • RNN变体:尽可能使用CuDNNLSTMCuDNNGRU,因为它们快10倍

注意:上面的“样本”,在机器学习中,是指独立的示例/观察结果,而不是测量的信号数据点(称为{{ 1}})。


下面是一个适合时间序列的模型的基本代码:

timesteps