时间序列LSTM的特征提取

时间:2018-07-04 12:31:21

标签: python keras lstm feature-extraction

我想将时间序列输入LSTM以执行预测。 可以说我有10000个样本。现在,为了将时间序列输入到我的LSTM中,我将其重塑为(样本,时间步长,功能)。就我而言,我使用timesteps = 50来创建子序列并执行t + 1的预测。所以我以x.shape=(9950,50,1)结尾。到目前为止一切顺利。

我的模特

model= Sequential()
model.add(LSTM(50,return_sequences=True,input_shape=(50,1)))
model.add(Dense(out_dim, activation = 'sigmoid'))
model.compile(loss='mse', optimizer='adam')

现在我要创建人工功能,例如我想将信号的fft用作功能。如何将其输入LSTM?仅计算fft,将其附加到Dataframe并一起重塑形状是否合法,所以我最终得到了(9950,50,2)

问题基本上是:

  1. 如何将人工创建的功能输入LSTM?
  2. 滚动统计信息或关联功能的方法是否相同?

预先感谢

1 个答案:

答案 0 :(得分:0)

您根据输入数据计算出的任何额外功能只是另一个功能,所以:

  1. 您可以像系列的另一个功能input_shape=(50, 1+extra_features)一样喂食它,并且必须在将其传递给模型之前将它们串联起来。所以是的,输入形状现在为(9950, 50, 2)
  2. 是的,您可以预先计算该功能(例如移动平均线),然后将其与原始输入连接起来。

您还可以编写自定义图层来计算模型中的这些特征,但是模型每次都会对其进行计算。如果您先验计算,则优点是可以保存/缓存它。

如果您具有非时间序列功能,则现在需要移至functional API并具有多个输入:1是时间序列,而另一个则不是:

series_in = Input(shape=(50, 2))
other_in = Input(shape(extra_features,)) # not a timeseries just a vector
# An example graph
lstm_out = LSTM(128)(series_in)
merged = concatenate([lstm_out, other_in])
out = Dense(out_dim, activation='sigmoid')(merged)
model = Model([series_in, other_in], out)
model.compile(...)

在这种情况下,我们有2个模型输入,可以在任何点使用辅助功能。在该示例中,我在最终的Dense层之前合并以辅助谓词以及LSTM提取的时间序列特征。