如何在多变量序列预测中为 LSTM 训练重塑数据

数据挖掘 Python 喀拉斯 时间序列 lstm rnn
2022-02-18 04:49:14

我想为客户行为建立一个 LSTM 模型。这是我第一次在时间序列上工作,所以有些概念对我来说根本不清楚。

我的预测问题是多维的,这意味着我还想预测与每个客户的操作相关的许多信息。

数据集目前被塑造为单热编码特征(客户操作 + 其他信息)的二维填充数组列表,例如:

   customer_id               encoded_features
0   25464205      [[0,1,0],..,[1,1,1],[1,0,1],..,[1,0,1]]
1   56456574      [[0,1,1],..,[1,0,1],[1,0,1],..,[1,1,1]]

其中 encoded_features 条目中的每个元素代表一个特定的时间步长。

我的想法是使用 keras输入形状

(n. customers, n. timesteps, length of features encoding)

在上面的示例中,它将是(2,#timesteps,3).

我有两个主要问题:

  1. 这整个设置是否适合预测下一个客户的行为?我想简单地为某个客户提供一个新的功能序列,并预测下一个时间步的所有功能

  2. 我正在考虑将数据(根据一定的比例)拆分为顺序训练和测试集,以便在未见过的特征向量上测试训练好的模型。在上面的示例中,它将是:

  customer_id       X_train          y_train   
0   25464205       [[0,1,0],..]      [1,1,1]  
1   56456574       [[0,1,1],..]      [1,0,1] 

  customer_id       X_test           y_test    
0   25464205       [[1,0,1],..]      [1,0,1]
1   56456574       [[1,0,1],..]      [1,1,1]

请注意,X_train 和 X_test 通常包含所有训练/测试事件,除了必须预测的最后一个事件。这是一个正确的解释吗?

1个回答

这是有道理的。它应该适用于输入和前几层。对于输出层,如果您只需要按顺序生成下一条记录,则可以使用 softmax。

以下 Keras 代码有一个示例:

  1. 接受多维输入(每个样本都是一个视频帧序列)
  2. 预测接下来的几帧视频(多维,因为每个像素都是一个特征)

https://github.com/keras-team/keras/blob/master/examples/conv_lstm.py