【问题标题】:How to input a classification time series data into LSTM如何将分类时间序列数据输入 LSTM
【发布时间】:2018-12-07 02:25:35
【问题描述】:

我想将我的数据输入 LSTM 网络,但找不到任何类似的问题或教程。我的数据集是这样的:

person 1:
    t1 f1 f2 f3
    t2 f1 f2 f3
     ...
    tn f1 f2 f3
.
.
.

person K:
    t1 f1 f2 f3
    t2 f1 f2 f3
     ...
    tn f1 f2 f3

所以我有k 人,对于每个人,我都有一个类似输入的矩阵。每行的第一列是增量时间戳(就像一个时间线,所以t1 t2),其他列是那个时间的人的特征。

在数学方面:我有一个(number of example,number of time stamp, number of feature) 矩阵,例如 (52,20,4),其中 52 是人数,20 是个人时间戳数,4 是特征数(1 列是时间戳和 3 个是特征)

每个人都有一个班级名称。我想使用 LSTM 神经网络将这些人分为两类。我的问题是如何将这种类型的数据输入到 Keras 等高级库中的 LSTM 中?

编辑: 我的第一次尝试是在 keras 中将其用作input_shape,但我在二进制分类中获得了 50% 的准确率!是我的数据集有问题还是input_shape有问题?!

LSTM(5,input_shape=(20,4))

【问题讨论】:

标签: python keras neural-network lstm


【解决方案1】:

您需要用feature vector 表示每个人的数据,并将此向量传递给分类器(例如MLP classifier)。我想您的问题可能是如何从原始数据中获取feature vector?有很多方法可以从时间序列数据中获取特征。在您的情况下,LSTM 将是一种选择。

LSTM 需要一个 3D 向量作为其输入,其形状为[batch_size x time x feature]。正如您在问题中提到的,您可以通过以下方式将数据输入模型:

model = Sequential()
model.add(LSTM(5, input_shape=(20, 4))
model.add(Dense(2, activation='sigmoid')

1) 我猜tf 的值差异很大,而不是normalized。因此,LSTM 的预测并不令人印象深刻。

2) 您的数据集相对较小。要找出问题所在,请在一小部分训练数据上过拟合模型。如果你在训练数据上获得 100% 的准确率,那么这意味着你的 LSTM 学会了很好地表示特征向量。否则,这意味着您没有设计一个好的模型或正确地提供数据。

【讨论】:

    【解决方案2】:

    根据 LSTM 的 keras 文档,您应该提供 3D 输入形状,其中第一个维度是批量大小(通常为无)。所以试试 input_shape = (None, 20, 4)。这在 Keras 中似乎很常见。

    【讨论】:

      猜你喜欢
      • 2017-07-12
      • 2021-09-23
      • 2018-03-29
      • 2018-05-25
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 2018-10-28
      相关资源
      最近更新 更多