多維時序 | MATLAB實現PSO-CNN-BiLSTM多變量時間序列預測
目錄
- 多維時序 | MATLAB實現PSO-CNN-BiLSTM多變量時間序列預測
- 基本介紹
- 模型特點
- 程序設計
- 參考資料
基本介紹
本次運行測試環境MATLAB2021b,MATLAB實現PSO-CNN-BiLSTM多變量時間序列預測。代碼說明:基于粒子群優化算法(PSO)、卷積神經網絡(CNN)和雙向長短期記憶網絡(BiLSTM)的多變量時間序列預測算法。
模型特點
深度學習使用分布式的分層特征表示方法自動提取數據中的從最低層到最高層固有的抽象特征和隱藏不變結構. 為了充分利用單個模型的優點并提高預測性能, 現已提出了許多組合模型。構建基于卷積神經網絡(Convolutional Neural Network,CNN)和雙向長短期記憶(Bidirectional Long Short-Term Memory,BiLSTM)的混合模型(CNN-BiLSTM)進行棉花產量預估,提高時間維度和空間維度方面的特征提取能力。
-
本研究提出的CNN-BiLSTM 模型結構主要由CNN模塊、BiLSTM 模塊和輸出模塊3 部分。CNN 結構的第一部分是卷積層,進行卷積運算提取局部空間特征。
-
BiLSTM 網絡的主體隱藏層結構是在LSTM 網絡的基礎上由正向輸入運算的LSTM 網絡和反向輸入運算的LSTM 網絡上下疊加構成,在保留了LSTM 單元結構特點的同時,更加關注時序數據的前后關聯性,確保時序特征的提取。
-
CNN-BiLSTM 模型的輸出模塊由全連接神經網絡組成,網絡輸入向量包含CNN 提取的空間特征和BiLSTM網絡提取的時序特征,其隱藏層數量為1,神經元個數為500,激活函數為ReLU,最終輸出為估產結果。
-
功能:
1、多變量特征輸入,單序列變量輸出,輸入前一天的特征,實現后一天的預測,超前24步預測。
2、通過粒子群優化算法優化學習率、卷積核大小、神經元個數,這3個關鍵參數,以最小MAPE為目標函數。
3、網絡的特征可視化圖;測試對比圖;適應度曲線(若首輪精度最高,則適應度曲線為水平直線)。
4、提供MAPE、RMSE、MAE等計算結果展示。 -
適用領域:
風速預測、光伏功率預測、發電功率預測、碳價預測等多種應用。 -
使用便捷:
直接使用EXCEL表格導入數據,無需大幅修改程序。內部有詳細注釋,易于理解。
程序設計
- 完整程序和數據下載:私信博主回復MATLAB實現PSO-CNN-BiLSTM多變量時間序列預測。
% CNN-BiLSTM多變量時間序列預測
% 數據集 列為特征,行為樣本數目
%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
clc
clear
load Train.mat
%
Train(1,:) =[];
y = Train.demand;
x = Train{:,3:end};
[xnorm,xopt] = mapminmax(x',0,1);
[ynorm,yopt] = mapminmax(y',0,1);
x = x';
k = 24; % 滯后長度
%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
% 轉換成4-D image
for i = 1:length(ynorm)-kTrain_xNorm{i} = reshape(xnorm(:,i:i+k-1),6,1,1,k);Train_yNorm(i) = ynorm(i+k-1);
end
Train_yNorm= Train_yNorm';
%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------
load Test.mat
Test(1,:) =[];
ytest = Test.demand;
xtest = Test{:,3:end};
[xtestnorm] = mapminmax('apply', xtest',xopt);
[ytestnorm] = mapminmax('apply',ytest',yopt);
xtest = xtest';
for i = 1:length(ytestnorm)-kTest_xNorm{i} = reshape(xtestnorm(:,i:i+k-1),6,1,1,k);Test_yNorm(i) = ytestnorm(i+k-1);Test_y(i) = ytest(i+k-1);
end
Test_yNorm = Test_yNorm';
- 相關預測
參考資料
[1] https://blog.csdn.net/kjm13182345320/article/details/127313031?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/kjm13182345320/article/details/128011037?spm=1001.2014.3001.5502