如何为长度不等的事件和时间序列生成建模

时间:2019-03-22 12:09:13

标签: python tensorflow keras neural-network deep-learning

我有一个包含多个时间序列的数据集,其中有两个功能,一个时间和一个对应的事件。时间序列的长度不相等。我用表示该系列结束的值填充了较短的那些,并且在系列中从未在其他地方使用过,但是我不确定这是否是最好的方法。

我的数据基本上看起来像这样:

[[[ -1.00, Event <],
  [  0.00, Event A],
  [  6.19, Event B],
  [ 55.41, Event C],
  [ 66.68, Event B],
  ...
  [293.54, Event G],
  [300.99, Event H],
  [ -0.50, Event >],
  [ -0.50, Event >],
  [ -0.50, Event >],
  [ -0.50, Event >]]]

形状是

(1459,76,2)

目标是生成与我的数据集中的时间序列相似的时间序列,包含这两个特征。

由于我对神经网络这个话题还很陌生,所以我一直在努力寻找解决问题的合适方法。我通过许多相关的教程来学习自己,并搜索了类似的问题,但是到那时我有点迷茫,不胜感激,并且会有所帮助。

1 个答案:

答案 0 :(得分:1)

如果您的目标是生成与您所拥有的时间序列相同的时间序列,那么我会将将生成(可能有效)的动作序列的问题建模为语言生成问题。我们首先从火车数据集中学习动作的语言模型,这将有可能学习动作的有效组合。训练语言模型后,我们可以生成随机的(可能有效的)动作序列。

示例

我的动作是说数字(表示为字符串),并且这些数字的有效组合是倍数(乘法表)。给我要生成随机数字序列的倍数

from nltk.lm.preprocessing import padded_everygram_pipeline
from nltk.lm import MLE,Laplace
from nltk.lm import Vocabulary

# Generate Data
event = []
for i in range(1,100):
    event.append(["{0}".format(n*i) for n in range(10)])

# Train model 
train_data, padded_vocab = padded_everygram_pipeline(3, event)
model = MLE(3)
model.fit(train_data, padded_vocab)

# Generate a random sequence of 10 numbers
model.generate(10)

注意:忽略生成的序列中的</s><s>,因为它们代表序列的开始和结束。

您可能无法使用相同的方法来生成时间戳(功能1),因为在这种情况下词汇量会很大。