用AI預測北京霧霾?有Keras在手,LSTM可分分鐘解決
GIF/1.7M
圖:pixabay
原文來源:machine learning mastery
作者:Jason Brownlee
「機器人圈」編譯:多啦A亮
神經網路諸如長短期記憶(LSTM)循環神經網路(RNN)能夠幾乎無縫地模擬多個輸入變數的問題。
這是時間序列預測中的一大優點,而經典線性方法難以適應多變數或多輸入預測問題。
在本教程中,你將發現如何在Keras深度學習庫中開發多變數時間序列預測的LSTM模型。
完成本教程後,你將知道:
?如何將原始數據集轉換為可用於時間序列預測的內容。
?如何準備數據並適應多變數時間序列預測問題的LSTM。
?如何做出預測並將結果重新調整到原始單位。
讓我們開始吧。
教程概述
本教程分為3部分,他們是:
?空氣污染預報
?基本數據準備
?多變數LSTM預測模型
Python環境
本教程假定你已安裝Python SciPy環境。你可以在本教程中使用Python 2或3。
你必須使用TensorFlow或Theano後台安裝Keras(2.0或更高版本)。
本教程還假定你已經安裝了scikit-learn、Pandas、NumPy和Matplotlib。
如果你需要安裝環境方面的幫助,請參閱這篇文章:
《如何用Anaconda設置機器學習和深度學習的Python環境》
空氣污染預報
在本教程中,我們將使用空氣質量數據集。
這是一個數據集,在美國駐北京的大使館五年內每小時報告天氣和污染水平。
數據包括日期時間, PM2.5污染物,以及天氣信息,包括露點、溫度、氣壓、風向、風速以及降雨和降雪的累積小時數。原始數據中的完整功能列表如下:
1.No: 行號
2.year: 這一行的一年數據
3.month: 這一行的月數據
4.day: d這一行的日數據
5.hour: 這一行的小時數據
6.pm2.5: PM2.5濃度
7.DEWP: 露點
8.TEMP: 溫度
9.PRES:氣壓
10.cbwd: 組合風向
11.Iws: 累積風速
12.Is: 積雪時間
13.Ir: 累積的降雨時間
我們可以使用這些數據並構建一個預測問題,鑒於天氣條件和前幾個小時的污染,我們預測下一個小時的污染。
此數據集可用於構建其他預測問題。
你可以從UCI Machine Learning Repository下載數據集。
?北京PM2.5數據集
下載數據集並將其放在你當前的工作目錄中,文件名為「raw.csv」。
基礎數據準備
數據沒還有準備好去使用。所以,我們必須先做好準備。
以下是原始數據集的前幾行:
第一步是將日期時間信息整合到一個單獨的日期時間,以便我們可以將其用作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。
?如何做出預測並將結果重新調整到原始單元中。
※複製化石就位,英國古洞穴重新開業
※一文初識 「金」在藥物研發及有機反應中的應用
※花它1個億!NSF給19個「大腦」AI項目提供支持
※你知道「模仿學習」功能強大,但它和「強化學習」有什麼關係?
※同樣做語音,他們為什麼不造音箱推了 「搜狗聽寫」?
TAG:機器人圈 |
※ABI Research預測AR在零售業將獲得重大應用
※DeepMind 團隊 CASP 奪冠:用 AlphaFold 預測蛋白質結構
※分析師預測:新iPad Pro將首度用上USB-C介面
※Superdata報告預測AR/MR收入將超越VR
※Superdata報告預測AR和MR將崛起
※Sensor Tower預測:《PUBG Mobile》上月收入超《堡壘之夜》手游
※MathWorks 為 MATLAB 添加新的預測性維護產品
※iPhone XR本周五開啟預購!預測iPhone XR將大賣!
※KGI預測6.1英寸LCD iPhone將幫蘋果從較低的iPhone X銷售中反彈
※Superdata報告預測,AR和MR的軟體收入將超過VR
※谷歌AI系統DeepMind可預測腎臟損傷
※Bang與Wolf預測msi賽果:SKT奪冠,第二名產生分歧
※Superdata報告預測AR/MR收入將超越VR,遊戲是主要收入
※Magic Leap UI界面曝光,微軟用AI預測Win 10更新時間
※港媒蘋果月底發布會5大預測,新iPad Pro及Retina屏版MBA最受期待
※Google AI在現場比賽期間預測NCAA Final Four的獲勝者
※ABI Research預測AR智能眼鏡需求將不斷增加
※新一代iPad Pro預測總匯:全面屏+Face ID
※Half Dome已超OC3預測,Oculus再預測VR未來發展與挑戰
※ESPN預測Faker離開SKT後會去的戰隊:EDG、TL、GEN.G、KT