Результаты Keras R совершенно разные, хотя используется один и тот же набор данных с другим фреймом данных - PullRequest
0 голосов
/ 22 апреля 2020

Сначала я прошу прощения за мой, вероятно, новый вопрос sh, но я просто не мог выяснить, как решить эту проблему самостоятельно.

В настоящее время я пытаюсь прогнозировать обменные курсы, используя нейронную сеть lstm, создавая ее в Керасе. Когда я попытался запустить свой первый тест, он уже столкнулся с большой проблемой.

set.seed(523432)

myts = data.frame(index = Date[2:524], price = AUDEURR, pred1 = Data.logreturns[4], pred2 = Data.logreturns[5], pred3 = Data.logreturns[6],pred4 = Data.logreturns[7],pred5 = Data.logreturns[8])


# myts = data.frame(index = Date[2:524], price = AUDEURR, pred1 = Libor1yR, pred2 = USDGBPR, pred3 = USDAUDR,pred4 = USDNZDR,pred5 = USDCHFR)


myts = myts[complete.cases(myts), ] 
myts = myts[-seq(nrow(myts) - 500), ]
myts$index = seq(nrow(myts))



datalags = 10
train = myts[seq(50 + datalags), ]
test = myts[75 + datalags + seq(50 + datalags), ]
batch.size = 10 



x.train = array(data = lag(cbind(train$price, train$pred1, train$pred2, train$pred3, train$pred4, train$pred5), datalags)[-(1:datalags), ], dim = c(nrow(train) - datalags, datalags, 2))
y.train = array(data = train$price[-(1:datalags)], dim = c(nrow(train)-datalags, 1))



x.test = array(data = lag(cbind(test$pred,test$pred2, test$pred3, test$pred4, test$pred5, test$price), datalags)[-(1:datalags), ], dim = c(nrow(test) - datalags, datalags, 2))

y.test = array(data = test$price[-(1:datalags)], dim = c(nrow(test) - datalags, 1))



model <- keras_model_sequential()

model %>%
  layer_lstm(units = 100,
             input_shape = c(datalags, 2),
             batch_size = batch.size,
             return_sequences = TRUE,
             stateful = TRUE) %>%
  layer_dropout(rate = 0.5) %>%
  layer_lstm(units = 50,
             return_sequences = FALSE,
             stateful = TRUE) %>%
  layer_dropout(rate = 0.5) %>%
  layer_dense(units = 1)

model %>%
  compile(loss = 'mae', optimizer = 'adam', metrics = c('mse','mape'))


#for(i in 1:200){
  model %>% fit(x = x.train,
                y = y.train,
                batch_size = batch.size,
                epochs = 200,
                verbose = 1,
                shuffle = FALSE) # Verbose = 1, shows progress during all epochs.
# model %>% reset_states()
#}

pred_out <- model %>% predict(x.test, batch_size = batch.size) %>% .[,1]





Как видите, у меня есть два разных временных ряда. Но на самом деле данные одинаковы. Например, Data.logreturns [4] имеет значения Libor1yR.

Проблема, с которой я столкнулся сейчас, заключается в том, что выполнение кода дает мне совершенно разные результаты с точки зрения значений MSE & MAPE.

В то время как первый набор данных дает MSE около 0,005 и MAPE 25 в каждую эпоху, второй временной ряд дает MSE и MAPE в среднем в 5 раз выше. Что я делаю неправильно ?. Значения в обоих наборах данных одинаковы.

Идея кода взята из следующего источника: https://www.r-bloggers.com/lstm-with-keras-tensorflow/

Заранее извиняюсь, если допустил некоторые ошибки. Большое спасибо за каждый намек, хорошей недели.

С наилучшими пожеланиями, Марсель

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