从LSTM预测中排除一种热还原数据

时间:2019-06-07 09:15:03

标签: python tensorflow keras lstm prediction

我正在使用Keras LSTM对一家公司的每日销售数据进行预测。数据的原始形状为[60个商店x 1034天x 207个产品]。我创建了像这样的一天的一站式展示:

      
  • 星期一1 0 0 0 0 0 0
  •   
  • 星期二0 1 0 0 0 0 0
  •   
  • 星期三0 0 1 0 0 0 0
  •   
  • 星期四0 0 0 1 0 0 0
  •   
  • 星期五0 0 0 0 1 0 0
  •   
  • 星期六0 0 0 0 0 1 0
  •   
  • 星期日0 0 0 0 0 0 1 1

此代表已添加到所有商店的日期,因此新形状的形状为[60个商店x 1034天x(207个产品+ 7天)]

对于具有重要意义的天,我又添加了一个名为S_day的列,其值为0或1。

因此,数据的最终尺寸为[60 x 1034 x 215]。

我用于训练上层973天,并为每个商店测试集合的最后61天。
train_x [60 x 973 x 215]
train_y [60 x 973 x 215]
test_x [60 x 973 x 215](数据形状为[60 x 61 x 215],但我们填充零以匹配形状)
test_y [60 x 973 x 215](数据形状为[60 x 61 x 215],但我们填充零以匹配形状)

y数据是x数据,它们以滞后-1移位,以便作为第二天的预测目标。

我的问题是我需要从最终预测中排除这8个额外的列。

# design model
model = Sequential()
model.add(LSTM(100, input_shape=(train_x.shape[1], train_x.shape[2]), return_sequences=True))
model.add(Dense(train_x.shape[2]))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])


# fit model
history = model.fit(train_x, train_y,
                    epochs=10,
                    batch_size=2,
                    validation_data=(test_x, test_y),
                    verbose=2,
                    shuffle=False)


# make a prediction
test_pred = model.predict(test_x)

2 个答案:

答案 0 :(得分:0)

我认为您在尺寸上犯了一个错误。它应该是(60 x 1034 x 7 x 207 x 1),因此网络具有4个暗淡的输入,您先展平,然后再传递到密集层并获取输出。如果您可以发布代码图像以获取数据,则可以使其更加清晰。

可以使用one_hot_decoder()将输出转换为所需的任何内容

答案 1 :(得分:0)

我找到了解决该问题的方法,我只需要重塑来自train_y和train_x的下落的8列即可获得207个要素并在密集层输入207中