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

AR_*_*AR_ 9 python lstm keras data-science

我有一些来自多个用户(nUsers)的数据集.每个用户随机抽样(每个用户的非常数nSamples).每个样本都有许多功能(nFeatures).例如:

nUsers = 3 ---> 3个用户

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

nFeatures = 10 --->每个样本的特征数量恒定.

我希望LSTM基于当前特征和同一用户的先前预测产生当前预测.我可以使用LSTM层在Keras中做到这一点吗?我有两个问题:1.每个用户的数据都有不同的时间序列.我该怎么办呢?2.如何处理将先前的预测添加到当前时间特征空间以进行当前预测?

谢谢你的帮助!

Dan*_*ler 6

听起来每个用户都是一个序列,因此,用户可能是您的问题的"批量大小".所以起初,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
Run Code Online (Sandbox Code Playgroud)

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

这将导致形状类似的阵列

x.shape -> (BatchSize, 7, 10) -> (BatchSize, 7 step sequences, 10 features)   
y.shape -> (BatchSize, 10)
Run Code Online (Sandbox Code Playgroud)

也许你并不是指预测下一组功能,而只是预测某些功能.在这种情况下,只需将y替换为您想要的值.y.shape -> (BatchSize,)如果您只想要一个结果,那么可能会导致这种情况.


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

假设您的最长序列(如您的示例中)为52.然后:

x.shape -> (Users, 52, 10).    
Run Code Online (Sandbox Code Playgroud)

然后你必须"填充"序列以填补空白.
例如,您可以使用零功能填充序列的开头,例如:

x[0] = [s0, s1, s2, ......., s51] -> user with the longest sequence    
x[1] = [0 , 0 , s0, s1, ..., s49] -> user with a shorter sequence
Run Code Online (Sandbox Code Playgroud)

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


归档时间:

查看次数:

3904 次

最近记录:

8 年,4 月 前