多維時序 | MATLAB實現(xiàn)BO-CNN-BiLSTM貝葉斯優(yōu)化卷積雙向長短期記憶網(wǎng)絡(luò)數(shù)據(jù)多變量時間序列預(yù)測
效果一覽
基本介紹
基于貝葉斯優(yōu)化卷積雙向長短期記憶網(wǎng)絡(luò)(CNN-BiLSTM)多變量時間序列預(yù)測,BO-CNN-BiLSTM/Bayes-CNN-BiLSTM多變量時間序列預(yù)測模型。
1.優(yōu)化參數(shù)為:學習率,隱含層節(jié)點,正則化參數(shù)。
2.評價指標包括:R2、MAE、MSE、RMSE和MAPE等,方便學習和替換數(shù)據(jù)。
3.運行環(huán)境matlab2020b及以上;
4.data為數(shù)據(jù)集,格式為excel,4個輸入特征,1個輸出特征,考慮歷史特征的影響,多變量時間序列預(yù)測,MainBO_CNN_BiLSTMNTS.m是主程序,其余為函數(shù)文件,無需運行。
模型搭建
-
CNN-BiLSTMLSTM模型結(jié)合了CNN和BiLSTMLSTM的優(yōu)點,本文使用的CNN-BiLSTM模型的第一部分是由卷積層和最大值組成的CNN部分池化層,對原始數(shù)據(jù)進行預(yù)處理并輸入CNN卷積層,利用卷積核自適應(yīng)提取生命特征,卷積層將遍歷輸入信息,將卷積核權(quán)重與局部序列進行卷積運算體管信息得到初步的特征矩陣,比原始序列數(shù)據(jù)(矩陣)更具表現(xiàn)力。
-
本文使用的池化層是最大池化層,池化操作對提取的特征進行數(shù)據(jù)降維,避免模型過擬合,保留主要特征。最大池化層將前一個卷積層得到的特征矩陣作為輸入,在這個矩陣上滑動一個池化窗口,在每一次滑動中取池化窗口的最大值,輸出一個更具表現(xiàn)力的特征矩陣。
-
池化后,連接一個BiLSTM 層,提取相關(guān)向量由CNN構(gòu)造成一個長期的時間序列作為BiLSTM的輸入數(shù)據(jù)。卷積層將卷積層的數(shù)據(jù)展平(Flatten),模型中加入Flatten,將(height,width,channel)的數(shù)據(jù)壓縮成一個長高寬通道的一維數(shù)組,然后我們可以添加直接密集層。
-
對卷積池化數(shù)據(jù)壓縮特征操作,多個卷積特征提取框架提取的特征融合或從輸出層融合,全連接層聚合學習到的特征,激活函數(shù)使用Relu。
-
通常,在模型訓練過程中需要對超參數(shù)進行優(yōu)化,為模型選擇一組最優(yōu)的超參數(shù),以提高預(yù)測的性能和有效性。 憑經(jīng)驗設(shè)置超參數(shù)會使最終確定的模型超參數(shù)組合不一定是最優(yōu)的,這會影響模型網(wǎng)絡(luò)的擬合程度及其對測試數(shù)據(jù)的泛化能力。
-
偽代碼
-
通過調(diào)整優(yōu)化算法調(diào)整模型參數(shù),學習重復(fù)率和貝葉斯優(yōu)化超參數(shù)來調(diào)整模型參數(shù)。文章來源:http://www.zghlxwxcb.cn/news/detail-422529.html
程序設(shè)計
- 完整程序和數(shù)據(jù)獲取方式1:私信博主;
- 完整程序和數(shù)據(jù)下載方式2:同等價值程序兌換;
%% 貝葉斯優(yōu)化網(wǎng)絡(luò)參數(shù)
bayesopt(fitness, optimVars, ... % 優(yōu)化函數(shù),和參數(shù)范圍
'MaxTime', Inf, ... % 優(yōu)化時間(不限制)
'IsObjectiveDeterministic', false, ...
'MaxObjectiveEvaluations', 10, ... % 最大迭代次數(shù)
'Verbose', 1, ... % 顯示優(yōu)化過程
'UseParallel', false);
%% 得到最優(yōu)參數(shù)
NumOfUnits = BayesObject.XAtMinEstimatedObjective.NumOfUnits; % 最佳隱藏層節(jié)點數(shù)
InitialLearnRate = BayesObject.XAtMinEstimatedObjective.InitialLearnRate; % 最佳初始學習率
L2Regularization = BayesObject.XAtMinEstimatedObjective.L2Regularization; % 最佳L2正則化系數(shù)
%% 創(chuàng)建混合CNN-BiLSTM網(wǎng)絡(luò)架構(gòu)
% 輸入特征維度
numFeatures = f_;
% 輸出特征維度
numResponses = 1;
FiltZise = 10;
% 創(chuàng)建"CNN-BiLSTM"模型
layers = [...
% 輸入特征
sequenceInputLayer([numFeatures 1 1],'Name','input')
sequenceFoldingLayer('Name','fold')
% CNN特征提取
convolution2dLayer([FiltZise 1],32,'Padding','same','WeightsInitializer','he','Name','conv','DilationFactor',1);
batchNormalizationLayer('Name','bn')
eluLayer('Name','elu')
averagePooling2dLayer(1,'Stride',FiltZise,'Name','pool1')
% 展開層
sequenceUnfoldingLayer('Name','unfold')
% 平滑層
flattenLayer('Name','flatten')
% BiLSTM特征學習
bilstmLayer(50,'Name','bilstm1','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')
% BiLSTM輸出
bilstmLayer(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');
%% CNNBiLSTM訓練選項
% 批處理樣本
MiniBatchSize =128;
% 最大迭代次數(shù)
MaxEpochs = 500;
參考資料
[1] https://blog.csdn.net/kjm13182345320/article/details/129036772?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/kjm13182345320/article/details/128690229文章來源地址http://www.zghlxwxcb.cn/news/detail-422529.html
到了這里,關(guān)于多維時序 | MATLAB實現(xiàn)BO-CNN-BiLSTM貝葉斯優(yōu)化卷積雙向長短期記憶網(wǎng)絡(luò)數(shù)據(jù)多變量時間序列預(yù)測的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!