最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

拓端tecdat|R語言用RNN循環(huán)神經(jīng)網(wǎng)絡(luò) 、LSTM長短期記憶網(wǎng)絡(luò)實現(xiàn)時間序列長期利率預測

2022-02-04 13:36 作者:拓端tecdat  | 我要投稿

原文鏈接:http://tecdat.cn/?p=25133

原文出處:拓端數(shù)據(jù)部落公眾號

2017 年年中,R 推出了?Keras?包?,這是一個在 Tensorflow 之上運行的綜合庫,具有 CPU 和 GPU 功能。本文將演示如何在 R 中使用?LSTM?實現(xiàn)時間序列預測。

簡單的介紹

時間序列涉及按時間順序收集的數(shù)據(jù)。我用 xt∈R 表示單變量數(shù)據(jù),其中 t∈T 是觀察數(shù)據(jù)時的時間索引。時間 t 在 T=Z 的情況下可以是離散的,或者在 T=R 的情況下是連續(xù)的。為簡化分析,我們將僅考慮離散時間序列。

長短期記憶 (LSTM) 網(wǎng)絡(luò)是一種特殊的循環(huán)神經(jīng)網(wǎng)絡(luò)?(RNN),能夠?qū)W習長期依賴關(guān)系。在常規(guī)的 RNN 中,小權(quán)重通過幾個時間步一遍又一遍地相乘,并且梯度逐漸減小到零——這種情況稱為梯度消失問題。

LSTM 網(wǎng)絡(luò)通常由通過層連接的內(nèi)存塊(稱為單元)組成。單元中的信息同時包含在單元狀態(tài) Ct 和隱藏狀態(tài) ht 中,并由稱為門的機制通過?sigmoid?和?tanh?激活函數(shù)進行調(diào)節(jié)。

sigmoid 函數(shù)/層輸出 0 到 1 之間的數(shù)字,其中 0 表示?沒有通過?, 1 表示?全部通過。因此,LSTM 能夠有條件地從單元狀態(tài)中添加或刪除信息。

一般來說,門將前一時間步 ht-1 和當前輸入 xt 的隱藏狀態(tài)作為輸入,并將它們逐點乘以權(quán)重矩陣 W,并將偏差 b 添加到乘積中。

三個主要門:

  • 遺忘門:

  • 這決定了哪些信息將從單元狀態(tài)中刪除。

  • 輸出是一個介于 0 和 1 之間的數(shù)字,0 表示?全部刪除?,1 表示?全部記住

  • 更新門:

  • 在這一步中,??tahn?激活層創(chuàng)建一個潛在候選向量,如下所示:

  • sigmoid 層創(chuàng)建一個更新過濾器,如下所示:

  • 接下來,舊單元狀態(tài) Ct-1 更新如下:

  • 輸出門:

  • 在這一步中,sigmoid 層過濾將要輸出的單元狀態(tài)。

  • 然后將單元狀態(tài) Ct 通過?tanh?函數(shù)將值標準化到范圍 [-1, 1]。

  • 最后,標準化后的單元格狀態(tài)乘以過濾后的輸出,得到隱藏狀態(tài) ht 并傳遞給下一個單元格:

加載必要的庫和數(shù)據(jù)集

  1. # 加載必要的包

  2. library(keras)

或者安裝如下:


  1. # 然后按如下方式安裝 TensorFlow :

  2. install_keras()


我們將使用可用的長期利率數(shù)據(jù)?,這是從 2007 年 1 月到 2018 年 3 月的月度數(shù)據(jù)。

前五個觀察樣本

數(shù)據(jù)準備

將數(shù)據(jù)轉(zhuǎn)換為平穩(wěn)數(shù)據(jù)

這是通過獲取系列中兩個連續(xù)值之間的差異來完成的。這種轉(zhuǎn)換(通常稱為差分)會刪除數(shù)據(jù)中與時間相關(guān)的成分。此外,使用差分而不是原始值更容易建模,并且生成的模型具有更高的預測能力。

  1. #將數(shù)據(jù)轉(zhuǎn)換為平穩(wěn)性

  2. did = diff

  3. head

滯后數(shù)據(jù)集

LSTM 期望數(shù)據(jù)處于監(jiān)督學習模式。也就是說,有一個目標變量 Y 和預測變量 X。為了實現(xiàn)這一點,我們通過滯后序列來變換序列,并將時間 (t?k)的值作為輸入,將時間 t?的值作為輸出,用于 k 步滯后數(shù)據(jù)集。


  1. sps= laorm

  2. head(sps)

將數(shù)據(jù)集拆分為訓練集和測試集

與大多數(shù)分析中訓練和測試數(shù)據(jù)集是隨機抽樣的不同,對于時間序列數(shù)據(jù),觀察的順序確實很重要。以下代碼將系列的??70% 作為訓練集,其余 30% 作為測試集。

  1. ## 分成訓練集和測試集


  2. N = nrow

  3. n = round

  4. tran = sud[1:n, ]

  5. tt ?= sud[(n+1):N, ?]

標準化數(shù)據(jù)

就像在任何其他神經(jīng)網(wǎng)絡(luò)模型中一樣,我們將輸入數(shù)據(jù) X 重新標準化到激活函數(shù)的范圍。如前所述,LSTM 的默認激活函數(shù)是 sigmoid 函數(shù),其范圍為 [-1, 1]。下面的代碼將有助于這種轉(zhuǎn)換。請注意,訓練數(shù)據(jù)集的最小值和最大值是用于標準化訓練和測試數(shù)據(jù)集以及預測值的標準化系數(shù)。這確保了測試數(shù)據(jù)的最小值和最大值不會影響模型。

  1. ## 標準化數(shù)據(jù)




  2. Sad = scaa(trin, et, c(-1, 1))


  3. y_in = Sed$slrn[, 2]

  4. x_tn = Scd$sldin[, 1]


  5. y_st = Sald$sleet[, 2]

  6. x_st = Saed$sett[, 1]

將需要以下代碼將預測值恢復為原始比例。

  1. ## 逆變換

  2. invtg = function(sle, slr, fue = c(0, 1))

定義

定義模型

我們設(shè)置參數(shù)?stateful?= TRUE 以便在處理一批樣本后獲得的內(nèi)部狀態(tài)被重新用作下一批樣本的初始狀態(tài)。由于網(wǎng)絡(luò)是有狀態(tài)的,我們必須從當前 [?samples?,??features ] 中以 [?samples?,??timesteps?,??features?]形式的 3 維數(shù)組提供輸入批次,其中:

樣本:每批中的觀察數(shù),也稱為批大小。

時間步長:給定觀察的單獨時間步長。在此示例中,時間步長 = 1

特征:對于單變量情況,如本例所示,特征 = 1

批量大小必須是訓練樣本和測試樣本大小的共同因素??梢哉业?LSTM 輸入的一個很好的解釋?


  1. # 將輸入重塑為 3-維


  2. # 指定所需的參數(shù)


  3. bahse = 1 # 必須是訓練樣本和測試樣本的公因子

  4. ni = 1 # 可以調(diào)整這個,在模型調(diào)整階段


  5. #====================


  6. keras_model_sequential

  7. layer_lstm%>%

  8. layer_dense


編譯模型

在這里,我將?mean_squared_error指定?為損失函數(shù),將自適應(yīng)矩估計?Adam指定為優(yōu)化算法,并在每次更新時指定學習率和學習率衰減。最后,我使用?準確性?作為評估模型性能的指標。

  1. compile(


  2. optimizer = optimizer_adam

  3. )

模型匯總

summary

擬合模型

我們設(shè)置參數(shù)?shuffle??= FALSE 以避免打亂訓練集并保持 xixi 和 xi+txi+t 之間的依賴關(guān)系。LSTM 還需要在每個 epoch 之后重置網(wǎng)絡(luò)狀態(tài)。為了實現(xiàn)這一點,我們在 epoch 上運行一個循環(huán),在每個 epoch 中我們擬合模型并通過參數(shù)?reset_states()重置狀態(tài)。

  1. for(i in 1:phs ){

  2. model %>% fit

  3. model %>% reset_states

  4. }

作出預測

  1. for(i in 1:L){

  2. # 反轉(zhuǎn)縮放

  3. yhat = invert_scaling

  4. # 逆差分

  5. yhat = yhat + Sis[(n+i)]


  6. }

繪制值

最受歡迎的見解

1.用于NLP的Python:使用Keras的多標簽文本LSTM神經(jīng)網(wǎng)絡(luò)分類

2.Python中利用長短期記憶模型LSTM進行時間序列預測分析 – 預測電力消耗數(shù)據(jù)

3.python在Keras中使用LSTM解決序列問題

4.Python中用PyTorch機器學習分類預測銀行客戶流失模型

5.R語言多元Copula GARCH 模型時間序列預測

6.在r語言中使用GAM(廣義相加模型)進行電力負荷時間序列分析

7.R語言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于預測時間序列數(shù)

8.R語言估計時變VAR模型時間序列的實證研究分析案例

9.用廣義加性模型GAM進行時間序列分析


拓端tecdat|R語言用RNN循環(huán)神經(jīng)網(wǎng)絡(luò) 、LSTM長短期記憶網(wǎng)絡(luò)實現(xiàn)時間序列長期利率預測的評論 (共 條)

分享到微博請遵守國家法律
芒康县| 石家庄市| 武汉市| 巴彦淖尔市| 和顺县| 克什克腾旗| 封开县| 玛沁县| 大名县| 行唐县| 肥西县| 嵊州市| 清流县| 府谷县| 巴塘县| 揭东县| 正阳县| 宁德市| 德阳市| 延边| 宁德市| 开封市| 和静县| 原平市| 盐池县| 高台县| 乌拉特中旗| 大化| 芦山县| 改则县| 东光县| 梓潼县| 连山| 修武县| 准格尔旗| 如皋市| 江油市| 交口县| 平阴县| 驻马店市| 晋宁县|