Сеть LSTM в R для прогнозирования временных рядов

У меня есть одномерный месячный временной ряд размером 64. Я хотел бы сделать многоэтапный прогноз - последние три месяца (266, 286 и 230) - используя оставшиеся месяцы в качестве учебного набора.

data <- c(113,  55,  77, 114,  73,  72,  75, 135,  84,  66, 167, 93,  83, 
          164,  76,  97, 148,  74,  76, 173,  70,  86, 167,  37,   1,  49,  
          48,37, 117, 178, 167, 177, 295, 167, 224, 225, 198, 217, 220, 175, 
          360, 289, 209, 369, 287, 249, 336, 219, 288, 248, 370, 296, 337, 
          246, 377, 324, 288, 367, 309, 128, 382, 266, 286, 230)

Чтобы смоделировать сеть LSTM, я формирую данные обучения / тестирования следующим образом:

X_train = [55,6,1] # 6 timesteps (t-6,t-5,t-4,t-3,t-2,t-1)
Y_train = [55,3,1] # forecast horizon (t+1,t+2,t+3)
X_test  = [1,6,1]  
Y_test  = [1,3,1]

Однако, когда я настраиваю LSTM, как показано ниже, я получаю ошибку

Error in py_call_impl(callable, dots$args, dots$keywords) : 
ValueError: Error when checking target: expected time_distributed_16 to have 
shape (6, 1) but got array with shape (3, 1)

Модель LSTM

model <- keras_model_sequential()

model %>%
  layer_lstm(
              units = 32, 
              batch_input_shape  = c(1, 6, 1),
              dropout = 0.2,
              recurrent_dropout = 0.2,
              return_sequences = TRUE
  ) %>% time_distributed(layer_dense(units = 1))

  model %>%
      compile(loss = FLAGS$loss, optimizer = optimizer, metrics = 
              list("mean_squared_error"))

  history <- model %>% fit(x = X_train,
                           y = Y_train,
                           batch_size = 1,
                           epochs = 100,
                           callbacks = callbacks)

Я борюсь с этой ошибкой. Кто-нибудь знает концептуальную ошибку этого моделирования? Заранее спасибо.

0 ответов

С таким небольшим количеством данных вы, вероятно, не сможете использовать преимущества нейронной сети LSTM. Я рекомендую вам использовать SARIMA или HW из пакета прогноза. Если у вас есть некоторая неграмотность между лагами, вы также можете построить набор данных с более релевантными лагами и с сезонным компонентом, извлеченным с использованием рядов Фурье и обучить модель randomForest.

Что касается вашего вопроса, я думаю, что ваши массивы не имеют правильного измерения, и поэтому вам нужно изменить их.

Я не эксперт по нейронным сетям LSTM, но, вероятно, ссылка ниже поможет вам:

https://blogs.rstudio.com/tensorflow/posts/2018-06-25-sunspots-lstm/

BR

Другие вопросы по тегам