Transformer+BO-SVM时间序列预测(Matlab)

发布于:2025-04-05 ⋅ 阅读:(16) ⋅ 点赞:(0)

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