【发布时间】:2020-11-23 06:46:29
【问题描述】:
我正在尝试找到使用 LSTM 自动编码器在互联网上定义时间序列数据异常的正确示例,并查看了很多示例,其中 LSTM 自动编码器模型配有标签,这些标签是特征序列的未来时间步长(如对于使用 LSTM 进行通常的时间序列预测),但我认为,这种模型应该使用与特征序列(之前的时间步长)序列相同的标签进行训练。
此搜索在谷歌中的第一个链接例如 - https://towardsdatascience.com/time-series-of-price-anomaly-detection-with-lstm-11a12ba4f6d9
1.该函数定义了获取标签的方式(y特征)
def create_sequences(X, **y**, time_steps=TIME_STEPS):
Xs, ys = [], []
for i in range(len(X)-time_steps):
Xs.append(X.iloc[i:(i+time_steps)].values)
ys.append(y.iloc**[i+time_steps]**)
return np.array(Xs), np.array(ys)
X_train, **y_train** = create_sequences(train[['Close']], train['Close'])
X_test, y_test = create_sequences(test[['Close']], test['Close'])
2.模型拟合如下
history = model.fit(X_train, **y_train**, epochs=100, batch_size=32, validation_split=0.1,
callbacks=[keras.callbacks.EarlyStopping(monitor='val_loss', patience=3, mode='min')], shuffle=False)
您能否在指向datascience.com/ 的链接中评论自动编码器的实现方式? 是否应该按照以下方式拟合正确的方法或模型?
model.fit(X_train,X_train)
提前致谢!
【问题讨论】:
-
我在这里看不到问题。您完全按照此处提供的代码towardsdatascience.com/…。培训按照作者在帖子中的详细说明进行。那么,您是否在寻求帮助以了解其工作原理?
-
我认为按照文章所示拟合 Autoencoder 模型的方法是错误的。我在不同的来源(Kaggle、面向数据科学等)中看到了很多这样的例子。在我看来,应该拟合模型,因为我注意到 model.fit(X_train,X_train)。我的问题:模型在文章中的拟合方式是否正确?
-
自动编码器的工作(顾名思义)是重新生成输入。您的输入是 X_train,并且您正在尝试生成 X_train。我不明白为什么 fit 声明不正确。使用自动编码器的异常检测是尝试重新生成输入,然后比较输入和生成的输出之间的残差损失的行为。损失越多,异常得分越高。
-
文章中的模型配备了 y_train,它是未来 t+1 时间戳的标签,我不明白您为什么将这种方式标记为尝试生成 X_train 或重新生成输入?在我看来,它试图预测未来的标签,不是吗?
-
标签: keras time-series lstm anomaly-detection