如何将分类时间序列数据输入LSTM

时间:2018-12-07 02:25:36

标签: python keras neural-network lstm

我想将我的数据输入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))

2 个答案:

答案 0 :(得分:0)

根据LSTM的keras文档,您应该提供3D输入形状,其中第一维是批处理大小(通常为None)。因此,请尝试input_shape =(None,20,4)。对于Keras来说,这似乎很常见。

答案 1 :(得分:0)

您需要用feature vector表示每个人的数据,并将此向量传递到分类器中(例如MLP classifier)。问题是如何获得feature vector?有很多方法可以得到这样的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)您的数据集相对较小。要找出是 LSTM 问题还是数据集问题使模型过度适合训练数据。如果您在训练数据上获得100%的准确性,则意味着您的LSTM学会了很好地表示特征向量。否则,这意味着您设计的模型不正确或数据输入不正确。