我有以下数据集:
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-n
到t
的数据进行训练。
事实是,我也有可能在我要预测的时间“ 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))
关于如何做到这一点的任何建议?
答案 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, ...)