LSTM 到多变量序列分类

数据挖掘 Python 喀拉斯 时间序列 lstm 顺序
2022-03-04 20:23:57

如何在 keras 中使用 LSTM 训练多变量到多类序列?

我有 50000 个序列,每个序列的长度为 100 个时间点。在每个时间点,我都有 3 个特征(所以宽度是 3)。

我有 4 个类,我想构建一个分类器来确定序列的类。最好的方法是什么?

我看到了许多单变量序列分类指南,但没有看到多变量指南,我不知道如何将其应用于多变量案例

1个回答
  • 由于您使用LSTM使用 多元时间序列数据进行分类,因此您需要将时间序列数据建模为监督学习问题,并通过指定时滞计数来指定您需要查看的先前时间步长

  • 您需要查看to_supervised函数并指定模型具有的输出数量。在你的情况下,它是 4。

  • 从整个数据集中拆分您的训练集和测试集。70:30 的火车比例,测试将是一个好的开始。

  • 另外,请注意,您需要使用该 sklearn.preprocessing.MinMaxScaler()函数缩放您的值。

  • 您需要将您的训练和测试值重塑为 (batch_size/sample_size, time_steps, feature_size),因为 Keras 中的 LSTM 层希望您的数据以 3D 数组格式提供。

  • 例如:您的训练形状将是train.shape = (batch_size, 100, 3)

对于 Keras 的模型构建

model = Sequential()
model.add(LSTM(number_of_hidden_units, activation='relu', input_shape=(n_timesteps = 100, n_features = 3))) 
model.add(Dense(4, activation='softmax')) #since number of output classes is 4
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
model.fit(X_train, y_train, validation_data=(X_test, y_test), no_of_epochs, batch_size)

请注意,我刚刚给出了模型构建的粗略轮廓,并在您方便时省略了超参数。您可以将更多 LSTM 层堆叠到模型上,也可以调整模型中 hidden_​​layers 的数量,请参阅多类分类以获取更多详细信息。