時序預測 | MATLAB實現EEMD-LSTM、LSTM集合經驗模態分解結合長短期記憶神經網絡時間序列預測對比
目錄
- 時序預測 | MATLAB實現EEMD-LSTM、LSTM集合經驗模態分解結合長短期記憶神經網絡時間序列預測對比
- 效果一覽
- 基本介紹
- 模型搭建
- 程序設計
- 參考資料
效果一覽
基本介紹
時序預測 | MATLAB實現EEMD-LSTM、LSTM集合經驗模態分解結合長短期記憶神經網絡時間序列預測對比。
1.MATLAB實現EEMD-LSTM、LSTM時間序列預測對比;
2.時間序列預測 就是先eemd把原輸入全分解變成很多維作為輸入 再輸入LSTM預測 ;
3.運行環境Matlab2018b及以上,輸出RMSE、MAPE、MAE等多指標對比,
先運行main1_eemd_test,進行eemd分解;再運行main2_lstm、main3_eemd_lstm;再運行main4_compare,兩個模型對比。
模型搭建
EEMD-LSTM和LSTM集合是兩種用于時間序列預測的方法,它們結合了經驗模態分解 (Empirical Mode Decomposition, EMD) 和長短期記憶神經網絡 (Long Short-Term Memory, LSTM)。這兩種方法都具有一定的優勢和適用場景,下面對它們進行對比。
EEMD-LSTM:
EEMD是一種數據分解方法,通過將時間序列分解成多個固有模態函數 (Intrinsic Mode Functions, IMF) 和一個剩余項,將非線性和非平穩的時間序列轉化為多個平穩的子序列。
EEMD能夠將時間序列的相關信息提取到不同的IMF中,每個IMF代表了時間序列中的不同頻率成分。
LSTM是一種適用于序列數據的循環神經網絡,能夠捕捉長期依賴關系,適用于處理時間序列數據。
EEMD-LSTM的基本思路是將原始時間序列通過EEMD進行分解,然后將每個IMF作為LSTM的輸入,利用LSTM模型對每個IMF進行預測,最后將預測結果合并得到最終的預測結果。通過構建多個獨立的LSTM模型,每個模型都有不同的初始化條件和參數設置。每個LSTM模型都會對時間序列進行訓練和預測,最后將它們的預測結果進行綜合,例如通過平均或加權平均的方式得到最終的預測結果。優勢在于通過建立多個模型,可以利用不同的初始化條件和參數組合,增加了模型的多樣性,提高了整體的預測準確性。
對比:EEMD-LSTM利用EEMD將時間序列分解成不同頻率的子序列,然后利用LSTM對每個子序列進行預測,最后將預測結果合并。這種方法能夠更好地處理非線性和非平穩的時間序列,能夠提取出不同頻率成分的信息。然而,EEMD的分解過程可能會引入一些噪聲,并且需要額外的計算步驟。
LSTM集合通過構建多個LSTM模型,利用不同的初始化條件和參數組合,增加了模型的多樣性,提高了預測準確性。這種方法相對簡單,不需要進行數據分解,適用于一般的時間序列預測任務。
程序設計
- 完整程序和數據獲取方式1:私信博主回復MATLAB實現EEMD-LSTM、LSTM集合經驗模態分解結合長短期記憶神經網絡時間序列預測對比,同等價值程序兌換;
- 完整程序和數據下載方式2(資源處直接下載):MATLAB實現EEMD-LSTM、LSTM集合經驗模態分解結合長短期記憶神經網絡時間序列預測對比;
- 完整程序和數據下載方式3(訂閱《LSTM長短期記憶神經網絡》專欄,同時可閱讀《LSTM長短期記憶神經網絡》專欄內容,數據訂閱后私信我獲取):MATLAB實現EEMD-LSTM、LSTM集合經驗模態分解結合長短期記憶神經網絡時間序列預測對比,專欄外只能獲取該程序。
%% 創建混合LSTM網絡架構
% 輸入特征維度
numFeatures = f_;
% 輸出特征維度
numResponses = 1;
FiltZise = 10;
% 創建"LSTM"模型layers = [...% 輸入特征sequenceInputLayer([numFeatures 1 1],'Name','input')sequenceFoldingLayer('Name','fold')% LSTM特征學習lstmLayer(50,'Name','lstm1','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')% LSTM輸出lstmLayer(optVars.NumOfUnits,'OutputMode',"last",'Name','bil4','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')dropoutLayer(0.25,'Name','drop3')% 全連接層fullyConnectedLayer(numResponses,'Name','fc')regressionLayer('Name','output') ];layers = layerGraph(layers);layers = connectLayers(layers,'fold/miniBatchSize','unfold/miniBatchSize');%% LSTM訓練選項
% 批處理樣本
MiniBatchSize =128;
% 最大迭代次數
MaxEpochs = 500;options = trainingOptions( 'adam', ...'MaxEpochs',500, ...'GradientThreshold',1, ...'InitialLearnRate',optVars.InitialLearnRate, ...'LearnRateSchedule','piecewise', ...'LearnRateDropPeriod',400, ...'LearnRateDropFactor',0.2, ...'L2Regularization',optVars.L2Regularization,...'Verbose',false, ...'Plots','none');%% 訓練混合網絡
net = trainNetwork(XrTrain,YrTrain,layers,options);
參考資料
[1] https://blog.csdn.net/kjm13182345320/article/details/129036772?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/kjm13182345320/article/details/128690229