当使用多个不同长度和多个特征的时间序列时,如何为 LSTM 准备数据?

Posted

技术标签:

【中文标题】当使用多个不同长度和多个特征的时间序列时,如何为 LSTM 准备数据?【英文标题】:How to prepare data for LSTM when using multiple time series of different lengths and multiple features? 【发布时间】:2017-12-14 05:51:07 【问题描述】:

我有一个来自多个用户 (nUsers) 的数据集。每个用户在时间上随机采样(每个用户的非恒定 nSamples)。每个样本都有许多特征(nFeatures)。 例如:

nUsers = 3 ---> 3 个用户

nSamples = [32, 52, 21] ---> 第一个用户被采样了 32 次第二个用户被采样了 52 次等等。

nFeatures = 10 ---> 每个样本的特征数不变。

我希望 LSTM 根据当前特征和同一用户之前的预测生成当前预测。 我可以使用 LSTM 层在 Keras 中做到这一点吗? 我有两个问题:

    每个用户的数据都有一个不同的时间序列。我该如何合并它? 如何处理将之前的预测添加到当前时间特征空间以进行当前预测?

感谢您的帮助!

【问题讨论】:

***.com/a/62570576/10375049 【参考方案1】:

听起来每个用户都是一个序列,因此,用户可能是您问题的“批量大小”。所以一开始,nExamples = nUsers

如果我正确理解了您的问题(预测下一个元素),您应该定义“回顾”的最大长度。例如,假设您可以通过查看前 7 个元素来预测下一个元素(而不是查看整个序列)。

为此,您应该像这样分隔数据:

example 1: x[0] = [s0, s1, s2, ..., s6] | y[0] = s7   
example 2: x[1] = [s1, s2, s3, ..., s7] | y[1] = s8

sn 是一个包含 10 个特征的样本。 通常,是否混合用户并不重要。为所有用户创建这些小段并将所有内容放在一起。

这将导致数组形状像

x.shape -> (BatchSize, 7, 10) -> (BatchSize, 7 step sequences, 10 features)   
y.shape -> (BatchSize, 10)

也许你的意思不是预测下一组特征,而只是预测一些东西。在这种情况下,只需将 y 替换为您想要的值。如果您只想要一个结果,这可能会导致 y.shape -> (BatchSize,)


现在,如果您确实需要整个序列进行预测(而不是之前的 n 个元素),那么您将必须定义最大长度并填充序列。

假设你的最长序列,如你的例子,是 52。那么:

x.shape -> (Users, 52, 10).    

然后您将不得不“填充”序列以填补空白。 例如,您可以用零特征填充序列的开头,例如:

x[0] = [s0, s1, s2, ......., s51] -> user with the longest sequence    
x[1] = [0 , 0 , s0, s1, ..., s49] -> user with a shorter sequence

或者(我不确定这是否有效,我从未测试过),用零值填充结尾并使用 Masking Layer,这是 Keras 用于“可变长度序列”的。您仍然使用固定大小的数组,但在内部它会(?)丢弃零值。

【讨论】:

我也有类似的问题,多个不同长度的时间序列;每个都属于一个进程号。但是所有进程都是同一时间的,我不需要使用进程信息。知道如何处理吗?我也问过这个问题:***.com/questions/55587697/…

以上是关于当使用多个不同长度和多个特征的时间序列时,如何为 LSTM 准备数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何为多个不同的控制器制作 NSTimer?迅速

如何为多个视图控制器使用 SWRevealviewcontroller 库

Xcode iOS - 使用相同资源的多个测试失败 - 如何为多个测试使用 1 个资源?

如何为相同的产品风味拥有多个 ApplicationId?

使用 seaborn 绘图时,如何为色调参数指定多个变量?

如何为不同的 UI 使用多个 Bloc?