【SVM分类】基于狮群算法优化最小二乘支持向量机实现数据分类附matlab代码

206 阅读2分钟

1 简介

本文提出了一种狮群算法改进的最小二乘支持向量机数据分类模型。

狮群优化算法(Loin Swarm Optimization, LSO),是于2018年提出的一种新型智能优化算法。基于狮群中狮王、母狮及幼狮的自然分工,模拟狮王守护、母狮捕猎、幼狮跟随3种群智能行为,提出群体智能算法——狮群算法.算法中不同种类的狮子位置更新方式不同.遵循自然界生物"适者生存"的竞争法则,狮王守护领土,优先享用食物,母狮合作捕猎,幼狮分为学习捕猎、饥饿进食和成年被驱逐.狮子位置更新方式的多样化保证算法快速收敛,不易陷入局部最优.最后,将算法应用于6个标准测试函数优化问题,并对比粒子群算法、骨干粒子群算法,测试结果表明,文中算法收敛速度较快,精度较高,能较好地获得全局最优解.

图片

图片

​2 部分代码

%_____________________________________%

%狮群算法             %

%_____________________________________%

function [Best_pos,Best_score,curve]=LSO(pop,Max_iter,lb,ub,dim,fobj)

beta = 0.5;%成年狮所占比列

Nc = round(pop*beta);%成年狮数量

Np = pop-Nc;%幼师数量

if(max(size(ub)) == 1)

   ub = ub.*ones(1,dim);

   lb = lb.*ones(1,dim);  

end

%种群初始化

X0=initialization(pop,dim,ub,lb);

X = X0;

%计算初始适应度值

fitness = zeros(1,pop);

for i = 1:pop

   fitness(i) =  fobj(X(i,:));

end

 [value, index]= min(fitness);%找最小值

GBestF = value;%全局最优适应度值

GBestX = X(index,:);%全局最优位置

curve=zeros(1,Max_iter);

XhisBest = X;

fithisBest = fitness;

indexBest = index; 

gbest = GBestX;

for t = 1: Max_iter

    

    %母狮移动范围扰动因子计算

    stepf = 0.1*(mean(ub) - mean(lb));

    alphaf = stepf*exp(-30*t/Max_iter)^10;

    %幼狮移动范围扰动因子计算

    alpha = (Max_iter - t)/Max_iter;

    %母狮位置更新

   for i = 1:Nc

       index = i;

       while(index == i)

        index = randi(Nc);%随机挑选一只母狮

       end

       X(i,:) = (X(i,:) + X(index,:)).*(1 + alphaf.*randn())./2;

   end

   %幼师位置更新

   for i = Nc+1:pop

       q=rand;

       if q<=1/3

           X(i,:) = (gbest + XhisBest(i,:)).*( 1 + alpha.*randn())/2;

       elseif q>1/3&&q<2/3

           indexT = i;

           while indexT == i

            indexT = randi(Nc) + pop - Nc;%随机位置

           end

           

            X(i,:) = (X(indexT,:) + XhisBest(i,:)).*( 1 + alpha.*randn())/2;          

       else

           gbestT = ub + lb - gbest;

            X(i,:) = (gbestT + XhisBest(i,:)).*( 1 + alpha.*randn())/2; 

       end     

   end 

   %边界控制

   for j = 1:pop

       for a = 1: dim

           if(X(j,a)>ub)

               X(j,a) =ub(a);

           end

           if(X(j,a)<lb)

               X(j,a) =lb(a);

           end

       end

   end 

   %计算适应度值

   for j=1:pop

    fitness(j) = fobj(X(j,:));

   end

   for j = 1:pop

    if(fitness(j)<fithisBest(j))

        XhisBest(j,:) = X(j,:);

        fithisBest(j) = fitness(j);

    end

    if(fitness(j) < GBestF)

        GBestF = fitness(j);

        GBestX = X(j,:);   

        indexBest = j;

    end

   end

   %% 狮王更新

   Temp = gbest.*(1 + randn().*abs(XhisBest(indexBest,:) - gbest));

   Temp(Temp>ub)=ub(Temp>ub);

   Temp(Temp<lb) = lb(Temp<lb);

   fitTemp = fobj(Temp);

   if(fitTemp<GBestF)

       GBestF =fitTemp;

       GBestX = Temp;

       X(indexBest,:)=Temp;

       fitness(indexBest) = fitTemp;

   end

   [value, index]= min(fitness);%找最小值

   gbest = X(index,:);%当前代,种群最优值

   curve(t) = GBestF;

end

Best_pos = GBestX;

Best_score = curve(end);

end

3 仿真结果

4 参考文献

[1]杨艳, 刘生建, 周永权. 贪心二进制狮群优化算法求解多维背包问题[J]. 计算机应用, 2020, 40(5):4.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。