【視頻】Python用LSTM長短期記憶神經網絡對不穩定降雨量|數據分享|附代碼數據

2023-03-15     tecdat拓端

原標題:【視頻】Python用LSTM長短期記憶神經網絡對不穩定降雨量|數據分享|附代碼數據

全文下載連結:http://tecdat.cn/?p=23544

最近我們被客戶要求撰寫關於LSTM的研究報告,包括一些圖形和統計輸出。

在本文中,長短期記憶網絡——通常稱為「LSTM」——是一種特殊的RNN遞歸神經網絡,能夠學習長期依賴關係

什麼是依賴關係?

假設您在觀看視頻時記得前一個場景,或者在閱讀一本書時您知道前一章發生了什麼。

傳統的神經網絡無法做到這一點,這是一個主要缺點。例如,假設您想對電影中每一點發生的事件進行分類。目前尚不清楚傳統的神經網絡如何利用電影中先前事件來推理後來的事件。

遞歸神經網絡解決了這個問題。它們是帶有循環的網絡,允許信息持續存在。循環神經網絡有循環。

在上圖中,一大塊神經網絡,查看一些輸入x並輸出一個值h. 循環允許信息從網絡的一個步驟傳遞到下一個步驟。

這些循環使循環神經網絡看起來有點神秘。然而,如果你想得更多,就會發現它們與普通的神經網絡並沒有什麼不同。循環神經網絡可以被認為是同一網絡的多個副本,每個副本都將消息傳遞給後繼者。考慮一下如果我們展開循環會發生什麼:

這種鏈狀性質表明循環神經網絡與序列和列表密切相關。它們是用於此類數據的神經網絡的自然架構。在過去的幾年裡,將 RNN 應用於各種問題取得了令人難以置信的成功:語音識別、語言建模、翻譯、圖像字幕……不勝枚舉。這些成功的關鍵是使用「LSTM」,這是一種非常特殊的循環神經網絡,幾乎所有基於循環神經網絡的令人興奮的結果都是用它們實現的。本文將探討的正是這些 LSTM。

長期依賴問題

下面是一個關於如何使用循環神經網絡(RNN)來擬合語言模型的例子。

RNN 的吸引力之一是它們可能能夠將先前的信息與當前任務聯繫起來,例如使用先前的視頻幀可能會告知對當前幀的理解。如果 RNN 可以做到這一點,它們將非常有用。但他們可以嗎?

有時,我們只需要查看最近的信息即可執行當前任務。例如,考慮一個語言模型試圖根據之前的單詞預測下一個單詞。如果我們試圖預測「雲在天空」中的最後一個詞,我們不需要任何進一步的上下文——很明顯下一個詞將是天空。在這種情況下,相關信息與所需位置之間的差距很小,RNN 可以學習使用過去的信息。

但也有我們需要更多上下文的情況。考慮嘗試預測文本「我在中國長大……我說地道的中文」中的最後一個詞。最近的信息表明,下一個詞可能是一種語言的名稱,但如果我們想縮小哪種語言的範圍,我們需要中國的上下文,從更遠的地方。相關信息和需要的點之間的差距完全有可能變得非常大。

隨著差距的擴大,RNN 變得無法學習連接信息。

LSTM 網絡

長短期記憶網絡——通常稱為「LSTM」——是一種特殊的 RNN,能夠學習長期依賴關係。它們在解決各種各樣的問題時表現出色,現在被廣泛使用。LSTM 被明確設計為避免長期依賴問題。長時間記住信息實際上是他們的默認行為,而不是他們難以學習的東西!

所有循環神經網絡都具有神經網絡的重複模塊鏈的形式。在標準 RNN 中,此重複模塊將具有非常簡單的結構,例如單個 tanh 層。

LSTM 也有這種鏈狀結構,但重複模塊有不同的結構。不是只有一個神經網絡層,而是三個部分組成,以一種非常特殊的方式進行交互。

LSTM 的工作方式非常類似於 RNN 單元。這是 LSTM 網絡的內部功能。LSTM 由三個部分組成,如圖所示,每個部分執行一個單獨的功能。第一部分選擇來自前一個時間戳的信息是被記住還是不相關並且可以被遺忘。在第二部分中,單元嘗試從該單元的輸入中學習新信息。最後,在第三部分,單元將更新的信息從當前時間戳傳遞到下一個時間戳。LSTM 單元的這三個部分稱為門。第一部分稱為忘記門或遺忘門,第二部分稱為輸入門,最後一部分稱為輸出門。

Python用LSTM長短期記憶神經網絡對不穩定降雨量時間序列進行預測分析

每年的降雨量數據可能是相當不平穩的。與溫度不同,溫度通常在四季中表現出明顯的趨勢,而雨量作為一個時間序列可能是相當不平穩的。夏季的降雨量與冬季的降雨量一樣多是很常見的。

下面是某地區2020年11月降雨量數據 查看文末了解數據獲取方式 的圖解。

作為一個連續的神經網絡,LSTM模型可以證明在解釋時間序列的波動性方面有優勢。

使用Ljung-Box檢驗,小於0.05的p值表明這個時間序列中的殘差表現出隨機模式,表明有明顯的波動性。

>>> sm.stats.acorr_ljungbox(res.resid, lags=[10])

Ljung-Box檢驗

Dickey-Fuller 檢驗

數據操作和模型配置

該數據集由722個月的降雨量數據組成。

選擇712個數據點用於訓練和驗證,即用於建立LSTM模型。然後,過去10個月的數據被用來作為測試數據,與LSTM模型的預測結果進行比較。

下面是數據集的一個片段。

然後形成一個數據集矩陣,將時間序列與過去的數值進行回歸。

# 形成數據集矩陣

for i in range(len(df)-previous-1):

a = df[i:(i+previous), 0]

dataX.append(a)

dataY.append(df[i + previous, 0])

然後用MinMaxScaler對數據進行標準化處理。

將前一個參數設置為120,訓練和驗證數據集就建立起來了。作為參考,previous = 120說明模型使用從t - 120到t - 1的過去值來預測時間t的雨量值。

前一個參數的選擇要經過試驗,但選擇120個時間段是為了確保識別到時間序列的波動性或極端值。

# 訓練和驗證數據的劃分

train_size = int(len(df) * 0.8)

val_size = len(df) - train_size

train, val = df[0:train_size,:], df[train_size:len(df),:]# 前期的數量

previous = 120

然後,輸入被轉換為樣本、時間步驟、特徵的格式。

# 轉換輸入為[樣本、時間步驟、特徵]。

np.reshape(X_train, (shape[0], 1, shape[1]))

模型訓練和預測

該模型在100個歷時中進行訓練,並指定了712個批次的大小(等於訓練和驗證集中的數據點數量)。

# 生成LSTM網絡

model = tf.keras.Sequential()

# 列出歷史中的所有數據

print(history.history.keys())

# 總結準確度變化

plt.plot(history.history['loss'])

下面是訓練集與驗證集的模型損失的關係圖。

預測與實際降雨量的關係圖也被生成。

點擊標題查閱往期內容

在Python中使用LSTM和PyTorch進行時間序列預測

左右滑動查看更多

01

02

03

04

# 繪製所有預測圖

plt.plot(valpredPlot)

預測結果在平均方向準確性(MDA)、平均平方根誤差(RMSE)和平均預測誤差(MFE)的基礎上與驗證集進行比較。

mda(Y_val, predictions)0.9090909090909091

>>> mse = mean_squared_error(Y_val, predictions)

>>> rmse = sqrt(mse)

>>> forecast_error

>>> mean_forecast_error = np.mean(forecast_error)

  • MDA: 0.909
  • RMSE: 48.5
  • MFE: -1.77

針對測試數據進行預測

雖然驗證集的結果相當可觀,但只有將模型預測與測試(或未見過的)數據相比較,我們才能對LSTM模型的預測能力有合理的信心。

如前所述,過去10個月的降雨數據被用作測試集。然後,LSTM模型被用來預測未來10個月的情況,然後將預測結果與實際值進行比較。

至t-120的先前值被用來預測時間t的值。

# 測試(未見過的)預測

np.array([tseries.iloctseries.iloc,t

獲得的結果如下

  • MDA: 0.8
  • RMSE: 49.57
  • MFE: -6.94

過去10個月的平均降雨量為148.93毫米,預測精度顯示出與驗證集相似的性能,而且相對於整個測試集計算的平均降雨量而言,誤差很低。

結論

在這個例子中,你已經看到:

  • 如何準備用於LSTM模型的數據
  • 構建一個LSTM模型
  • 如何測試LSTM的預測準確性
  • 使用LSTM對不穩定的時間序列進行建模的優勢

數據獲取

在下面公眾號後台回復「降雨量數據」,可免費獲取完整數據。

本文摘選 Python用LSTM長短期記憶神經網絡對不穩定降雨量時間序列進行預測分析 ,點擊「閱讀原文」獲取全文完整資料。

點擊標題查閱往期內容

深度學習實現自編碼器Autoencoder神經網絡異常檢測心電圖ECG時間序列spss modeler用決策樹神經網絡預測ST的股票

Python中TensorFlow的長短期記憶神經網絡(LSTM)、指數移動平均法預測股票市場和可視化

RNN循環神經網絡 、LSTM長短期記憶網絡實現時間序列長期利率預測

結合新冠疫情COVID-19股票價格預測:ARIMA,KNN和神經網絡時間序列分析

深度學習:Keras使用神經網絡進行簡單文本分類分析新聞組數據

用PyTorch機器學習神經網絡分類預測銀行客戶流失模型

PYTHON用LSTM長短期記憶神經網絡的參數優化方法預測時間序列洗髮水銷售數據

Python用Keras神經網絡序列模型回歸擬合預測、準確度檢查和結果可視化

R語言深度學習卷積神經網絡 (CNN)對 CIFAR 圖像進行分類:訓練與結果評估可視化

深度學習:Keras使用神經網絡進行簡單文本分類分析新聞組數據

Python用LSTM長短期記憶神經網絡對不穩定降雨量時間序列進行預測分析

R語言深度學習Keras循環神經網絡(RNN)模型預測多輸出變量時間序列

R語言KERAS用RNN、雙向RNNS遞歸神經網絡、LSTM分析預測溫度時間序列、 IMDB電影評分情感

Python用Keras神經網絡序列模型回歸擬合預測、準確度檢查和結果可視化

Python用LSTM長短期記憶神經網絡對不穩定降雨量時間序列進行預測分析

R語言中的神經網絡預測時間序列:多層感知器(MLP)和極限學習機(ELM)數據分析報告

R語言深度學習:用keras神經網絡回歸模型預測時間序列數據

Matlab用深度學習長短期記憶(LSTM)神經網絡對文本數據進行分類

R語言KERAS深度學習CNN卷積神經網絡分類識別手寫數字圖像數據(MNIST)

MATLAB中用BP神經網絡預測人體脂肪百分比數據

Python中用PyTorch機器學習神經網絡分類預測銀行客戶流失模型

R語言實現CNN(卷積神經網絡)模型進行回歸數據分析

SAS使用鳶尾花(iris)數據集訓練人工神經網絡(ANN)模型

【視頻】R語言實現CNN(卷積神經網絡)模型進行回歸數據分析

Python使用神經網絡進行簡單文本分類

R語言用神經網絡改進Nelson-Siegel模型擬合收益率曲線分析

R語言基於遞歸神經網絡RNN的溫度時間序列預測

R語言神經網絡模型預測車輛數量時間序列

R語言中的BP神經網絡模型分析學生成績

matlab使用長短期記憶(LSTM)神經網絡對序列數據進行分類

R語言實現擬合神經網絡預測和結果可視化

用R語言實現神經網絡預測股票實例

使用PYTHON中KERAS的LSTM遞歸神經網絡進行時間序列預測

python用於NLP的seq2seq模型實例:用Keras實現神經網絡機器翻譯

用於NLP的Python:使用Keras的多標籤文本LSTM神經網絡分類

文章來源: https://twgreatdaily.com/zh-mo/7c3c3734bf1362f6ea40dde30a0f2e0b.html