Làm thế nào để làm cho LSTM dự đoán nhiều bước thời gian phía trước?


9

Tôi đang cố gắng sử dụng LSTM để dự đoán chuỗi thời gian. Các luồng dữ liệu trong một lần mỗi phút, nhưng tôi muốn dự đoán trước một giờ. Có hai cách tôi có thể nghĩ về việc này:

  1. Thay vào đó, ép dữ liệu thành dữ liệu hàng giờ, lấy trung bình trong mỗi khoảng thời gian 60 phút làm một điểm dữ liệu.
  2. Đối với mỗi (X, y)cặp dữ liệu huấn luyện, hãy Xlà chuỗi thời gian từ t - 120đến t - 60và hãy ylà chuỗi thời gian từ t - 60đến t. Buộc LSTM dự đoán 60 dấu thời gian phía trước và lấy y[-1]làm dự đoán.

Có thực hành tốt nhất để đi về điều này?


LSTM là gì? Mô hình chuỗi thời gian nhỏ nhất có thể?
Michael R. Chernick

2
Bạn có cần 60 dự đoán, hay chỉ là dự đoán cuối cùng? Nếu bạn chỉ cần cái cuối cùng, chỉ cần cung cấp giá trị y = t + 60 để đào tạo. Tôi không nghĩ điều quan trọng (đối với LSTM) là giá trị bạn dự đoán là giá trị tiếp theo. Vì vậy, nếu bạn muốn dự đoán xa hơn trong thời gian, chỉ cần đào tạo nó theo cách đó.
photox

sử dụng dự báo nhiều bước với dữ liệu mỗi phút bạn có với giá trị độ trễ phù hợp
SATYAJIT MAITRA

Câu trả lời:


6

Có nhiều cách tiếp cận khác nhau

  • Chiến lược đệ quy

    • một mô hình nhiều-một

      prediction(t+1) = model(obs(t-1), obs(t-2), ..., obs(t-n))
      prediction(t+2) = model(prediction(t+1), obs(t-1), ..., obs(t-n)) 
      
  • Chiến lược trực tiếp

    • nhiều mô hình nhiều-một

      prediction(t+1) = model1(obs(t-1), obs(t-2), ..., obs(t-n))
      prediction(t+2) = model2(obs(t-2), obs(t-3), ..., obs(t-n))`
      
  • Chiến lược nhiều đầu ra

    • một mô hình nhiều-nhiều

      prediction(t+1), prediction(t+2) = model(obs(t-1), obs(t-2), ..., obs(t-n))`
      
  • Chiến lược lai

    • kết hợp hai hoặc nhiều chiến lược trên

Tham khảo: Dự báo chuỗi thời gian nhiều bước


3

Từ https://machinelearningmastery.com/multi-step-time-series-forecasting-long-short-term-memory-networks-python/

train = [[t-120,t-199...t,t+1...t+60],[...],[...]]

# fit an LSTM network to training data
def fit_lstm(train, n_lag, n_seq, n_batch, nb_epoch, n_neurons):
    # reshape training into [samples, timesteps, features]
    X, y = train[:, 0:n_lag], train[:, n_lag:]
    X = X.reshape(X.shape[0], 1, X.shape[1])
    # design network
    model = Sequential()
    model.add(LSTM(n_neurons, batch_input_shape=(n_batch, X.shape[1], X.shape[2]), stateful=True))
    model.add(Dense(y.shape[1]))
    model.compile(loss='mean_squared_error', optimizer='adam')
    # fit network
    for i in range(nb_epoch):
        model.fit(X, y, epochs=1, batch_size=n_batch, verbose=0, shuffle=False)
        model.reset_states()
    return model

Tôi không chắc chắn những gì bạn đang nhắm đến. Hoặc bạn trả lời câu hỏi hoặc bạn hỏi một câu hỏi mới. Bạn có thể chỉ cần xóa câu cuối cùng của bạn.
Ferdi

đã xóa "Bạn đã bao giờ tìm thấy một cách tiếp cận phù hợp với mình chưa?" , nhưng vâng, tôi rất tò mò về cách anh chàng này tiến hành kể từ khi tôi đang thực hiện một nhiệm vụ rất giống nhau
user4446237

Thx cho chỉnh sửa của bạn. Nếu bạn rất quan tâm, bạn có thể bắt đầu một tiền thưởng ngay khi bạn có 75 đại diện. Tôi không biết cách nào khác để thu hút sự quan tâm đến câu hỏi.
Ferdi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.