Я пытался построить рекуррентную нейронную сеть в 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