我正在尝试使用 LSTM 在时间序列中找到异常。而且我仍然想知道,根据时间序列过去的行为发现异常的正确架构、时间步长、批量大小、滑动或非滑动窗口应该是什么
from numpy import array
from keras.models import Sequential, Model
from keras.layers import Input, Dense, LSTM,
RepeatVector,TimeDistributed
from keras import optimizers
from keras.callbacks import EarlyStopping
X = array([0.1, 0.2, 0.3, 0.4, 25, 0.5, 0.6, 0.7])
X_train = X.reshape(1, 8, 1)
y = X.reshape(1, 8)
model = Sequential()
model.add(LSTM(4, input_shape=(8, 1), return_sequences=True))
model.add(TimeDistributed(Dense(1)))
model.compile(loss='mean_squared_error', optimizer='adam')
print(model.summary())
history = model.fit(X_train, y, epochs=500, batch_size=1, verbose=2)
result = model.predict(X_train, batch_size=1, verbose=0)
它给了我一个输出
[0.11906812, 0.19180197, 0.30324116, 0.14811686, 25.3771758 ,
0.52173275, 0.61532116, 0.7421335]
对我来说,这看起来不像是异常迹象。有状态是根据过去的行为发现异常的更好方法吗?即使是正态高斯分布也可以很容易地告诉我这里的异常,但它不会占用时间效果