基于布谷鸟算法优化最小二乘支持向量机lssvm实现预测matlab代码

 1 简介

本文提出一种基于布谷鸟算法优化最小二乘支持向量机的数据预测方法。LSSVM 是一种新型机器学习算法,其在传统支持向量机 SVM 基础上,将二次规划问题中的不等式约束改为等式约束,极大地方便了求解过程,克服了数据集粗糙、数据集波动性大等问题造成的异常回归,能有效避免 BP 神经网络等方法中出现的局部最优等问题。

布谷鸟算法是英国剑桥大学著名学者 Yang 和 Deb 于 2009年根据布谷鸟的繁殖特征和飞行提出的一种新型启发式优化算法。学者运用了大量的函数进行测试证明该算法在某些方面优于粒子群算法和遗传算法,优势体现在: 全局搜索能力强、收敛速度快、所含参数少、通用性和鲁棒性更好等。布谷鸟算法是通过布谷鸟特殊的繁殖方式和飞行演变而来的。其将自己的鸟蛋产在别的宿主鸟的巢穴里进行孵化,如果布谷鸟这一行为被宿主鸟当场发现,就会出现激烈的冲突; 如果布谷鸟将蛋产完后宿主发现蛋并非自己的,则会将这个蛋或巢穴直接放弃。因此布谷鸟产蛋一般会选择刚刚产完蛋的巢穴进行产蛋,这样一旦布谷鸟的蛋被保留下来,则通常情况下布谷鸟蛋会比其余鸟蛋先孵化出来。而布谷鸟新幼体又有本能会将其余鸟蛋推出巢穴之外,这样宿主鸟就会将布谷鸟抚养长大。另 外,许多学者研究发现许多动物和昆虫的飞行行为都具有飞行的特征]。如果蝇飞行过程中突然转 90°弯,如 Ju’hoansi的狩猎行为等行为,都符合 飞行的特征。Yang 提出的布谷鸟算法,是基于以下三种假设的: ( 1) 每只布谷鸟一次只产一个蛋,同时随机选择鸟巢产蛋; ( 2) 最好鸟巢中的高质量的蛋会被保留并孵化出下一代; ( 3) 宿主发现外来鸟蛋的概率 ,一旦发现,宿主会将这个蛋或巢穴直接放弃。

算法流程如下:

步骤1,采集时间序列的样本数据;

步骤2,建立基于布谷鸟算法优化参数的LSSVM数据预测模型;

步骤3,应用预测模型对训练样本进行预测,得到训练样本的相对误差和预测值;步骤4,预测模型对训练样本的相对误差进行预测,从而得到相对误差的预测值;步骤5,对相对误差的预测值进行校正,从而得到预测速率;解决了由于最小二乘支持向量机核函数参数和惩罚参数的经验性赋值而导致的预测精度不足的问题.

2 部分代码

   %=====================================================================
%初始化
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   %计算时间

3 仿真结果

基于布谷鸟算法优化最小二乘支持向量机lssvm实现预测matlab代码

4 参考文献

[1]聂敬云, 李春青, 李威威, & 王韬. (2015). 关于遗传算法优化的最小二乘支持向量机在mbr仿真预测中的研究. 软件(5), 6.

[2]吴小涛等. "基于二阶数据分解算法和蝗虫优化混合核LSSVM的太阳辐照度预测模型研究." 可再生能源 39.7(2021):9.

基于布谷鸟算法优化最小二乘支持向量机lssvm实现预测matlab代码

上一篇:Matlab分析函数、多项式、非线性函数


下一篇:Matlab优化工具箱