Как использовать свертку NN для моделирования данных временных рядов

У меня есть двумерная матрица со строками, представляющими различные уровни цен, и столбцами, представляющими последние N баров. Например, 2d матрица выглядит так:

Price   Bar0   Bar1   Bar2   Bar3   Bar4   Bar5  ...
0         0     0      1      1       0     0
1         1     0      1      1       0     1
2         1     1      1      1       1     1
3         1     1      0      1       1     0
4         0     0      0      0       1     0
...

эта матрица будет представлять данные о ценах:

       High    Low
Bar0    3       1
Bar1    3       2
Bar2    2       0
Bar3    3       0
Bar4    4       2
Bar5    2       1

Я хотел бы сделать извлечение признаков, используя свертку NN, прежде чем перейти к LSTM для обучения под наблюдением. Должны быть и другие показатели, такие как скользящие средние, которые также передаются в LSTM для обучения.

# LSTM and CNN for sequence classification in the IMDB dataset

import numpy
from keras.datasets import imdb
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM

from keras.layers.convolutional import Conv1D

from keras.layers.convolutional import MaxPooling1D

from keras.layers.embeddings import Embedding
from keras.preprocessing import sequence
# fix random seed for reproducibility
numpy.random.seed(7)
# load the dataset but only keep the top n words, zero the rest
top_words = 5000
(X_train, y_train), (X_test, y_test) = imdb.load_data(num_words=top_words)
# truncate and pad input sequences
max_review_length = 500
X_train = sequence.pad_sequences(X_train, maxlen=max_review_length)
X_test = sequence.pad_sequences(X_test, maxlen=max_review_length)
# create the model
embedding_vecor_length = 32
model = Sequential()
model.add(Embedding(top_words, embedding_vecor_length,    input_length=max_review_length))
model.add(Conv1D(filters=32, kernel_size=3, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=2))
model.add(LSTM(100))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

Я где-то читал вышеупомянутый код для классификации последовательностей, я пытаюсь адаптироваться к временным рядам. Пожалуйста помоги.

1 ответ

Я нашел замечательный пакет, который ищет лучшую архитектуру для моделирования временных рядов: GitHub.com/NLeSC/mcfly

Это обеспечивает модель DeepConvLSTM, которая соответствует моей цели.

Другие вопросы по тегам