熱線電話:13121318867

登錄
首頁大數據時代如何進行多變量LSTM時間序列預測未來一周的數據?
如何進行多變量LSTM時間序列預測未來一周的數據?
2023-04-07
收藏

隨著時間序列分析的普及,LSTM 成為了深度學習中最常用的工具之一。它以其優異的性能和對數據的自適應特征提取而聞名。然而,在實際應用中,我們通常需要通過多變量來預測未來時間序列數據。本文將介紹如何使用多變量 LSTM 模型來進行時間序列預測,并且給出一個例子來預測未來一周的氣溫。

首先,我們需要準備數據集。在本例中,我們將使用包含多個變量的天氣數據。這些變量包括溫度、濕度、風速、降雨量等。我們將選取最近一年的數據,將其前80%作為訓練集,后20%作為測試集。

接下來,我們需要對數據進行歸一化處理。由于不同變量之間的值域差異較大,我們需要將其進行縮放到一個相同的范圍內。這里我們將使用 Scikit-Learn 庫中的MinMaxScaler函數。

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
train_data = scaler.fit_transform(train_data)
test_data = scaler.transform(test_data)

接下來,我們需要將數據轉換成適合 LSTM 模型的格式。在多變量情況下,我們需要將每個時刻的輸入向量擴展到包含多個變量。這里我們將以過去 30 天的數據為輸入,預測未來一周的氣溫。

import numpy as np def create_dataset(X, y, time_steps=1):
    Xs, ys = [], [] for i in range(len(X) - time_steps):
        v = X[i:i + time_steps]
        Xs.append(v)
        ys.append(y[i + time_steps]) return np.array(Xs), np.array(ys)

TIME_STEPS = 30 X_train, y_train = create_dataset(train_data, train_data[:, 0], TIME_STEPS)
X_test, y_test = create_dataset(test_data, test_data[:, 0], TIME_STEPS)

接下來,我們可以構建 LSTM 模型。在本例中,我們將使用兩層 LSTM 和一個全連接層。模型的輸入形狀應該是(samples, time_steps, features)。

from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, LSTM

model = Sequential([
    LSTM(units=64, input_shape=(X_train.shape[1], X_train.shape[2]), return_sequences=True),
    LSTM(units=32, return_sequences=False),
    Dense(units=1)])

在訓練模型之前,我們需要定義損失函數和優化器,并編譯模型。

model.compile(loss='mean_squared_error', optimizer='adam')

現在,我們可以開始訓練模型。在每個 epoch 后,我們將記錄訓練集和測試集上的損失值,并可視化它們的變化。

history = model.fit(
    X_train, y_train,
    epochs=50,
    batch_size=16,
    validation_split=0.1,
    verbose=1,
    shuffle=False) import matplotlib.pyplot as plt

plt.plot(history.history['loss'], label='train')
plt.plot(history.history['val_loss'], label='test')
plt.legend()
plt.show()

在模型訓練完成后,我們可以對測試集進行預測,并將預測結果與真實值進行比較。

y_pred = model.predict(X_test)

plt.plot(y_test, label='true')
plt.plot(y_pred, label='predicted')
plt.legend()
plt.show()

最后,我們將使用訓練好的模型來預測未來一周的氣溫。首先,我們需要獲取最近 30 天的數據,然后使用模型進行預測。每次預測完之后,我們將新的預測值添加到輸入序列中,用于下一次的預測。

X_last30

= test_data[-TIME_STEPS:] forecast = [] for i in range(7): y_pred_one = model.predict(X_last30.reshape(1, TIME_STEPS, -1)) forecast.append(y_pred_one[0, 0]) X_last30 = np.vstack((X_last30[1:], y_pred_one))

forecast = scaler.inverse_transform(np.array(forecast).reshape(-1, 1))

以上便是使用多變量 LSTM 進行時間序列預測的整個流程。通過訓練模型,我們可以獲得對未來數據的預測結果,并且不僅僅考慮了單一變量的影響,而是綜合了多個變量的影響。當然,這只是一個簡單的例子,實際應用中可能會涉及到更加復雜的數據和模型。

相信讀完上文,你對算法已經有了全面認識。若想進一步探索機器學習的前沿知識,強烈推薦機器學習半監督學習課程。

學習入口:https://edu.cda.cn/goods/show/3826?targetId=6730&preview=0
涵蓋核心算法,結合多領域實戰案例,還會持續更新,無論是新手入門還是高手進階都很合適。趕緊點擊鏈接開啟學習吧!

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢