Как сделать так, чтобы LSTM захватывал еженедельную сезонность? - PullRequest
2 голосов
/ 02 июля 2019

Я новичок в области глубокого обучения, и мне нужна помощь с LSTM.

Данные, которые я анализирую, состоят из ряда ошибок http для каждого временного шага в течение 1 месяца.Я решил рассматривать данные для каждого 10-минутного шага (чтобы получить больше данных для обучения).

Заголовок данных:

data.head

Данные показывают тенденции сезонности, очень мало ошибок в конце недели и большое количество в рабочие дни (т.е. когда люди подключаются к серверам).

Моя цель - прогнозироватьколичество ошибок на следующий день.Я создал новый столбец с данными, смещенными на день, чтобы предсказать его (смещено на 6 * 24, учитывая, что у нас есть 10-минутные шаги).Поэтому я пытаюсь предсказать 6 * 24 временного шага вперед.

Моя модель следующая:

model = Sequential()
model.add(LSTM(1008, return_sequences = True, input_shape=(train_X.shape[1], train_X.shape[2]))) 
model.add(Dropout(0.2))
model.add(LSTM(144, return_sequences = True, input_shape=(train_X.shape[1], train_X.shape[2]))) 
model.add(Dropout(0.2))
model.add(LSTM(7, return_sequences = True, input_shape=(train_X.shape[1], train_X.shape[2]))) 
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')

Я узнал, что для обучения модели данные должны иметьследующая форма: [образцы, временные шаги, особенности].Он состоит из нескольких суб-временных рядов.Итак, сначала я попробовал следующую форму: [60, 6 * 24, 1], то есть 60 образцов, и каждый представляет день.

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

Вот график, который у меня есть для прогноза:

actual_vs_prediction

Данные испытаний состоят из 12 дней, следующих за месяцемданные обучения.

Я подумал, что, если я укажу модели, что временные ряды составляют недели, это решит проблему.Поэтому я также попытался собрать больше данных и рассмотреть следующую форму для ввода: [21, 6 * 24 * 7, 1], то есть 21 выборка, каждая из которых представляет неделю (10 мин * 6 * 24 * 7),Это не сработало, и у меня есть сюжет, очень похожий на предыдущий.

Я надеюсь, что мои объяснения ясны, если не стесняйтесь спрашивать более подробную информацию.

Спасибо

PS: Если при сборе данных используется только 1-часовой или однодневный временной интервал, дайте мне знать.Я не исследовал этот вариант, потому что у меня было бы очень мало примеров для обучения.

1 Ответ

0 голосов
/ 02 июля 2019

На мгновение отбросив специфику LSTM, если вы знаете, что день недели является важной функцией, вы можете включить день недели (или логическое значение is_weekday) в свои входные данные.

Вы пробовали это?

...