gpt4 book ai didi

neural-network - 如何为具有外部特征的时间序列多步范围构建 LSTM 的输入数据?

转载 作者:行者123 更新时间:2023-12-03 14:56:16 25 4
gpt4 key购买 nike

我正在尝试使用 LSTM 进行商店销售预测。这是我的原始数据的样子:

|     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 |

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

我开始服用 仅 storeID=1 数据 测试 LSTM。如果我的数据 只有日期和销售额 .我将以这种方式构建我的 trainX 和 trainY(如果我错了,请纠正我):
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] |
...

改造后两人
trainX.shape
(300, 1, 20)
trainY.shape
(300, 10)

问题1:在这种情况下,[样本、时间步长、特征] = [300, 1, 20]。这是正确的吗?或者我应该将样本构造为 [300, 20, 1] 吗?

问题2:我确实想在原始数据中使用其他信息,例如温度、存储类型等。我应该如何为 LSTM 构建输入数据?

问题3:到目前为止,我们只讨论了 1 个店铺预测,如果我想对所有店铺进行预测,那么我应该如何构建我的输入数据呢?

目前我正在从 here 流出示例,但似乎不足以涵盖我所拥有的场景。我真的很感谢你的帮助!

最佳答案

我最近正在解决类似的问题。在你的情况下:

  • 输入应该有形状 (300, 20, 1) - 因为你有长度为 20 的时间序列与 1特征。
  • 你可以这样做:
    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)
    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)
  • 这是最难的部分。我 不要建议您通过将它们作为一个特征向量输入网络来预测多个商店。您可能会简单地跳过这一部分并尝试使用一个模型或使用例如后处理输出来预测不同的商店。某种图形模型或PCA在行是日销售额的矩阵上。

  • 更新:

    为了处理多个顺序功能,您可以执行以下操作:
        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_featuresstore_typefeatures .

    关于neural-network - 如何为具有外部特征的时间序列多步范围构建 LSTM 的输入数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42585356/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com