Как улучшить простое однофакторное прогнозирование временных рядов? - PullRequest
0 голосов
/ 10 марта 2020

У меня есть простая однофакторная проблема прогнозирования временных рядов, где мой ввод 10, 20, 30, 40, 50, 60, 70, 80, 90. Я хочу, чтобы модель предсказала следующие 3 значения. то есть вывод должен быть 100, 110, 120.

Я использовал стекированный LSTM для этого. Мой код выглядит следующим образом.

from numpy import array
from keras.models import Sequential
from keras.layers import LSTM, Dense

def split_sequence(sequence, n_steps_in, n_steps_out):
    X, y = list(), list()
    for i in range(len(sequence)):
        # find the end of this pattern
        end_ix = i + n_steps_in
        out_end_ix = end_ix + n_steps_out
        # check if we are beyond the sequence
        if out_end_ix > len(sequence):
            break
        # gather input and output parts of the pattern
        seq_x, seq_y = sequence[i:end_ix], sequence[end_ix:out_end_ix]
        X.append(seq_x)
        y.append(seq_y)
    return array(X), array(y)

raw_seq = [10, 20, 30, 40, 50, 60, 70, 80, 90]
# choose a number of time steps
n_steps_in, n_steps_out = 5, 3
# split into samples
X, y = split_sequence(raw_seq, n_steps_in, n_steps_out)
# reshape from [samples, timesteps] into [samples, timesteps, features]
n_features = 1
X = X.reshape((X.shape[0], X.shape[1], n_features))
model = Sequential()
model.add(LSTM(100, activation='relu', return_sequences=True, input_shape=(n_steps_in, n_features)))
model.add(LSTM(100, activation='relu'))
model.add(Dense(n_steps_out))
model.compile(optimizer='adam', loss='mse')
model.fit(X, y, epochs=50, verbose=0)
# demonstrate prediction
x_input = array([50, 60, 70, 80, 90])
x_input = x_input.reshape((1, n_steps_in, n_features))
yhat = model.predict(x_input, verbose=0)
print(yhat)

Поскольку я использую очень простой пример, я ожидал, что модель будет точно предсказывать. Однако вывод, который я получил, был ужасен ([[135.52011 151.59491 175.79674]]).

Мне интересно, есть ли более эффективный способ сделать это в LSTM?

Я с удовольствием предоставлю более подробную информацию, если необходимо.

1 Ответ

1 голос
/ 10 марта 2020

В такой задаче лучший результат может быть получен с учетом большего количества предыдущих временных шагов.

Также, пожалуйста, примите во внимание, что пример Джейсона Браунли более уместен для нас, чтобы понять, как создать набор данных для прогнозирования временных рядов. Для приличных прогнозов потребуется гораздо больше данных.

В конце концов, в одномерных (только одна особенность, которая будет учитываться при будущих прогнозах) проблемы, более простые (даже статистические модели), такие как ARIMA, SARIMA, могут быть более подходящими .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...