簡體   English   中英

時間序列LSTM的特征提取

[英]Feature extraction for Timeseries LSTM

我想將時間序列輸入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')

現在,我想創建人造特征,例如,我想將信號的ftf作為特征。 如何將其輸入LSTM? 僅計算fft,將其附加到Dataframe並一起重塑形狀是否合法,所以我最終得到(9950,50,2)

問題基本上是:

  1. 如何將人工創建的功能輸入LSTM?
  2. 滾動統計或關聯功能的方式是否相同?

提前致謝

您從輸入數據計算出的任何其他功能都只是另一個功能,因此:

  1. 您可以像輸入序列的另一個特征一樣input_shape=(50, 1+extra_features)並且必須在將它們傳遞給模型之前對其進行串聯。 所以是的,輸入形狀現在將是(9950, 50, 2)
  2. 是的,您可以預先計算該功能(例如移動平均線),然后將其與原始輸入連接起來。

您也可以編寫自定義圖層來計算模型中的這些特征,但是模型每次都會對其進行計算。 如果您先驗計算,則優點是可以保存/緩存它。

如果您具有非時間序列功能,那么現在您需要使用功能性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提取的時間序列特征。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM