使用 LSTM 和 keras 进行时间序列预测的分类变量

问题描述 投票:0回答:2

我有一个 LSTM 模型(keras),它接收

20
变量的过去
6
值作为输入,并预测这些变量的
4
的未来
3
值。换句话说,我有 6 个时间序列,我正在尝试使用它们的 20 个过去值来预测它们的未来值。基本代码是:

past_time_steps = 6
future_time_steps = 4
inputs = Input(shape=(20,past_time_steps))
m = LSTM(hid, return_sequences=True)(inputs)
m = Dropout(0.5)(m)
m = LSTM(hid)(m)
m = Dropout(0.5)(m)
outputA = Dense(future_time_steps, activation='linear', W_constraint=nonneg())(m)
outputB = Dense(future_time_steps, activation='linear', W_constraint=nonneg())(m)
outputC = Dense(future_time_steps, activation='linear', W_constraint=nonneg())(m)
m = Model(inputs=[inputs], outputs=[outputA, outputB, outputC])
m.compile(optimizer='adam', loss='mae')
m.fit(x,[y1,y2, y2])

因此,输入是一个形状为

(500,20,6)
的 numpy 矩阵,其中
500
表示样本数(例如训练时间序列)。

现在,我有可用的新数据,所以对于每个时间序列,我都有一个分类变量(可以取 6 个值:

0,1,2,3,4,5
)。如何将此信息添加到模型中?我可以添加另一个使用这个变量的层吗?我应该在时间序列的开始/结束时填充这个变量,以便我有一个形状为
(500,21,6)
的输入矩阵吗?

python deep-learning keras lstm categorical-data
2个回答
0
投票

One_hot_encode 分类变量并以与其他时间数据相同的方式对其进行预处理。您的时间步长不受此新数据的影响。受影响的只是变量的数量。


0
投票

您可能对这个话题感兴趣:Adding Features To Time Series Model LSTM.

你基本上有3种可能的方式:

让我们以两个不同城市的天气数据为例:巴黎和旧金山。你想根据历史数据预测下一个温度。但与此同时,您预计天气会根据城市而变化。您可以:

  • 将辅助特征与时间序列数据结合起来,在开头或结尾(丑陋!)。
  • 将辅助特征与 RNN 层的输出连接起来。这是某种后 RNN 调整,因为 RNN 层不会看到此辅助信息。
  • 或者只是用学习到的条件表示来初始化 RNN 状态(例如巴黎或旧金山)。

我写了一个库来调节辅助输入。它抽象了所有的复杂性,并被设计成尽可能对用户友好:

https://github.com/philipperemy/cond_rnn/

实现在tensorflow(>=1.13.1)和Keras中。

希望对您有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.