在MATLAB 2018中用深度學習進行時間序列預測


<本文翻譯自matlab幫助文檔,算是自己對該方法的一點理解和總結>
本例展示了如何用LSTM網絡預測時間序列數據。為了預測一個序列的未來時間步長值,你可以訓練一個sequence-to-sequence LSTM回歸網絡,其中[2]網絡的響應是訓練序列值移動了一個時間步長。也就是說,在輸入序列的每個時間步長上,LSTM網絡學習去預測下個時間步長的值。為了預測未來多個時間[2]步長的值,使用predictAndUpdateState函數去預測並更新網絡狀態。這個例子使用chickenpox_dataset數據集。這個例子構建了一個LSTM網絡,在已知[3]前幾個月樣本數量的情況下,去預測未來的值。

(在Matlab2018a中用LSTM網絡模型進行時間序列預測的方法有兩種。
第一種:

比如已知[x1,x2,...,x10]這個序列,用[x1,x2,...,x9]作為輸入,得到[x2,x3,...,x10],
然后用x10得到x11',用x11'得到x12',以此類推,完成預測。
  • 1
  • 2

第二種:

比如已知[x1,x2,...,x10,x11,...,x20]這個序列,用[x1,x2,...,x9]作為輸入,得到[x2,x3,...,x10],
然后用x10得到x11',用x11得到x12',以此類推,得到[x11',x12',...,x20']完成預測。
  • 1
  • 2

個人理解中,第二種方法可能只是用來檢測模型,實際中並不能預測,因為如果已知x11,再去預測x11’,似乎沒有意義。
)

    1. 下載序列數據
      該序列中的時間步長代表月份,值對應樣本數量。把數據集變成一個行向量。
      在這里插入圖片描述
      在這里插入圖片描述
      把數據集分解:訓練占90%,測試占10%。同時,按上文介紹,網絡的響應是訓練序列移動一個時間步長的值。
      在這里插入圖片描述
    2. 標准化數據
      為了更好地擬合並防止訓練時發散,將訓練數據標准化為零均值和單位方差。使用同樣的參數格式化測試數據。
      在這里插入圖片描述
    3. 定義LSTM網絡
      創建一個LSTM回歸網絡,指定LSTM層有200個隱藏神經元。
      在這里插入圖片描述
      指定訓練參數。設定求解函數“adam”,訓練250次。為了防止梯度爆炸,設定梯度閾值為1.指定初始學習速率為0.005,並且在125次迭代后把學習速率乘以0.2以降低學習速率。
      在這里插入圖片描述
    4. 訓練LSTM網絡
      使用trainNetwork和指定的訓練參數來訓練LSTM網絡。
      在這里插入圖片描述
    5. 預測未來值
      為了預測未來多時間步長的值,使用predictAndUpdateState 函數。
      為了初始化網絡狀態,首先預測訓練數據XTrain,接着,使用訓練響應的最后一個值YTrain(end)做預測。循環其余預測並將之前的預測輸入predictAndUpdateState。(PS:‘預測未來值這一部分感覺自己翻譯的有問題’)
      在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM