本文提出一种基于蝗虫算法优化最小二乘支持向量机的数据预测方法。LSSVM 是一种新型机器学习算法,其在传统支持向量机 SVM 基础上,将二次规划问题中的不等式约束改为等式约束,极大地方便了求解过程,克服了数据集粗糙、数据集波动性大等问题造成的异常回归,能有效避免 BP 神经网络等方法中出现的局部最优等问题。
算法流程如下:
步骤1,采集时间序列的样本数据;
步骤2,建立基于蝗虫算法优化参数的LSSVM数据预测模型;
步骤3,应用预测模型对训练样本进行预测,得到训练样本的相对误差和预测值;步骤4,预测模型对训练样本的相对误差进行预测,从而得到相对误差的预测值;步骤5,对相对误差的预测值进行校正,从而得到预测速率;解决了由于最小二乘支持向量机核函数参数和惩罚参数的经验性赋值而导致的预测精度不足的问题.
%===================================================================== %初始化 clc close all clear format long tic %============================================================== %%导入数据 data=xlsread('1.xlsx'); [row,col]=size(data); x=data(:,1:col-1); y=data(:,col); set=1; %设置测量样本数 row1=row-set;% train_x=x(1:row1,:); train_y=y(1:row1,:); test_x=x(row1+1:row,:);%预测输入 test_y=y(row1+1:row,:);%预测输出 train_x=train_x'; train_y=train_y'; test_x=test_x'; test_y=test_y'; %%数据归一化 [train_x,minx,maxx, train_yy,miny,maxy] =premnmx(train_x,train_y); test_x=tramnmx(test_x,minx,maxx); train_x=train_x'; train_yy=train_yy'; train_y=train_y'; test_x=test_x'; test_y=test_y'; %% 参数初始化 %粒子群算法中的两个参数 c1 = 1.5;%; % c1 belongs to [0,2] c1:初始为1.5,pso参数局部搜索能力,表征个体极值对当前解得影响 c2 = 1.7;%; % c2 belongs to [0,2] c2:初始为1.7,pso参数全局搜索能力,表征全局极值对当前解得影响 maxgen=100; % 进化次数 300 sizepop=30; % 种群规模30 popcmax=10^(3);% popcmax:初始为1000,SVM 参数c的变化的最大值. popcmin=10^(-1);% popcmin:初始为0.1,SVM 参数c的变化的最小值. popgmax=10^(2);% popgmax:初始为100,SVM 参数g的变化的最大值 popgmin=10^(-2);% popgmin:初始为0.01,SVM 参数g的变化的最小值. k = 0.5; % k belongs to [0.1,1.0]; itness(j) = fitness(j); end %群体最优更新 if fitness(j) < global_fitness global_x = pop(j,:); global_fitness = fitness(j); end if abs( fitness(j)-global_fitness )<=eps && pop(j,1) < global_x(1) global_x = pop(j,:); global_fitness = fitness(j); end end fit_gen(i)=global_fitness; avgfitness_gen(i) = sum(fitness)/sizepop; %if global_fitness<0.00005%设定终止条件,避免网络过度训练,影响推广能力。 %break; %end end %% 结果分析 plot(fit_gen,'LineWidth',2); title(['蝗虫算法优化svm适应度曲线','(参数c1=',num2str(c1),',c2=',num2str(c2),',终止代数=',num2str(maxgen),')'],'FontSize',13); xlabel('进化代数');ylabel('误差适应度'); bestc = global_x(1); bestg = global_x(2); gam=bestc sig2=bestg model=initlssvm(train_x,train_yy,type,gam,sig2,kernel,proprecess);%原来是显示 model=trainlssvm(model);%原来是显示 %求出训练集和测试集的预测值 [train_predict_y,zt,model]=simlssvm(model,train_x); [test_predict_y,zt,model]=simlssvm(model,test_x); %预测数据反归一化 train_predict=postmnmx(train_predict_y,miny,maxy);%预测输出 test_predict=postmnmx(test_predict_y,miny,maxy); %计算均方差 trainmse=sum((train_predict-train_y).^2)/length(train_y) %testmse=sum((test_predict-test_y).^2)/length(test_y) for i=1:set RD(i)=(test_predict(i)-test_y(i))/test_y(i)*100; end for i=1:set D(i)=test_predict(i)-test_y(i); end RD=RD' D=D' figure plot(test_predict,':og') hold on plot(test_y,'- *') legend('预测输出','期望输出') title('网络预测输出','fontsize',12) ylabel('函数输出','fontsize',12) xlabel('样本','fontsize',12) figure plot(train_predict,':og') hold on plot(train_y,'- *') legend('预测输出','期望输出') title('网络预测输出','fontsize',12) ylabel('函数输出','fontsize',12) xlabel('样本','fontsize',12) toc %计算时间
[1]聂敬云, 李春青, 李威威, & 王韬. (2015). 关于遗传算法优化的最小二乘支持向量机在mbr仿真预测中的研究. 软件(5), 6.
[2]吴小涛等. "基于二阶数据分解算法和蝗虫优化混合核LSSVM的太阳辐照度预测模型研究." 可再生能源 39.7(2021):9.