繁体   English   中英

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

[英]Categorical variable for time series prediction with LSTM and keras

我有一个LSTM模型(keras),它接收6变量的过去20值作为输入,并预测其中3 6变量的未来4值。 换句话说,我有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)的输入矩阵吗?

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

此主题可能会让您感兴趣: 向时间序列模型LSTM添加功能

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

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

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

我写了一个库来辅助输入。 它抽象了所有的复杂性,并设计为尽可能方便用户:

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

实现是张量流(> = 1.13.1)和Keras。

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM