回歸預測 | Matlab實現CPO-BiTCN-BiGRU冠豪豬算法優化雙向時間卷積門控循環單元多變量回歸預測
目錄
- 回歸預測 | Matlab實現CPO-BiTCN-BiGRU冠豪豬算法優化雙向時間卷積門控循環單元多變量回歸預測
- 效果一覽
- 基本介紹
- 程序設計
- 參考資料
效果一覽
基本介紹
1.Matlab實現CPO-BiTCN-BiGRU雙向時間卷積門控循環單元多變量回歸預測(完整源碼和數據);
2.輸入多個特征,輸出單個變量,回歸預測,運行環境matlab2023及以上;
3.基于冠豪豬算法CPO優化的BiTCN-BiGRU模型。通過優化學習率,BiGRU的神經元個數,濾波器個數,正則化參數四個參數;命令窗口輸出R2、MAE、MAPE、 RMSE多指標評價;
4.代碼特點:參數化編程、參數可方便更改、代碼編程思路清晰、注釋明細。
5.適用對象:大學生課程設計、期末大作業和畢業設計。
程序設計
- 完整源碼和數據獲取方式(資源出下載):Matlab實現CPO-BiTCN-BiGRU冠豪豬算法優化雙向時間卷積門控循環單元多變量回歸預測。
%% 清空環境變量
warning off % 關閉報警信息
close all % 關閉開啟的圖窗
clear % 清空變量
clc % 清空命令行%% 導入數據
res =xlsread('data.xlsx','sheet1','A2:H104');%% 數據分析
num_size = 0.7; % 訓練集占數據集比例
outdim = 1; % 最后一列為輸出
num_samples = size(res, 1); % 樣本個數
res = res(randperm(num_samples), :); % 打亂數據集(不希望打亂時,注釋該行)
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);f_ = size(P_train, 1); % 輸入特征維度%% 數據歸一化
[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);
% 創建輸入層
layer = sequenceInputLayer(f_, Normalization = "rescale-symmetric", Name = "input");% 創建網絡圖
lgraph = layerGraph(layer);
outputName = layer.Name;% 建立網絡結構 -- 殘差塊
for i = 1 : numBlocks% 膨脹因子dilationFactor = 2^(i-1);% 創建TCN正向支路layers = [convolution1dLayer(filterSize, numFilters, DilationFactor = dilationFactor, Padding = "causal", Name="conv1_" + i) % 一維卷積層 layerNormalizationLayer % 層歸一化spatialDropoutLayer(dropoutFactor) % 空間丟棄層convolution1dLayer(filterSize, numFilters, DilationFactor = dilationFactor, Padding = "causal") % 一維卷積層 layerNormalizationLayer % 層歸一化reluLayer % 激活層spatialDropoutLayer(dropoutFactor) % 空間丟棄層additionLayer(4, Name = "add_" + i)];% 添加殘差塊到網絡lgraph = addLayers(lgraph, layers);% 連接卷積層到殘差塊lgraph = connectLayers(lgraph, outputName, "conv1_" + i);% 創建 TCN反向支路flip網絡結構
%% 相關指標計算
% R2
R1 = 1 - norm(T_train - T_sim1')^2 / norm(T_train - mean(T_train))^2;
R2 = 1 - norm(T_test - T_sim2')^2 / norm(T_test - mean(T_test ))^2;disp(['訓練集數據的R2為:', num2str(R1)])
disp(['測試集數據的R2為:', num2str(R2)])% MAE
mae1 = sum(abs(T_sim1' - T_train)) ./ M ;
mae2 = sum(abs(T_sim2' - T_test )) ./ N ;disp(['訓練集數據的MAE為:', num2str(mae1)])
disp(['測試集數據的MAE為:', num2str(mae2)])% RMSE
RMSE1 = sqrt(sum((T_sim1' - T_train).^2)./M);
RMSE2 = sqrt(sum((T_test' - T_sim2).^2)./N);disp(['訓練集數據的RMSE為:', num2str(RMSE1)])
disp(['測試集數據的RMSE為:', num2str(RMSE2)])%MAPE
MAPE1 = mean(abs((T_train - T_sim1')./T_train));
MAPE2 = mean(abs((T_test - T_sim2')./T_test));disp(['訓練集數據的MAPE為:', num2str(MAPE1)])
disp(['測試集數據的MAPE為:', num2str(MAPE2)])
參考資料
[1] https://blog.csdn.net/kjm13182345320/article/details/129215161
[2] https://blog.csdn.net/kjm13182345320/article/details/128105718