Как использовать функцию RNN в R для прогнозирования спроса - PullRequest
0 голосов
/ 26 января 2020

Я пытался построить рекуррентную нейронную сеть в R для прогнозирования спроса во временных рядах. Keras / tenorflow слишком запутанны для использования в R, поэтому я попробовал пакет rnn (функция trainr), но мне кажется, что это просто не работает для прогнозирования спроса. Моя цель - использовать недельный спрос за последние 6 недель для прогнозирования спроса на следующей неделе. Мой входной массив (= зависимые переменные), таким образом, имеет измерение времени 6, но мой выходной массив (= зависимая переменная) имеет измерение времени 1. Мой размер выборки равен 30. Когда я сейчас запускаю trainr, я получаю следующее сообщение об ошибке :

Error in trainr(y_train, X_train, learningrate = 0.1, hidden_dim = 2,  : 
  The time dimension of X is different from the time dimension of Y. seq_to_seq_unsync is set to FALSE

В документации R для функции trainr написано "Y = массив выходных значений, dim 1: отсчеты (должно быть равно dim 1 из X), dim 2: время (должно быть равно dim 2 из X) (...) ". Но как мои входные и выходные данные могут иметь одинаковое значение 2: время для прогнозирования спроса, если у меня есть несколько недель в качестве входных данных и только одна неделя в качестве выходных данных (неделя, которую я пытаюсь предсказать)?

Здесь мой код и данные примера:

  batch_size <- 32 # number of sequences to look at at one time during training
  total_epochs <- 15 
  X <- demand_matrix[,-ncol(demand_matrix)]
  y <- demand_matrix[,ncol(demand_matrix)]
  X_train <- array(X, dim = c(30, 6, 1))
  y_train <- array(y, dim=c(30,1))
  model <- trainr(y_train,
                  X_train,
                  learningrate = 0.1,
                  hidden_dim = 2,
                  network_type='rnn',
                  numepochs=15,
                  batch_size=6)

Здесь приведены данные примера (7-й столбец - независимая переменная (спрос на следующей неделе), а столбцы 1-6 - недельный спрос за последние 6 недель)

> demand_matrix
      [,1] [,2] [,3] [,4] [,5] [,6] [,7]
 [1,] 1350 3700 3900 4500 3350 2900 4800
 [2,] 3700 3900 4500 3350 2900 3200 5600
 [3,] 3900 4500 3350 2900 3200 4550 4800
 [4,] 4500 3350 2900 3200 4550 4250 4450
 [5,] 3350 2900 3200 4550 4250 4050 3600
 [6,] 2900 3200 4550 4250 4050 4800 2450
 [7,] 3200 4550 4250 4050 4800 5600 4400
 [8,] 4550 4250 4050 4800 5600 4800 3550
 [9,] 4250 4050 4800 5600 4800 4450 4500
[10,] 4050 4800 5600 4800 4450 3600 4600
[11,] 4800 5600 4800 4450 3600 2450 3600
[12,] 5600 4800 4450 3600 2450 4400 3550
[13,] 4800 4450 3600 2450 4400 3550 4000
[14,] 4450 3600 2450 4400 3550 4500 3000
[15,] 3600 2450 4400 3550 4500 4600 4100
[16,] 2450 4400 3550 4500 4600 3600 4050
[17,] 4400 3550 4500 4600 3600 3550 4100
[18,] 3550 4500 4600 3600 3550 4000 3700
[19,] 4500 4600 3600 3550 4000 3000 4200
[20,] 4600 3600 3550 4000 3000 4100 3700
[21,] 3600 3550 4000 3000 4100 4050 4200
[22,] 3550 4000 3000 4100 4050 4100 3050
[23,] 4000 3000 4100 4050 4100 3700 2800
[24,] 3000 4100 4050 4100 3700 4200 4400
[25,] 4100 4050 4100 3700 4200 3700 4850
[26,] 4050 4100 3700 4200 3700 4200 4700
[27,] 4100 3700 4200 3700 4200 3050 3900
[28,] 3700 4200 3700 4200 3050 2800 4550
[29,] 4200 3700 4200 3050 2800 4400 7200
[30,] 3700 4200 3050 2800 4400 4850 2700

1 Ответ

0 голосов
/ 26 января 2020

Для решения вашей проблемы вы можете использовать сети elman или jordan в пакете RSNNS.

library(RSNNS)
fit <- jordan(X, y, size=20,
    learnFuncParams=c(0.1),
    maxit=1000)

См. Эту ссылку для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...