python短期预测图_Python中利用长短期记忆模型LSTM进行时间序列预测分析
原文鏈接:http://tecdat.cn/?p=6663
此示例中,神經網絡用于使用2011年4月至2013年2月期間的數據預測都柏林市議會公民辦公室的能源消耗。
每日數據是通過總計每天提供的15分鐘間隔的消耗量來創(chuàng)建的。
LSTM簡介
LSTM(或長期短期存儲器網絡)允許分析具有長期依賴性的順序或有序數據。當涉及到這項任務時,傳統(tǒng)的神經網絡不足,在這方面,LSTM將用于預測這種情況下的電力消耗模式。
與ARIMA等模型相比,LSTM的一個特殊優(yōu)勢是數據不一定需要是固定的(常數均值,方差和自相關),以便LSTM對其進行分析 - 即使這樣做可能會導致性能提升。
自相關圖,Dickey-Fuller測試和對數變換
為了確定我們的模型中是否存在平穩(wěn)性:生成自相關和部分自相關圖
進行Dickey-Fuller測試
對時間序列進行對數變換,并再次運行上述兩個過程,以確定平穩(wěn)性的變化(如果有的話)
首先,這是時間序列圖:
據觀察,波動性(或消費從一天到下一天的變化)非常高。在這方面,對數變換可以用于嘗試稍微平滑該數據。在此之前,生成ACF和PACF圖,并進行Dickey-Fuller測試。
自相關圖
部分自相關圖
自相關和部分自相關圖都表現出顯著的波動性,這意味著時間序列中的幾個區(qū)間存在相關性。
運行Dickey-Fuller測試時,會產生以下結果:
當p值高于0.05時,不能拒絕非平穩(wěn)性的零假設。
STD1
954.7248
4043.4302
0.23611754
變異系數(或平均值除以標準差)為0.236,表明該系列具有顯著的波動性。
現在,數據被轉換為對數格式。
雖然時間序列仍然不穩(wěn)定,但當以對數格式表示時,偏差的大小略有下降:
此外,變異系數已顯著下降至0.0319,這意味著與平均值相關的趨勢的可變性顯著低于先前。
STD2 = np.std(數據集)
mean2 = np.mean(數據集)
cv2 = std2 / mean2 #Cafficient of Variationstd2
0.26462445mean2
8.272395cv2
0.031988855
同樣,在對數數據上生成ACF和PACF圖,并再次進行Dickey-Fuller測試。
自相關圖
偏自相關圖
Dickey-Fuller測試
... print('\ t%s:%。3f'%(key,value))
1%:-3.440
5%: - ?2.866
10%: - ?2.569
Dickey-Fuller檢驗的p值降至0.0576。雖然這在技術上沒有輸入拒絕零假設所需的5%顯著性閾值,但對數時間序列已顯示基于CV度量的較低波動率,因此該時間序列用于LSTM的預測目的。
LSTM的時間序列分析
現在,LSTM模型本身用于預測目的。
數據處理
首先,導入相關庫并執(zhí)行數據處理
LSTM生成和預測
模型訓練超過100個時期,并生成預測。
#生成LSTM網絡
model = Sequential()
model.add(LSTM(4,input_shape =(1,previous)))
model.fit(X_train,Y_train,epochs = 100,batch_size = 1,verbose = 2)
#生成預測
trainpred = model.predict(X_train)
#將預測轉換回正常值
trainpred = scaler.inverse_transform(trainpred)
#calculate RMSE
trainScore = math.sqrt(mean_squared_error(Y_train [0],trainpred [:,0]))
#訓練預測
trainpredPlot = np.empty_like(dataset)
#測試預測
#繪制所有預測
inversetransform,= plt.plot(scaler.inverse_transform(dataset))
準確性
該模型顯示訓練數據集的均方根誤差為0.24,測試數據集的均方根誤差為0.23。平均千瓦消耗量(以對數格式表示)為8.27,這意味著0.23的誤差小于平均消耗量的3%。
以下是預測消費與實際消費量的關系圖:
有趣的是,當在原始數據上生成預測(未轉換為對數格式)時,會產生以下訓練和測試錯誤:
在每天平均消耗4043千瓦的情況下,測試分數的均方誤差占總日均消耗量的近20%,并且與對數數據產生的相比非常高。
也就是說,重要的是要記住,使用1天的先前數據進行預測,即Y表示時間t的消耗,而X表示時間t-1的消耗,由代碼中的前一個變量設置先前。讓我們來看看這增加到個究竟10和50天。
10天
#
50天
我們可以看到測試誤差在10天和50天期間顯著降低,并且考慮到LSTM模型在預測時考慮了更多的歷史數據,消耗的波動性得到了更好的捕獲。
鑒于數據是對數格式,現在可以通過獲得數據的指數來獲得預測的真實值。
例如,testpred變量用(1,-1)重新整形:
testpred.reshape(1,-1)
array([[7.7722197,8.277015,8.458941,8.455311,8.447589,8.445035,
......
8.425287,8.404881,8.457063,8.423954,7.98714,7.9003944,
8.240862,8.41654,8.423854,8.437414,8.397851,7.9047146]],
dtype = float32)
結論
對于這個例子,LSTM被證明在預測電力消耗波動方面非常準確。此外,以對數格式表示時間序列允許平滑數據的波動性并提高LSTM的預測準確度。
參考文獻
1.在python中使用lstm和pytorch進行時間序列預測
2.python中利用長短期記憶模型lstm進行時間序列預測分析
3.使用r語言進行時間序列(arima,指數平滑)分析
4.r語言多元copula-garch-模型時間序列預測
5.r語言copulas和金融時間序列案例
6.使用r語言隨機波動模型sv處理時間序列中的隨機波動
7.r語言時間序列tar閾值自回歸模型
8.r語言k-shape時間序列聚類方法對股票價格時間序列聚類
9.python3用arima模型進行時間序列預測
總結
以上是生活随笔為你收集整理的python短期预测图_Python中利用长短期记忆模型LSTM进行时间序列预测分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python不等式编程_python-指
- 下一篇: python 画图_学python画图最