揭陽手機網(wǎng)站建設 今日頭條
時序預測 | MATLAB實現(xiàn)LSTM-SVR(長短期記憶神經(jīng)網(wǎng)絡-支持向量機)時間序列預測
目錄
- 時序預測 | MATLAB實現(xiàn)LSTM-SVR(長短期記憶神經(jīng)網(wǎng)絡-支持向量機)時間序列預測
- 效果一覽
- 基本介紹
- 模型介紹
- LSTM模型
- SVR模型
- LSTM-SVR模型
- 程序設計
- 參考資料
- 致謝
效果一覽
基本介紹
本次運行測試環(huán)境MATLAB2018b;
MATLAB實現(xiàn)LSTM-SVR(長短期記憶神經(jīng)網(wǎng)絡-支持向量機)時間序列預測;主要研究問題不限于交通預測、負荷預測、氣象預測、經(jīng)濟預測等。LSTM和SVR組合預測,結合LSTM序列提取優(yōu)勢和SVR非線性提取優(yōu)勢,組合預測具體介紹如下。
模型介紹
提出了一種基于長短時記憶神經(jīng)網(wǎng)絡算法的支持向量機(LSTM-SVR)的預測方法,為了保證支持向量機預測結果的準確性,選用網(wǎng)格搜索法對支持向量機參數(shù)進行優(yōu)化處理。為了減小在預測算法中,由于誤差的傳遞導致最終預測結果與實際結果產(chǎn)生較大偏離,在預測運算過程中對采用長短時記憶神經(jīng)網(wǎng)絡組合預測,對預測結果進行組合。
LSTM模型
- LSTM 屬于循環(huán)神經(jīng)網(wǎng)絡( recurrent neural network,RNN) 的一種,其特殊之處在于RNN 僅具有記憶暫存的功能,LSTM 兼具長短期記憶功能,LSTM 解決了RNN 的長期依賴問題,其特點是在RNN 各層結構單元中添加了輸入門、遺忘門和輸出門等閘門。通過“門”控制記憶狀態(tài)、存儲任意時間和距離的信息,解決了RNN 神經(jīng)網(wǎng)絡只有短期記
憶、沒有長期記憶的問題。
- LSTM 在t 時刻的輸入為xt,輸出為yt,神經(jīng)元記憶狀態(tài)為st,其輸出門it、遺忘門ft、輸出門ot;
- 構建基于長短期記憶網(wǎng)絡負荷預測模型,包括數(shù)據(jù)處理、計算激活函數(shù)、調整參數(shù)、訓練模型、評價結果等。
- 數(shù)據(jù)預處理,分別對沖擊性負荷影響因素、穩(wěn)定性負荷影響因素進行數(shù)據(jù)歸一化處理,使其數(shù)值為[0,1];
- 按照網(wǎng)絡各層之間的權重參數(shù),網(wǎng)絡的第t層,其權重參數(shù)( wt
,bt) 由上一層的數(shù)據(jù)決定。- 將上一層輸入輸出作為LSTM 網(wǎng)絡模型的輸入和輸出進行訓練,調整模型參數(shù),代價函數(shù)為平方重構誤差。
- 完成訓練過程后,利用負荷數(shù)據(jù),通過LSTM 模型輸出結果,將得到的負荷預測結果進行反歸一化處理,得到負荷真實預測值。
- 將得到的負荷預測值與實際負荷進行對比,采用相對誤差作為衡量標準,衡量LSTM網(wǎng)絡模型的預測準確性。
SVR模型
- SVM 算法是一種基于最小化結構風險的機器統(tǒng)計學習理論,通過間隔最大化的學習策略,最終轉化為一個凸二次規(guī)劃問題的求解。
- SVM 在預分析中具有適應小樣本學習和強魯棒性的特點,能補充基于長短期記憶網(wǎng)絡算法對大量樣本的需求。
- SVR是SVM用于回歸的任務。
- 通過直接法或間接法構造合適的回歸任務,將某時刻下的影響因素
視為回歸的依據(jù),而該時刻負荷的預測值視為最終回歸結果的標簽。主要的預測過程如下。
- 數(shù)據(jù)處理與歸一化,輸入數(shù)據(jù)與2.1 節(jié)中相同,采用相同的預處理方式。
- 利用試驗查找方法,得到最佳懲罰參數(shù)C、核函數(shù)和不敏感損失函數(shù)ε。
- 仿真測試,輸入?yún)?shù),進行仿真測試。
- 數(shù)據(jù)反歸一化,得到數(shù)據(jù)預測值。
- 將得到的負荷預測值與實際負荷進行對比,采用相對誤差作為衡量標準,衡量SVM 模型的預測準確性。
LSTM-SVR模型
- LSTM 算法時序性強,能夠充分挖掘歷史數(shù)據(jù)的規(guī)律,其缺點是要求樣本的數(shù)量多; SVM 算法具有非線性映射和小樣本學習的優(yōu)勢,但時序性差。
- 為充分融合二者的優(yōu)勢提出融合LSTM 和SVM 算法的鋼鐵電力短期負荷預測,權重分配采用最小二乘算法。
程序設計
- 完整程序和數(shù)據(jù)下載:私信博主。
- 主程序
nwhole=length(data);
%計算數(shù)據(jù)長度
train_ratio=0.90;
ntrain=round(nwhole*train_ratio);
%% CDM
options = optimset;
[W_train,E_train] = fmincon(@(W)ObjectFunction(W,R_train,LSTM_train,SVM_train),W0,LPA,LPB,Aeq,Beq,LB,UB,NONLCON,options);
[W_test,E_test] = fmincon(@(W)ObjectFunction(W,R_test,LSTM_test,SVM_test),W0,LPA,LPB,Aeq,Beq,LB,UB,NONLCON,options);
fprintf('W_LSTM_test=%f,W_SVM_test=%f',W_test(1),W_test(2))
C_test =W_test(1)*LSTM_test +W_test(2)*SVM_test;
fprintf('\n\n');
%% 數(shù)據(jù)輸出
%-------------------------------------------------------------------------------------
disp("——————組合模型預測結果——————————")
disp("組合模型預測值 真實值 組合模型誤差 組合模型相對誤差 ")
disp([C_test R_test C_error_test C_pererror_test])
disp('預測絕對平均誤差MAE');
disp('LSTM SVM 組合模型');
disp([LSTM_MAE SVM_MAE C_MAE]);
disp('預測平均絕對誤差百分比MAPE');
disp('LSTM SVM 組合模型');
disp([LSTM_MAPE SVM_MAPE C_MAPE]);
disp('預測均方誤差MSE')
disp('LSTM SVM 組合模型');
disp([LSTM_MSE SVM_MSE C_MSE]);
disp('預測均方根誤差RMSE')
disp('LSTM SVM 組合模型');
disp([LSTM_RMSE SVM_RMSE C_RMSE]);
W_LSTM_train=0.780212,W_SVM_train=0.219788
——————組合模型預測結果——————————
預測絕對平均誤差MAE
LSTM SVM 組合模型
9.7268 10.3683 9.1884
預測平均絕對誤差百分比MAPE
LSTM SVM 組合模型
0.0052 0.0056 0.0049
預測均方誤差MSE
LSTM SVM 組合模型
1.0e+04 *
1.1857 1.3478 1.0736
預測均方根誤差RMSE
LSTM SVM 組合模型
108.8883 116.0951 103.6134
參考資料
[1] https://blog.csdn.net/kjm13182345320/article/details/120621147?spm=1001.2014.3001.5501
[2] https://blog.csdn.net/kjm13182345320/article/details/120406657?spm=1001.2014.3001.5502
致謝
- 大家的支持是我寫作的動力!
- 感謝大家!