✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

 ​智能优化算法​​​  ​ ​神经网络预测​​​ ​ ​雷达通信 ​​​ ​ ​无线传感器​

 ​信号处理​​​ ​ ​图像处理​​​ ​ ​路径规划​​​ ​ ​元胞自动机​​​ ​ ​无人机 ​​​ ​ ​电力系统​

⛄ 内容介绍

为提高基于支持向量机(SVM)的时间序列预测方法的泛化能力与预测精度,研究了一种基于粒子群优化(PSO)的LSSVM.该方法以交叉验证误差为评价准则,利用PSO对多个具有不同超参数的SVM进行基于迭代进化的优化选择,并以交叉验证误差最小的SVM作为最终优化后的SVM.时间序列预测实例表明,经PSO优化后的SVM的预测精度高于未经优化的LSSVM与传统时间序列预测方法的预测精度.

【SVM时序预测】基于粒子群算法优化支持向量机PSO-SVM实现期贷时序数据预测附matlab代码_归一化

【SVM时序预测】基于粒子群算法优化支持向量机PSO-SVM实现期贷时序数据预测附matlab代码_归一化_02

【SVM时序预测】基于粒子群算法优化支持向量机PSO-SVM实现期贷时序数据预测附matlab代码_多项式_03

【SVM时序预测】基于粒子群算法优化支持向量机PSO-SVM实现期贷时序数据预测附matlab代码_归一化_04

【SVM时序预测】基于粒子群算法优化支持向量机PSO-SVM实现期贷时序数据预测附matlab代码_归一化_05

⛄ 部分代码

% 支持向量机用于收盘价预测,首先是未优化的,其次是优化后的

%% 清空环境

tic;clc;clear;close all;format compact

%% 加载数据

data=xlsread('EUA五分钟.xlsx','G2:G30763'); save data data

load data

% 归一化

[a,inputns]=mapminmax(data',0,1);%归一化函数要求输入为行向量

data_trans=data_process(5,a);%% 对时间序列预测建立滚动序列,即用1到m个数据预测第m+1个数据,然后用2到m+1个数据预测第m+2个数据

input=data_trans(:,1:end-1);

output=data_trans(:,end);

%% 数据集 前75%训练 后25%预测

m=round(size(data_trans,1)*0.75);

Pn_train=input(1:m,:);

Tn_train=output(1:m,:);

Pn_test=input(m+1:end,:);

Tn_test=output(m+1:end,:);

%% 1.没有优化的SVM

bestc=0.001;bestg=10;%c和g随机赋值 表示没有优化的SVM

t=0;%t=0为线性核函数,1-多项式。2rbf核函数

cmd = ['-s 3 -t ',num2str(t),' -c ', num2str(bestc),' -g ',num2str(bestg),' -p 0.01 -d 1'];  

model = svmtrain(Tn_train,Pn_train,cmd);%训练

[predict,~]= svmpredict(Tn_test,Pn_test,model);%测试

% 反归一化,为后面的结果计算做准备

predict0=mapminmax('reverse',predict',inputns);%测试实际输出反归一化

T_test=mapminmax('reverse',Tn_test',inputns);%测试集期望输出反归一化

T_train=mapminmax('reverse',Tn_train',inputns);%训练集期望输出反归一化

figure

plot(predict0,'r-')

hold on;grid on

plot(T_test,'b-')

xlabel('样本编号')

ylabel('收盘价/元')

if t==0

    title('线性核SVM预测')

elseif t==1

    title('多项式核SVM预测')

else

    title('RBF核SVM预测')

end

legend('实际输出','期望输出')

figure

error_svm=abs(predict0-T_test)./T_test*100;%测试集每个样本的相对误差

plot(error_svm,'r-*')

xlabel('样本编号')

ylabel('收盘价相对误差/%')

if t==0

    title('线性核SVM预测的误差')

elseif t==1

    title('多项式核SVM预测的误差')

else

    title('RBF核SVM预测的误差')

end

grid on

img =gcf;  %获取当前画图的句柄

print(img, '-dpng', '-r600', './img6.png') 

figure

error_svm=abs(predict0-T_test)./T_test*100;%测试集每个样本的相对误差

plot(error_svm,'r-*')

xlabel('样本编号')

ylabel('收盘价相对误差/%')

if t==0

    title('线性核SVM预测的误差')

elseif t==1

    title('多项式核SVM预测的误差')

else

    title('RBF核SVM预测的误差')

end

grid on

img =gcf;  %获取当前画图的句柄

print(img, '-dpng', '-r600', './img5.png')   

figure

error_svm=abs(predict0-T_test)./T_test*100;%测试集每个样本的相对误差

plot(error_svm,'r-*')

xlabel('样本编号')

ylabel('收盘价相对误差/%')

if t==0

    title('线性核SVM预测的误差')

elseif t==1

    title('多项式核SVM预测的误差')

else

    title('RBF核SVM预测的误差')

end

grid on

img =gcf;  %获取当前画图的句柄

print(img, '-dpng', '-r600', './img4.png')           %即可得到对应格式和期望dpi的图像

figure')

% ylabel('适应度值/log10(函数值)')

% img =gcf;  %获取当前画图的句柄

% print(img, '-dpng', '-r600', './img4.png')         %即可得到对应格式和期望dpi的图像

% %% 结果分析

disp('最优惩罚参数与核参数为:')

bestc

bestg

disp('优化前的均方误差')

mse_svm=mse(predict0-T_test)

disp('优化前的平均相对误差')

mre_svm=sum(abs(predict0-T_test)./T_test)/length(T_test)

disp('优化前的平均绝对误差')

abs_svm=mean(abs(predict0-T_test))

disp('优化前的归一化均方误差')

a=sum((predict0-T_test).^2)/length(T_test);

b=sum((predict0-mean(predict0)).^2)/(length(T_test)-1);

one_svm=a/b

disp('优化后的训练集均方根误差')

rmse_svm0=sqrt(mse(predict_tr-T_train))

disp('优化后的测试集均方根误差')

rmse_svm=sqrt(mse(predict1-T_test))

disp('优化后的均方误差')

mse_pso_svm=mse(predict1-T_test)

disp('优化后的平均相对误差')

mre_pso_svm=sum(abs(predict1-T_test)./T_test)/length(T_test)

disp('优化后的平均绝对误差')

abs_pso_svm=mean(abs(predict1-T_test))

disp('优化后的归一化均方误差')

a1=sum((predict1-T_test).^2)/length(T_test);

b1=sum((predict1-mean(predict1)).^2)/(length(T_test)-1);

one_pso_svm=a1/b

toc %结束计时

⛄ 运行结果

【SVM时序预测】基于粒子群算法优化支持向量机PSO-SVM实现期贷时序数据预测附matlab代码_时间序列_06

【SVM时序预测】基于粒子群算法优化支持向量机PSO-SVM实现期贷时序数据预测附matlab代码_时间序列_07

⛄ 参考文献

[1]朱伟李楠石超峰. 基于粒子群算法优化支持向量机的铁路客运量预测模型[J]. 商丘师范学院学报, 2013, 000(012):33-35.

[2]张弦, 王宏力. 基于粒子群优化的最小二乘支持向量机在时间序列预测中的应用[J]. 中国机械工程, 2011, 22(21):5.

⛄ Matlab代码关注

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料