首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何构造具有外部特征的时间序列多步视界的LSTM输入数据?

如何构造具有外部特征的时间序列多步视界的LSTM输入数据?
EN

Stack Overflow用户
提问于 2017-03-03 17:46:07
回答 1查看 6.2K关注 0票数 18

我试着用LSTM做商店销售预测。以下是我的原始数据的样子:

代码语言:javascript
复制
|     Date   | StoreID | Sales | Temperature |  Open   | StoreType |
|------------|---------|-------|-------------|---------|-----------|
| 01/01/2016 |   1     |   0   |      36     |    0    |     1     |
| 01/02/2016 |   1     | 10100 |      42     |    1    |     1     |
| ...
| 12/31/2016 |   1     | 14300 |      39     |    1    |     1     |
| 01/01/2016 |   2     | 25000 |      46     |    1    |     3     |
| 01/02/2016 |   2     | 23700 |      43     |    1    |     3     |
| ...
| 12/31/2016 |   2     | 20600 |      37     |    1    |     3     |
| ...
| 12/31/2016 |   10    | 19800 |      52     |    1    |     2     |

我需要预测未来10天的销售额。在这个例子中,我需要预测从01-01-2017到01-10-2017的商店销售额。我知道如何使用其他时间序列模型或回归模型来解决这个问题,但我想知道RNN是否是一个很好的选择。

首先,我只使用 storeID=1 data来测试LSTM。如果我的数据只有日期和销售。我将以这种方式构造我的trainX和trainY (如果我错了,请纠正我):

代码语言:javascript
复制
Window = 20
Horizon = 10

|         trainX                  |          trainY              |
| [Yt-10, Yt-11, Yt-12,...,Yt-29] | [Yt, Yt-1, Yt-2,...,Yt-9]    |
| [Yt-11, Yt-12, Yt-13,...,Yt-30] | [Yt-2, Yt-3, Yt-4,...,Yt-10] |
| [Yt-12, Yt-13, Yt-14,...,Yt-31] | [Yt-3, Yt-4, Yt-5,...,Yt-11] |
...

在重新塑造两人之后

代码语言:javascript
复制
trainX.shape
(300, 1, 20)
trainY.shape
(300, 10)

Question1:在本例中是,示例、时间步骤、特性= 300、1、20,对吗?或者我应该将样本构造为300,20,1?

Question2:我确实想使用原始数据中的其他信息,如温度、StoreType等。我应该如何构造LSTM的输入数据?

Question3:到目前为止,我们只讨论了一个商店预测,如果我想对所有商店进行预测,那么应该如何构造我的输入数据呢?

目前,我正在从这里中获取示例,但似乎还不足以涵盖我所拥有的场景。我真的很感激你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2017-03-04 18:12:04

我最近在解决类似的问题。就你而言:

  1. 输入应该具有形状(300, 20, 1) --因为您有长度为20的时间序列和1功能。
  2. 你可以这样做: sequential_input = Input(shape=(20,1)) feature_input = Input(shape=(feature_nb,)) lstm_layer = LSTM(lstm_units_1st_layer,return_sequences=True)(sequential_input) lstm_layer = LSTM(lstm_units_2nd_layer,return_sequences=True)(lstm_layer)lstm_layer = LSTM(lstm_units_nth_layer,return_sequences=False)(lstm_layer)合并=合并(lstm_layer,feature_input,mode='concat')共混=致密(blending_units_1st_layer,激活=‘relu’)(合并)共混=稠密(blending_units_2nd_layer,激活=‘relu’)(共混)输出=稠密(10)(混合)
  3. 这是最难的部分。I建议您通过将它们作为一个特征向量输入网络来预测多个商店。您可以简单地跳过这个部分,尝试使用一个模型或后处理输出来预测不同的商店,例如使用某种图形模型或矩阵上的PCA,其中行是日销售额。

更新:

为了处理多个顺序特性,您可以执行以下操作:

代码语言:javascript
复制
    sequential_input = Input(shape=(20, nb_of_sequental_features))
    feature_input = Input(shape=(feature_nb,))
    lstm_layer = LSTM(lstm_units_1st_layer, return_sequences=True)(sequential_input)
    lstm_layer = LSTM(lstm_units_2nd_layer, return_sequences=True)(lstm_layer)
    ...
    lstm_layer = LSTM(lstm_units_nth_layer, return_sequences=False)(lstm_layer)
    merged = merge([lstm_layer, feature_input], mode='concat')
    blend = Dense(blending_units_1st_layer, activation='relu')(merged)
    blend = Dense(blending_units_2nd_layer, activation='relu')(blend)
    ...
    output = Dense(10)(blend)
    model = Model(input=[sequential_input, feature_input], output=output])

在这种情况下,您的输入应该由两个表组成:[sequential_data, features]sequential_data.shape = (nb_of_examples, timesteps, sequential_features)features.shape = (nb_of_examples, feature_nb)。因此,salestemperature应该存储在sequential_features中,store_type存储在features中。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42585356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档