在LSTM层之后合并其他功能以进行时间序列预测

时间:2018-09-30 16:34:57

标签: python tensorflow keras time-series lstm

我有以下数据集:

                Feature 1   Feature 2 ...  Feature to Predict
2015-01-01         1000          8                 12
2015-01-02         1200          2                 22
2015-01-03         4000          4                 51
2015-01-04         2000          8                 33
2015-01-05         1000          5                 14

我想使用先前的t + 1时间戳来预测时间n的最后一个特征(“预测特征”)。为此,我使用了多元变量LSTM,该变量使用从t-nt的数据进行训练。

事实是,我也有可能在我要预测的时间“ t + 1”获得其他功能(功能1,功能2 ...)。

我想做的是在LSTM层之后和Dense层之前添加这些附加功能,并将其用于我的“预测特征”。

现在,我的代码没有附加功能,但只有't-n'到't'功能,看起来像这样:

mdl = Sequential()
# create and fit the LSTM network
mdl.addLSTM(neuronsl1,activation = 'tanh' ,return_sequences=True, input_shape=(lags,n_features))
mdl.add(Dropout(0.2))
mdl.addLSTM(neuronsl2,activation = 'tanh' , input_shape=(lags,n_features))
mdl.add(Dropout(0.2))

--------->>> At this point i would like to add the additional features at time 't + 1'

mdl.add(Dense(neuronsl3))
mdl.add(Dense(neuronsl4))
mdl.add(Dense(1))

关于如何做到这一点的任何建议?

1 个答案:

答案 0 :(得分:1)

我想我误解了你的问题。您已经提到要:

  

获取我要预测的时间“ t + 1”的其他功能(功能1,功能2 ...)。

您的数据集中有“功能1”和“功能2”。但是在标题中您提到了“连接附加功能”。因此,如果您要在时间步t+1上不仅预测“预测特征”,而且还预测“特征1”,“特征2”等,则:

  • 只需将最后一个“密集”层中的单位数设置为您要预测的要素数量即可实现所需的功能。另外,如果只想获取时间步长t+1,则需要在最后一个LSTM层中设置return_sequences=False(当然,这是默认情况)。这是因为the Dense layer is applied on the last axis而不是一次处理全部数据。

但是,如果要将最后一个LSTM层的输出与其他功能(需要将其提供为模型的输入)连接起来,则需要使用Keras functional API并使用concatenate功能(或等效的Concatenate层):

mdl_input1 = Input(shape=(lags,n_features))

x = LSTM(neuronsl1, activation='tanh', return_sequences=True)(mdl_input1)
x = Dropout(0.2)(x)
x = LSTM(neuronsl2, activation='tanh')(x)
x = Dropout(0.2)(x)

mdl_input2 = Input(shape=(shape_of_features))

concat = concatenate([x, mdl_input2])

x = Dense(neuronsl3)(x)
x = Dense(neuronsl4)(x)
output = Dense(1)(x)

model = Model([mdl_input1, mdl_input2], output)

# compile the model ...

model.fit([input_array_for_lstm, input_array_additional_features], y_train, ...)