【预测模型-BP分类】基于萤火虫算法优化BP神经网络实现数据分类附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

个人主页:Matlab科研工作室

个人信条:格物致知。

更多Matlab仿真内容点击

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

信号处理 图像处理 路径规划 元胞自动机 无人机

⛄ 内容介绍

为了提高数据分类准确率,提出一种基于萤火虫算法和BP神经网络的分类方法.针对反向传播(BP)神经网络存在全局搜索能力差,萤火虫算法来优化BP神经网络对初始权重敏感的问题,进而实现对数据的分类.实验结果表明,所提算法对数据的分类准确率更高,分类准确率达到94.5%,而且可以加快收敛速度

⛄ 部分代码

%==========================================================================

% 算法说明:荧火虫算法(GSO:Glowworm swarm optimisation:a new method for optimising mutlti-modal functions)

% =========================================================================

clc

clear;%清除变量

close all;

% ================================初始化开始================================

domx=[-3,3;-3,3];%定义域

%domx=[-2.048,2.048;-2.048,2.048];

rho   =0.4; %荧光素挥发因子

gamma =0.6; %适应度提取比例

beta  =0.08;%邻域变化率

nt    =5;   %邻域阀值(邻域荧火虫数)

s     =0.01;%步长

iot0  =5;   %荧光素浓度

rs    =3;   %3;%感知半径

r0    =1.5; %3;%决策半径

% ================================初始化结束================================

% ===============================分配空间开始===============================

m =size(domx,1);    %函数空间维数

n =50;              %萤火虫个数

gaddress =zeros(n,m);%分配荧火虫地址空间

ioti     =zeros(n,1);    %分配荧光素存放空间

rdi      =zeros(n,1);     %分配荧火虫决策半径存放空间

% ===============================分配空间结束===============================

figure(1);

sign_first = 1;

step_track = 0;

x = -3:0.1:3;

y = -3:0.1:3;

[xx,yy] = meshgrid(x,y);

j1=3*(1-xx).^2.*exp(-(xx.^2+(yy+1).^2));

j2=10*(xx./5-xx.^3-yy.^5).*exp(-(xx.^2+yy.^2));

j3=(1/3)*exp(-((xx+1).^2+yy));

zz=j1-j2-j3;

figure(1);

surf(xx,yy,zz);

hold on

% ===========================荧火虫常量初始化开始============================

%1.初始化地址

for i=1:m

    gaddress(:,i)=domx(i,1)+(domx(i,2)-domx(i,1))*rand(n,1);

end

gvalue = maxfun(gaddress);

gbest_old = max(gvalue);

%

%可视化

plot3(gaddress(:,1),gaddress(:,2),gvalue(:),'b*');

drawnow;

pause(1);

%

%2.初始化荧光素

ioti(:,1)=iot0;

%3.初始化决策半径

rdi(:,1)=r0;

iter_max=500;%最大迭代次数

t=1;%迭代累计

unchange = 0;

% ===========================荧火虫常量初始化结束============================

% =============================iter_max迭代开始=============================

while(t<=iter_max) && (unchange<60)

    %1.更新荧光素

    ioti=max(0,(1-rho)*ioti+gamma*maxfun(gaddress));

    %2.各荧火虫移动过程开始

    for i=1:n

        %2.1 决策半径内找更优点

        Nit=[];%存放荧火虫序号

        for j=1:n

            if (norm(gaddress(j,:)-gaddress(i,:))

                Nit(numel(Nit)+1)=j;

            end

        end

        %2.2 找下一步移动的点开始

        if length(Nit)>0 %先判断Nit个数不为0

            Nitioti=ioti(Nit,1);%选出Nit荧光素

            SumNitioti=sum(Nitioti);%Nit荧光素和

            Molecular=Nitioti-ioti(i,1);%分子

            Denominator=SumNitioti-ioti(i,1);%分母

            Pij=Molecular./Denominator;%计算Nit各元素被选择概率

            Pij=cumsum(Pij);%累计

            Pij=Pij./Pij(end);%归一化

            Pos=find(rand

            j=Nit(Pos(1));%确定j的位置

            %荧火虫i向j移动一小步

            gaddress(i,:)=gaddress(i,:)+s*(gaddress(j,:)-gaddress(i,:))/norm(gaddress(j,:)-gaddress(i,:));

            gaddress(i,:)=range(gaddress(i,:),domx);%限制范围

            

            %

            %更新决策半径

            rdi(i)=rdi(i)+beta*(nt-length(Nit));

            if rdi(i,1)<0

                rdi(i,1)=0;

            end

            if rdi(i,1)>rs

                rdi(i,1)=rs;

            end

        end

        %2.2 找下一步移动的点结束

    end

    %

    %可视化

    gvalue = maxfun(gaddress);

    gbest_new = max(gvalue);

    

    if gbest_new > gbest_old

        unchange = 0;

        gbest_old = gbest_new;

    else

        unchange = unchange + 1;

    end

    

    %plot(gaddress(:,1),gaddress(:,2),'b.','markersize',6);hold on;

    if mod(t,20)

        plot3(gaddress(:,1),gaddress(:,2),gvalue(:),'b*');

        drawnow;

        pause(0.01);

    end

    %2.各荧火虫移动过程结束

    %保存动态图gif

            f=getframe(gcf);  

            imind=frame2im(f);

            [imind,cm] = rgb2ind(imind,256);

             if(sign_first==1)

                 sign_first=0;

                imwrite(imind,cm,'track.gif','gif', 'Loopcount',inf,'DelayTime',0.02);

             else

                imwrite(imind,cm,'track.gif','gif','WriteMode','append','DelayTime',0.02);

             end

             %保存动态图gif

    t=t+1;

end

% =============================iter_max迭代结束=============================

% =============================输出最优结果开始=============================

gvalue=maxfun(gaddress);%求各个荧火虫的值

disp('最大值为:')

num=find(gvalue==max(gvalue));%最大值序号

MaxValue=-max(gvalue)

disp('最优解为:')

BestAddress=gaddress(num,:);

% =============================输出最优结果结束=============================

⛄ 运行结果

【预测模型-BP分类】基于萤火虫算法优化BP神经网络实现数据分类附matlab代码_第1张图片

⛄ 参考文献

[1]彭新建, 翁小雄. 基于萤火虫算法优化BP神经网络的公交行程时间预测[J]. 广西师范大学学报:自然科学版, 2017, 35(1):9.

❤️ 关注我领取海量matlab电子书和数学建模资料

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

 

你可能感兴趣的:(神经网络预测,算法,分类,神经网络)