【问题标题】:LSTM Keras: Reshape Input DataLSTM Keras:重塑输入数据
【发布时间】:2020-02-26 16:42:29
【问题描述】:

我想为客户行为构建 LSTM 自动编码器模型并检测异常情况。活动数据集如下所示:

customer_id               features
C1                   [[1,2,1,0,1],[2,2,1,1,0],[1,2,3,1,1],[0,3,2,1,1]]
C2                   [[2,1,1,4,1],[3,2,1,1,4],[2,2,3,1,2]]
..............................................
Cn                   [[2,3,1,4,1],[2,1,1,1,0],[4,2,2,1,2],[3,3,2,1,1], [2,3,2,1,2], [1,3,2,2,1]]

这里,所有样本的特征数量都是相同的,即 5。但是,没有。不同客户的样品数量不同。有 N 个客户。
在这种情况下,如何分离训练和测试数据以及如何重塑 LSTM 模型的输入数据?

截至目前,

  1. 我正在考虑例如每个客户数据中 80% 的样本作为训练,其余样本作为测试。
  2. 尝试将输入重塑为:(no_of_customers, timesteps, no_of_features) = (n, #no_of_samples, 5) .不支持此数组,因为我们不能拥有具有不同时间步长的 numpy 数组。

【问题讨论】:

  • 我写了一个答案,看看能不能解决你的问题。

标签: keras deep-learning lstm recurrent-neural-network autoencoder


【解决方案1】:

在这种情况下,您需要使用填充。参考tensorflow padding guide

from tensorflow.keras.preprocessing.sequence import pad_sequences

# club all features (c1, c2 ... features, I clubbed c1. c2 only) as a below:    
input1 = [[[1,2,1,0,1],[2,2,1,1,0],[1,2,3,1,1],[0,3,2,1,1]],
         [[2,1,1,4,1],[3,2,1,1,4],[2,2,3,1,2]]]

padded_input = pad_sequences(input1, padding='post')
print(padded_input)

您也可以设置 maxlen 参数,具体取决于为客户提供的最大列表

【讨论】:

  • 我已将输入数据拆分为 X_train 和 X_test。如果我们为数据样本较少的客户填充零序列,模型的整体结果会发生什么?它会在模型​​性能上产生差异吗?
  • 不,它不会,填充和屏蔽模块本身会处理零填充。请阅读链接一次,你就会知道。
  • 还有一件事,确保你也填充了你的测试数据。让我知道你身边的事情是否清楚。
  • 非常感谢您的回答。我会尽力回复你。
  • 确定并随时询问!如果它适合您,请标记为已回答:)