Python 如何对不等长的事件和时间序列生成进行建模

Python 如何对不等长的事件和时间序列生成进行建模,python,tensorflow,keras,neural-network,deep-learning,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], [30

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

我的数据基本上如下所示:

[[[ -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 >]]]
目标是生成与我的数据集中的时间序列相似的时间序列,包含这两个特性


我正在努力寻找一个合适的方法来解决这个问题,因为我对神经网络这个话题还相当陌生。我自己学习了很多相关的教程,并搜索了类似的问题,但现在我有点不知所措,非常感谢您的帮助。

如果您的目标是生成一个与您的时间序列类似的时间序列,我会对生成一个(可能有效)时间序列的问题进行建模动作序列作为语言生成问题。我们首先从列车数据集中学习动作的语言模型,这将可能学习动作的有效组合。一旦语言模型经过训练,我们就可以生成一系列随机的(可能有效的)动作

例子 我的动作是说数字(用字符串表示),而这些数字的有效组合是倍数(乘法表)。给出这样的倍数,我想生成一个随机的数字序列

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)
注意:忽略生成序列中的
,因为它们代表序列的开始和结束


您可能无法使用相同的方法来生成timestap(函数1),因为在这种情况下,词汇表将非常庞大

是的,填充是通常的方法。TensorFlow提供了许多功能来支持这一点,例如,/)中的
sequence\u length
参数。最近也引入了这些参数,尽管它们的功能比较有限,并且(至少目前)通常不用于此。谢谢,我将研究这些并尝试使用它们,sequence_mask似乎很有希望,还有更多的建议,可能是一个类似问题的示例链接,我可以用它作为指导,或者其他什么。如果你只是在谷歌上搜索一些东西,比如,你应该找到一些Q/a、教程和其他可能有用的资源。确切的解决方案在一定程度上取决于您想对数据做什么以及如何处理。我也认为这是某种语言生成问题,但正如您所说,这对功能1来说是个问题。如果我分别生成这两个功能,然后将它们粘在一起,我不确定序列会有多好。@Mendrus如果功能1和功能2是独立的,那么训练两个不同的模型并将结果粘在一起就完全可以了。
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)