利用LSTM進行空氣指數預測

畢設終於結束,感謝指導老師以及團隊大夥們的辛苦付出,是時候總結一下畢設的內容了。
我們團隊的畢業設計是關於利用遞歸神經網絡模型LSTM(long-short-term memory)對中國主要城市的空氣質量指數進行預測,並將LSTM與RLS進行比較,論文的主要內容是數據分析,機器學習。

之前對於機器學習一片空白的我在經歷了畢業設計之後,接觸到了幾個比較常見的模型,接觸到了tensorflow以及keras庫,接觸到了神祕的遞歸神經網絡,激勵函數,超參數,梯度下降等機器學習中的概念,很有必要做個筆記,形成一套方法論,爲後面的學習工作作準備。

經過兩三個禮拜的簡易研究,個人並沒有深入機器學習底層的數學原理研究,更多的是focus在應用板塊,也就是利用代碼庫進行一些簡易的模型設計,並訓練來得到自己想要的結果。

在機器學習的使用過程中,我認爲難度最大的地方在於源數據清理,模型參數的選取。接下來我嘗試使用LSTM對中國部分城市的空氣質量指數進行簡易的預測。

在進行構建模型與預測之前,第一步就是分析數據集合的性質,觀察數據集合需不需要歸一正則化等等,
源數據
通過觀察原數據的格式我們可以發現,這裏面的數據只有每一天的空氣質量指數,也就是隻有一個屬性值,那就說明我們不需要去除量綱,進行所謂的歸一化操作。

分析完數據之後我們要明白遇到的問題是屬於什麼類型的學習問題。是無監督的還是有監督的?我們設想的是通過前幾天的數據去預測空氣指數,那麼是否可以抽象成爲以下的表格,其中t爲我們需要預測的。
監督學習
就拿這表格的例子告訴我們,模型通過讀取前4天的數據,嘗試去預測第5天(t爲預測值),通過計算第5天的預測值與實際值之間的誤差來不斷修正模型。那就說明模型可以通過源數據獲取到真實值,再與預測值進行比較,這種給模型真實值去優化模型的訓練方式其實就是監督學習。即通過告知模型預測結果的好壞來使得模型不斷優化。

既然明白了該問題的本質,接下來就是將源數據集格式進行轉換,將時間序列的問題轉化爲監督學習問題,這樣我們就可以使用Keras的包進行模型構建了。

對於機器學習的模型,我們需要將數據集合劃分爲三個部分,分別爲訓練數據集,驗證數據集以及預測數據集,我這裏將60%的數據作爲訓練集合,20%驗證集合,20%預測集合。如下圖所示,將數據切分完畢後傳入time_to_supervised()方法進行時間序列轉監督學習。
數據轉換
數據切割以及格式轉換完畢後,就需要設計模型進行訓練了。機器學習領域模型沒有唯一的設計方式,正因爲它的隨機性,需要我們使用一些手段去對模型的表現進行評估,在這裏使用mean squared error以及預測結果和真實值之間的correlation,spearman correlation來衡量模型的表現。

對於超參數的選定,比如epoch的次數, batch size的大小等都是依據“經驗”判斷,對於我這種沒有經驗的只能先依據前人的一些試驗結論進行調參。整個調參,優化模型的過程可以抽象爲一下的流程圖。

模型設計
經過大量的試驗與修正參數之後,我們就會得到一個比較好的模型,接下來就是使用模型去進行預測了,當然數據可視化在機器學習與數據分析中是必不可少的。下圖是得到的試驗結果圖。在這裏插入圖片描述
其中藍色是原始數據,綠色爲訓練數據集合的預測結果,黃色爲驗證數據集合的預測結果,紅色爲預測數據集合的預測結果。
該模型的預測與實際值之間correlation可以達到0.72,可見這個模型的預測結果是比較準確的。

具體代碼已經上傳至我的GitHub,代碼中已經有比較詳細的註釋,有興趣的同學可以自行查看 https://github.com/wzcwzcwzc/LSTM_Prediction

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章