如何在LSTM模型中将未来预测作为时间序列的输入变量?

这是一个我找不到明确答案的一般性问题,只有一些提示表明这是可能的:

假设我想预测未来的销售额。

y(t+1) = 第t+1天的销售额(t+1 = 次日)

我有两个输入变量:历史销售额和历史天气预报。

x1(t) = 第t天的历史销售额x2(t) = 第t天的历史天气预报

在训练了一个模型后,我可以预测y(t+1)。

但是,如何将未来的天气数据作为输入使用呢?我已经有了第t+1天的天气预报,这将影响我的销售额,我希望将其作为输入使用 – 在这种情况下是x2(t+1)。如下所示:

输出:y(t+1)输入:x1(t)x2(t)x2(t+1) <------

在LSTM模型中是否可以加入这一功能?如果可以,训练和使用模型的输入矩阵应该是什么样的?


回答:

您的理解是正确的。您可以将当前天气和之前的销售额作为输入来预测当前的销售额。

sales[t+1] = RNN(weather[t+1], sales[t]) <-- [正确]

然而,提供之前的天气数据并不是必要的,因为相关信息会通过隐藏特征传播。

sales[t+1] = RNN(weather[t+1], weather[t], sales[t]) <-- [错误]

示例

假设这是我们的样本数据。

df = pd.DataFrame([{'weather':1, 'sales':500}, {'weather':3, 'sales':200}, {'weather':2, 'sales':400}, {'weather':0, 'sales':600}])print(df)   weather  sales0        1    5001        3    2002        2    4003        0    600

我们需要生成具有特定维度的训练输入。

#训练输入维度 = (训练样本数, seq_length, 特征数)seq_len = 3 #LSTM循环的次数n_features = 2 #天气和销售额被视为输入training_input = torch.zeros((df.shape[0], seq_len, n_features))row = torch.zeros(seq_len, n_features)for i in range(df.shape[0]):    row[:-1] = row[1:]    prev_sales = df.sales[i-1] if i > 0 else 0 #即,sales[-1] = 0    row[-1, :] = torch.tensor([df.weather[i], prev_sales])    training_input[i] = rowprint(training_input)tensor([[[  0.,   0.],         [  0.,   0.],         [  1.,   0.]],        [[  0.,   0.],         [  1.,   0.],         [  3., 500.]],        [[  1.,   0.],         [  3., 500.],         [  2., 200.]],        [[  3., 500.],         [  2., 200.],         [  0., 400.]]])

以下部分是一个关于将训练输入提供给LSTM层的示例。

初始化LSTM参数

input_size = 2 #天气和之前的销售额被视为输入hidden_size = 2 #可以使用任何数字n_layers = 1 #堆叠的LSTM数量。在这种情况下,只使用了一个LSTMbatch_size = training_input.size()[0] #一次性传递整个训练输入

初始化hidden_input

hidden_input = torch.zeros(n_layers,batch_size,hidden_size), torch.zeros(n_layers,batch_size, hidden_size)

创建LSTM层

lstm = nn.LSTM(input_size,hidden_size)

训练输入必须根据LSTM类中forward函数的接受输入维度进行重塑。

lstm_input = training_input.view(seq_len,batch_size,input_size)out, hidden = lstm(lstm_input, hidden_input)print(out[-1])tensor([[2.0370e-10, 9.6134e-07],    [2.2299e-25, 7.1835e-28],    [2.0600e-10, 1.1409e-06],    [8.0952e-21, 1.2101e-24]], grad_fn=<SelectBackward>)

有关更多信息,请参考Pytorch的LSTM层文档。希望这对您有帮助。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注