Последовательность LSTM для обнаружения аномалий последовательности - PullRequest
0 голосов
/ 19 июня 2019

У меня есть простой фрейм данных, и я хочу построить свою архитектуру 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)

Я ожидаю, что мой кодер LSTM должен сообщить мне аномалию в точке данных 25, пока он попытается узнать последовательность

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.6, 0.9, 1.0, 1.1, 2.4, 1.1, 1.3, 1.2]

Что не похоже на аномалию для меня в точке данных 25

Какие изменения я должен внести в свою архитектуру, чтобы она четко проявилась

1 Ответ

0 голосов
/ 20 июня 2019

Я не уверен, почему вы не получили ошибку для формы ваших ярлыков.

В любом случае, увеличение единиц решает проблему.

y = X.reshape(1, 8, 1)

model.add(LSTM(100, input_shape=(8, 1), return_sequences=True))

print(result)

[[[ 0.3147867 ] [ 0.40975055] [ 0.19347075] [ 0.43266642] [24.969408 ] [ 0.5055496 ] [ 0.61411744] [ 0.72490424]]]

Но это только один пример обучения.Я бы предложил использовать больший набор данных с набором обучения и проверки и проверить потерю проверки.

...