回歸預測 | MATLAB實現CNN-BiGRU-Attention卷積神經網絡結合雙向門控循環單元融合注意力機制多輸入單輸出回歸預測
目錄
- 回歸預測 | MATLAB實現CNN-BiGRU-Attention卷積神經網絡結合雙向門控循環單元融合注意力機制多輸入單輸出回歸預測
- 預測效果
- 基本介紹
- 程序設計
- 參考資料
預測效果
基本介紹
CNN-BiGRU-Attention,即卷積神經網絡(CNN)結合雙向門控循環單元(BiGRU)并融合注意力機制(Attention)的多輸入單輸出回歸預測模型,是一種強大的深度學習架構,特別適用于處理序列數據。以下是對該模型的詳細解析:
一、模型組成
卷積神經網絡(CNN)
功能:用于提取輸入序列的局部特征。
工作方式:通過滑動窗口的方式,將輸入序列分成多個子序列,并使用卷積操作提取每個子序列的特征。這些特征可以捕捉到輸入序列中的局部模式和結構信息。
雙向門控循環單元(BiGRU)
功能:用于捕捉輸入序列的上下文信息。
組成:由兩個方向的門控循環單元組成,分別從前向和后向對輸入序列進行處理。這樣可以同時考慮到過去和未來的信息,更好地理解序列中的依賴關系。
特點:具有重置門和更新門,分別有助于捕獲序列中的短期和長期依賴關系。
注意力機制(Attention)
功能:增強模型對輸入序列的關注度,使模型能夠更加關注重要的信息。
工作方式:通過計算輸入序列中每個位置的權重,然后將這些權重與對應位置的特征進行加權求和,得到最終的上下文向量。這個上下文向量會被傳遞給下一個階段的模型進行進一步處理。
二、模型優勢
特征提取能力:CNN能夠提取輸入序列的局部特征,這些特征對于理解序列數據的結構和模式至關重要。
上下文捕捉能力:BiGRU能夠同時處理前向和后向的序列信息,從而捕捉到更全面的上下文信息。
注意力引導:注意力機制使模型能夠動態地調整對不同位置信息的重視程度,從而更加準確地捕捉到關鍵信息。
三、應用場景
CNN-BiGRU-Attention模型適用于各種需要處理序列數據的回歸預測任務,如時間序列預測、金融預測、氣象預測等。
程序設計
- 完整程序和數據下載MATLAB實現CNN-BiGRU-Attention卷積神經網絡結合雙向門控循環單元融合注意力機制多輸入單輸出回歸預測
%% 清空環境變量
warning off % 關閉報警信息
close all % 關閉開啟的圖窗
clear % 清空變量
clc %% 導入數據
data = readmatrix('day.csv');
data = data(:,3:16);
res=data(randperm(size(data,1)),:); %此行代碼用于打亂原始樣本,使訓練集測試集隨機被抽取,有助于更新預測結果。
num_samples = size(res,1); %樣本個數% 訓練集和測試集劃分
outdim = 1; % 最后一列為輸出
num_size = 0.7; % 訓練集占數據集比例
num_train_s = round(num_size * num_samples); % 訓練集樣本個數
f_ = size(res, 2) - outdim; % 輸入特征維度P_train = res(1: num_train_s, 1: f_)';
T_train = res(1: num_train_s, f_ + 1: end)';
M = size(P_train, 2);P_test = res(num_train_s + 1: end, 1: f_)';
T_test = res(num_train_s + 1: end, f_ + 1: end)';
N = size(P_test, 2);% 數據歸一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);% 格式轉換
for i = 1 : M vp_train{i, 1} = p_train(:, i);vt_train{i, 1} = t_train(:, i);
endfor i = 1 : N vp_test{i, 1} = p_test(:, i);vt_test{i, 1} = t_test(:, i);
end
numFeatures = size(p_train,1);lgraph = layerGraph();% 添加層分支%% 參數設置
options = trainingOptions('adam', ... % 優化算法Adam'MaxEpochs', 150, ... % 最大訓練次數'GradientThreshold', 1, ... % 梯度閾值'InitialLearnRate', 0.01, ... % 初始學習率'LearnRateSchedule', 'piecewise', ... % 學習率調整'LearnRateDropPeriod', 60, ... % 訓練850次后開始調整學習率'LearnRateDropFactor',0.1, ... % 學習率調整因子'L2Regularization', 0.001, ... % 正則化參數'ExecutionEnvironment', 'cpu',... % 訓練環境'Verbose', 1, ... % 關閉優化過程'Plots', 'none'); % 畫出曲線% 訓練
tic
net = trainNetwork(vp_train, vt_train, lgraph, options);
toc
%analyzeNetwork(net);% 查看網絡結構
% 預測
t_sim1 = predict(net, vp_train);
t_sim2 = predict(net, vp_test); % 數據反歸一化
T_sim1 = mapminmax('reverse', t_sim1, ps_output);
T_sim2 = mapminmax('reverse', t_sim2, ps_output);
T_train1 = T_train;
T_test2 = T_test;
參考資料
[1] https://blog.csdn.net/kjm13182345320/article/details/128267322?spm=1001.2014.3001.5501
[2] https://blog.csdn.net/kjm13182345320/article/details/128234920?spm=1001.2014.3001.5501