Transformer+BO-SVM多變量時間序列預測(Matlab)
目錄
- Transformer+BO-SVM多變量時間序列預測(Matlab)
- 效果一覽
- 基本介紹
- 程序設計
- 參考資料
效果一覽
基本介紹
本期推出一期高創新模型,基于Transformer提取時序特征后輸入SVM之中預測,同時采用貝葉斯算法選擇最佳的SVM核函數參數c和g,模型支撐風電預測、光伏預測、交通預測、股票預測等領域,先用先發,不要猶豫!
1.Transformer+BO-SVM多變量時間序列預測,Transformer+BO-SVM/Bayes-SVM(程序可以作為論文創新支撐,目前尚未發表);
2.Transformer提取特征后,貝葉斯算法選擇最佳的SVM核函數參數c和g,運行環境為Matlab2023b及以上;
3.data為數據集,輸入多個變量,輸出單個變量,考慮歷史特征的影響,main.m為主程序,運行即可,所有文件放在一個文件夾;
4.命令窗口輸出R2、MSE、RMSE、MAE、MAPE、MBE等多指標評價;
程序設計
- 完整程序和數據獲取方式私信博主回復Transformer+BO-SVM多變量時間序列預測(Matlab)。
%% 清空環境變量
warning off % 關閉報警信息
close all % 關閉開啟的圖窗
clear % 清空變量
clc % 清空命令行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);%% 仿真預測
[t_sim1, error_1] = svmpredict(t_train, p_train, model);
[t_sim2, error_2] = svmpredict(t_test , p_test , model);%% 數據反歸一化
T_sim1 = mapminmax('reverse', t_sim1, ps_output);
T_sim2 = mapminmax('reverse', t_sim2, ps_output);T_sim1 = T_sim1';
T_sim2 = T_sim2';%% 測試集結果
figure;
plotregression(T_test,T_sim2,['回歸圖']);
figure;
ploterrhist(T_test-T_sim2,['誤差直方圖']);%% 均方根誤差 RMSE
error1 = sqrt(sum((T_sim1 - T_train).^2)./M);
error2 = sqrt(sum((T_test - T_sim2).^2)./N);%%
%決定系數
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;%%
%均方誤差 MSE
mse1 = sum((T_sim1 - T_train).^2)./M;
mse2 = sum((T_sim2 - T_test).^2)./N;%%
%RPD 剩余預測殘差
SE1=std(T_sim1-T_train);
RPD1=std(T_train)/SE1;SE=std(T_sim2-T_test);
RPD2=std(T_test)/SE;%% 平均絕對誤差MAE
MAE1 = mean(abs(T_train - T_sim1));
MAE2 = mean(abs(T_test - T_sim2));% MBE
MBE1 = sum(T_sim1 - T_train) ./ M ;
MBE2 = sum(T_sim2 - T_test ) ./ N ;%% 平均絕對百分比誤差MAPE
MAPE1 = mean(abs((T_train - T_sim1)./T_train));
MAPE2 = mean(abs((T_test - T_sim2)./T_test));
參考資料
[1] https://blog.csdn.net/kjm13182345320/article/details/127931217
[2] https://blog.csdn.net/kjm13182345320/article/details/127418340