圖:pixabay
原文來源:machine learning mastery
作者:Jason Brownlee
「機器人圈」編譯:多啦A亮
神經網絡諸如長短期記憶(LSTM)循環神經網絡(RNN)能夠幾乎無縫地模拟多個輸入變量的問題。
這是時間序列預測中的一大優點,而經典線性方法難以适應多變量或多輸入預測問題。
在本教程中,你将發現如何在Keras深度學習庫中開發多變量時間序列預測的LSTM模型。
完成本教程後,你将知道:
•如何将原始數據集轉換為可用于時間序列預測的内容。
•如何準備數據并适應多變量時間序列預測問題的LSTM。
•如何做出預測并将結果重新調整到原始單位。
第一步是将日期時間信息整合到一個單獨的日期時間,以便我們可以将其用作Pandas的索引。
快速檢查顯示前24小時pm2.5的NA值。 因此,我們需要删除第一行數據,在數據集中還有幾個分散的“NA”值; 我們現在可以用0值标記它們。
以下腳本加載原始數據集,并将日期時間信息解析為Pandas DataFrame索引。No列被删除,然後為每列指定更清晰的名稱。最後,将NA值替換為“0”值,并删除前24小時。
運行該示例打印轉換後數據集的前5行,并将數據集保存到“pollution.csv”。
現在我們以簡單易用的形式提供數據,我們可以創建每個系列的快速圖,來看看我們得到的。
下面的代碼加載了“pollution.csv”文件,并将每個系列作為單獨的子圖繪制,除了風速是分類的。
運行示例創建一個具有7個子圖,顯示每個變量的5年數據。
空氣污染時間序列線圖
多變量LSTM預測模型
在本節中,我們将使用LSTM解決問題。
LSTM數據準備
第一步是為LSTM準備污染數據集。
這涉及将數據集視為監督學習問題并對輸入變量進行歸一化。
考慮到上一個時間段的污染測量和天氣條件,我們将把監督學習問題作為預測當前時刻(t)的污染情況。
這個構想是直接的,隻是為了這個演示。你可以探索的一些替代方法包括:
•根據過去24小時的天氣和污染情況,預測下一個小時的污染。
•預測下一個小時的污染,并給予下一個小時的“預期”天氣條件。
我們可以使用在下列文章中開發的series_to_supervised()函數來轉換數據集:
•如何将時間序列轉換為Python中的監督學習問題。
首先,加載“pollution.csv”數據集。風速特征是标簽編碼(整數編碼)。如果你有興趣探索,這可能會在将來進一步被熱編碼。
其次,所有功能都被歸一化,然後将數據集轉換為監督學習問題。然後删除要預測的小時的天氣變量(t)。
完整的代碼清單如下:
運行示例打印轉換後的數據集的前5行。我們可以看到8個輸入變量(輸入序列)和1個輸出變量(當前小時的污染水平)。
這個數據準備很簡單,我們可以探索更多的東西。你可以看到的一些想法包括:
•獨熱編碼風速。
•通過差分和季節性調整使所有系列固定。
•提供超過1小時的輸入時間步長。
最後一點可能是最重要的,因為在學習序列預測問題時,LSTMs通過時間使用反向傳播。
定義和拟合模型
在本節中,我們使用多變量輸入數據的LSTM。
首先,我們必須将準備好的數據集分成訓練集和測試集。為了加快對這次示範的訓練速度,我們将僅适用于數據第一年的模型,然後對其餘4年的數據進行評估。如果你有時間,請考慮浏覽此測試工具的倒置版本。
下面的示例将數據集分成訓練集和測試集,然後将訓練集和測試集分成輸入和輸出變量。 最後,将輸入(X)重構為LSTM預期的3D格式,即[樣本,時間步長,特征。
運行此示例打印訓練集的形狀,并測試輸入和輸出集合約9000小時的數據進行訓練,約35000小時的數據進行測試。
現在我們可以定義并配置LSTM模型
我們将在第一個隐藏層中定義具有50個神經元的LSTM以及輸出層中用于預測污染的的1個神經元。輸入形式将是一個時間具有8個特征的步長,。
我們将使用平均絕對誤差(MAE)損失函數和随機梯度下降的高效Adam版本。
該模型将配置為适用于50個批量大小為72的訓練周期。請記住,每個批處理結束時,Keras中的LSTM的内部狀态都将重置,因此一個内部狀态是一個有關大量天數的函數将會有所幫助。(不妨試一試)。
最後,我們通過在fit()函數中設置validation_data參數來跟蹤訓練過程中的訓練和測試損失,然後在運行結束時,繪制訓練和測試損失曲線圖。
評估模型
當模型配置好之後,我們可以對整個測試數據集進行預測。
我們将預測與測試數據集相結合,并進行反縮放,我們還用預期的污染數據對測試數據集進行反縮放。
以預測值和實際值為原始尺度,我們可以計算模型的誤差值。在這種情況下,我們計算出在與變量本身相同的單位中産生誤差的均方根誤差(RMSE)。
完整示例
完整的示例如下所示:
想要運行示例的話,首先需要創建一個繪圖,顯示訓練期間的訓練和測試損失。
有趣的是,我們可以看到測試損失低于訓練損失。該模型可能過度拟合訓練數據。在訓練過程中測量和繪制RMSE曲線可能會使這一點顯現得更加明顯。
訓練期間多元LSTM的訓練集和測試線路圖
訓練和測試損失在每個訓練時期結束時都會打印出來。在運行結束時,打印測試數據集上模型的最終RMSE。
我們可以看到,該模型實現了3.836的可觀RMSE,這顯著低于用持續模型發現的30 RMSE。
進一步閱讀
如果你想進一步深入了解,本部分将提供更多關于該主題的資源。
•在UCI機器學習庫中的北京PM2.5數據集。
•Keras長短期記憶模型的5步生命周期。
•使用Python中的長短期記憶模型進行時間序列預測。
•用Python中的長短期記憶模型進行多步時間序列預測。
總結
在本教程中,你發現了如何将LSTM适用于多變量時間序列預測問題。
具體來說,通過本教程你将學到:
•如何将原始數據集轉換為可用于時間序列預測的内容。
•如何準備數據并配置用于多變量時間序列預測問題的LSTM。
•如何做出預測并将結果重新調整到原始單元中。
,