二元分类比较两个可变长度的时间序列

数据挖掘 分类 喀拉斯 时间序列 机器学习模型 连体网络
2022-02-19 17:19:40

是否有机器学习模型(类似于LSTMor 1D-CNN)将两个可变长度的时间序列作为输入并输出二进制分类(时间序列是否具有相同标签的真/假)?

所以数据看起来像下面这样

date        value label
2020-01-01  2     0     # first input time series
2020-01-02  1     0     # first input time series
2020-01-03  1     0     # first input time series
2020-01-01  3     1     # second input time series
2020-01-03  1     1     # second input time series

开箱即用是否有类似的东西,如果没有,您将如何构建一个最小的工作示例模型Keras

我最好的猜测是在输入到最后一层之前LSTM对两个输入和两个结果向量使用一个共享层。ConcatenateDense

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

n_lstm_blocks = 50

input_1 = keras.Input(shape=(None, 1)) # unknown timespan, fixed feature size 1
input_2 = keras.Input(shape=(None, 1))
shared_lstm = layers.LSTM(n_lstm_blocks)
encode_1 = shared_lstm(input_1)
encode_2 = shared_lstm(input_2)
concat = layers.concatenate([encode_1,encode_2])
output = layers.Dense(1, activation='sigmoid')(concat)
model = keras.Model(inputs=[input_1,input_2],outputs=output)
model.compile(optimizer='adam', loss='binary_crossentropy')

一个类似的任务是用于人脸识别的 Siamese Networks / One-Shot learning。但在这种情况下,任务是与时间序列进行比较并检测它们是否具有相同的标签,但知道每个标签不是网络的任务!

1个回答

我认为 LSTM 和 1D-CNN 都可以工作,但这首先取决于你的数据。

在您的代码中,您使用了共享 LSTM,这意味着您认为您的两个输入序列实际上只是同一变量的不同长度序列?如果是这样,为什么不直接使用 LSTM 进行标注,然后比较它们的标注。

如果不是这种情况,您可以使用单独的输入。

因此,将 1D-CNN 用于序列的限制是您的序列在样本之间应该具有相同的长度(据我目前所知)。所以如果你有两种固定长度的序列l1l2在样本中,那么您可以尝试这种方法。

如果您有两种类型的序列,都具有可变长度,那么您将不得不为它们中的每一个使用一个动态输入 LSTM,然后将这两个 LSTM 连接起来。