使用TimeSeries_Generator

时间:2019-12-20 08:44:45

标签: r tensorflow keras lstm forecasting

我不熟悉使用LSTM进行时间序列预测。 我想预测未来的来电到达,我的数据有19个解释变量和一个因变量(来电到达)。一天包含30个观察结果;一周包括180次观察。

我用数值替换了标称变量,将数据归一化并将其分为训练和测试(请忽略1的* 180;我想用for循环(对于52中的i)替换1的后面)预测52次​​180次观察(一周))

data_LSTM_matrix <- data.matrix(data_LSTM)
train_data <- data_LSTM_matrix[1:(21090+(1*180)),]
mean <- apply(train_data, 2, mean)
std <- apply(train_data, 2, sd)
data_normalized <- scale(data_LSTM_matrix, center = mean, scale = std)

train_y<-as.numeric(data_normalized[1:(21090+(1*180)),20])
train_x<-as.matrix(data_normalized[1:(21090+(1*180)),c(1:19)])
test_y<-as.numeric(data_normalized[(21631+(1*180)):(21631+((1+1)*180)),20])
test_x<-as.matrix(data_normalized[(21631+(1*180)):(21631+((1+1)*180)),c(1:19)])

然后我使用了keras的timeseries_generator()。如前所述,我想预测180个半小时间隔,即一周:

train_data_gen<-timeseries_generator(train_x,train_y,length=180, sampling_rate=1, stride=1, batch_size=30)
test_data_gen<-timeseries_generator(test_x,test_y,length=180, sampling_rate=1, stride=1, batch_size=180)

我的模型如下:

model <- keras_model_sequential() %>% 
  layer_lstm(units = 128, dropout = 0.4, recurrent_dropout = 0.4,
             return_sequences = TRUE,
             input_shape = c(180,19)) %>%
  layer_dense(units = 1)

model %>% compile(
  optimizer = optimizer_rmsprop(),
  loss = "mae"
)

history <- model %>% fit_generator(
  train_data_gen,
  epochs = 30,
  steps_per_epoch=5,
  verbose=2
)

我的预测是这样生成的:

testpredict<-predict_generator(model, test_data_gen, steps=1)

但是,我的预测确实很糟糕(在反转归一化之后),并且其形状为[1,1:180,1];我想知道它是否还能预测呼叫的到来。

这些是我的问题: 1.我的timeseries_generators()是否正确定义?我想知道我是否真的必须在长度参数中输入180。是否只考虑180个过去的时间步长,而不考虑整个训练集? 2.输出的形状([1,1:180,1])是否正确?我希望得到一个向量。

0 个答案:

没有答案