#keras #time-series #lstm #anomaly-detection
#keras #временные ряды #lstm #обнаружение аномалий
Вопрос:
Я пытаюсь найти правильные примеры использования автоэнкодера LSTM для определения аномалий в данных временных рядов в Интернете и вижу много примеров, где модель автоэнкодера LSTM снабжена метками, которые являются будущими временными шагами для последовательностей объектов (как для обычного прогнозирования временных рядов с помощью LSTM), но я полагаю, чтотакая модель должна быть обучена с метками, которые имеют ту же последовательность, что и последовательность объектов (предыдущие временные шаги).
Первая ссылка в Google с помощью этого поиска, например: 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)
Не могли бы вы прокомментировать, как реализован автоэнкодер в ссылке на towardsdatascience.com /?
Правильный ли метод или модель должны быть установлены следующим образом?
model.fit(X_train,X_train)
Заранее спасибо!
Комментарии:
1. Я не вижу здесь вопроса. вы точно следуете приведенному здесь коду, towardsdatascience.com /. … Обучение выполняется так, как подробно описано автором в сообщении. Итак, вы просите помощи в понимании того, как это работает?
2. Я думаю, что это неправильный способ подгонки модели автоэнкодера, как показано в статье. Я вижу много подобных примеров в разных источниках (Kaggle, towardsdatascience и другие). Мне кажется, что модель должна быть подобрана так, как я отметил model.fit(X_train, X_train). Мой вопрос: правильно ли модель указана в статье или нет?
3. Задача автоэнкодера (как следует из названия) заключается в регенерации входных данных. Ваш ввод — X_train, и вы пытаетесь сгенерировать X_train. Я не понимаю, почему утверждение fit неверно. Обнаружение аномалий с помощью автоэнкодеров — это попытка повторно сгенерировать входные данные, а затем сравнить остаточные потери между входными данными и сгенерированными выходными данными. Чем больше потеря, тем больше оценка аномалии.
4. Модель из статьи оснащена y_train, это метки будущей временной метки t 1, я не понимаю, почему вы отмечаете этот способ как попытку сгенерировать X_train или повторно сгенерировать входные данные? Мне кажется, что это попытка предсказать будущие метки, не так ли?
5. Потому что он создает
X_train
иy_train
используетcreate_sequences(train[['Close']], train['Close'])
то жеtrain[[close]]
самое…. Я бы рекомендовал физически распечатать X_train и y_train, чтобы сравнить, что происходит.
Ответ №1:
Это автоэнкодер временных рядов. Если вы хотите спрогнозировать будущее, это делается следующим образом. Подгонка модели автокодирования / машинного обучения отличается для разных проблем и их решений. Вы не можете обучить и подогнать одну модель / рабочий процесс для всех проблем. Временные ряды / промежуток времени могут быть тем, что мы уже собрали данные за период времени и прогнозируем, это может быть для сбора данных и прогнозирования будущего. Оба по-разному построены. Например, данные временных рядов для подповерхностной поверхности Земли моделируются по-разному, а для прогноза погоды — по-разному. Одна модель не может работать для обоих.
Комментарии:
1. Спасибо за ваш ответ. Не могли бы вы ответить относительно этой статьи, есть ли правильно обученный автоэнкодер или нет?
2. Это правильно для этой специально построенной модели. Это финансовое прогнозирование. Вы попали в ловушку / запутались между автоэнкодером прогнозирования будущего временных рядов и автоэнкодером на основе сопоставления изображений или другим простым подбором модели.
3. Я вижу примеры, подобные приведенным ниже 1) kaggle.com/dimitreoliveira/… 2) mdeditor.tw/pl/2u3q 3) rickyhan.com/jekyll/update/2017/09/14/autoencoders.html где авторы обучают LSTM-autoencoder обнаружению аномалий в данных временных рядов (не проблема сопоставления изображений), используя в качестве метки только входное представление (входные последовательности). Не могли бы вы прокомментировать, описаны ли другие случаи или они допускают ошибки в обучающей модели таким образом?
4. Мой ответ такой же, как и выше.
Ответ №2:
По определению автоэнкодером является любая модель, пытающаяся воспроизвести ее входные данные, независимо от типа архитектуры (LSTM, CNN, …).
Оформленный таким образом, это неконтролируемая задача, поэтому обучение будет : model.fit(X_train,X_train)
Теперь, что она делает в статье, на которую вы ссылаетесь, это использует общую архитектуру для автоэнкодера LSTM, но применяется для прогнозирования временных рядов:
model.add(LSTM(128, input_shape=(X_train.shape[1], X_train.shape[2])))
model.add(RepeatVector(X_train.shape[1]))
model.add(LSTM(128, return_sequences=True))
model.add(TimeDistributed(Dense(X_train.shape[2])))
Она предварительно обрабатывает данные таким образом, чтобы получить X_train = [x(t-seq) ….x(t)] и y_train = x(t 1)
for i in range(len(X)-time_steps):
Xs.append(X.iloc[i:(i time_steps)].values)
ys.append(y.iloc[i time_steps])
Таким образом, модель сама по себе не воспроизводит входные данные, которые она вводит, но это не значит, что это недопустимая реализация, поскольку она дает ценный прогноз.