• 【预测模型-BP分类】基于人工蜂群算法优化BP神经网络实现数据分类附matlab代码


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

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

    🍊个人信条:格物致知。

    更多Matlab仿真内容点击👇

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

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

    ⛄ 内容介绍

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

    ⛄ 部分代码

    clc;

    clear;

    close all;

    %% Problem Definition

    CostFunction=@(x) Sphere(x);        % Cost Function

    nVar=5;             % Number of Decision Variables

    VarSize=[1 nVar];   % Decision Variables Matrix Size

    VarMin=-10;         % Decision Variables Lower Bound

    VarMax= 10;         % Decision Variables Upper Bound

    %% ABC Settings

    MaxIt=200;              % Maximum Number of Iterations

    nPop=100;               % Population Size (Colony Size)

    nOnlooker=nPop;         % Number of Onlooker Bees

    L=round(0.6*nVar*nPop); % Abandonment Limit Parameter (Trial Limit)

    a=1;                    % Acceleration Coefficient Upper Bound

    %% Initialization

    % Empty Bee Structure

    empty_bee.Position=[];

    empty_bee.Cost=[];

    % Initialize Population Array

    pop=repmat(empty_bee,nPop,1);

    % Initialize Best Solution Ever Found

    BestSol.Cost=inf;

    % Create Initial Population

    for i=1:nPop

        pop(i).Position=unifrnd(VarMin,VarMax,VarSize);

        pop(i).Cost=CostFunction(pop(i).Position);

        if pop(i).Cost<=BestSol.Cost

            BestSol=pop(i);

        end

    end

    % Abandonment Counter

    C=zeros(nPop,1);

    % Array to Hold Best Cost Values

    BestCost=zeros(MaxIt,1);

    %% ABC Main Loop

    for it=1:MaxIt

        

        % Recruited Bees

        for i=1:nPop

            

            % Choose k randomly, not equal to i

            K=[1:i-1 i+1:nPop];

            k=K(randi([1 numel(K)]));

            

            % Define Acceleration Coeff.

            phi=a*unifrnd(-1,+1,VarSize);

            

            % New Bee Position

            newbee.Position=pop(i).Position+phi.*(pop(i).Position-pop(k).Position);

            

            % Evaluation

            newbee.Cost=CostFunction(newbee.Position);

            

            % Comparision

            if newbee.Cost<=pop(i).Cost

                pop(i)=newbee;

            else

                C(i)=C(i)+1;

            end

            

        end

        

        % Calculate Fitness Values and Selection Probabilities

        F=zeros(nPop,1);

        MeanCost = mean([pop.Cost]);

        for i=1:nPop

            F(i) = exp(-pop(i).Cost/MeanCost); % Convert Cost to Fitness

        end

        P=F/sum(F);

        

        % Onlooker Bees

        for m=1:nOnlooker

            

            % Select Source Site

            i=RouletteWheelSelection(P);

            

            % Choose k randomly, not equal to i

            K=[1:i-1 i+1:nPop];

            k=K(randi([1 numel(K)]));

            

            % Define Acceleration Coeff.

            phi=a*unifrnd(-1,+1,VarSize);

            

            % New Bee Position

            newbee.Position=pop(i).Position+phi.*(pop(i).Position-pop(k).Position);

            

            % Evaluation

            newbee.Cost=CostFunction(newbee.Position);

            

            % Comparision

            if newbee.Cost<=pop(i).Cost

                pop(i)=newbee;

            else

                C(i)=C(i)+1;

            end

            

        end

        

        % Scout Bees

        for i=1:nPop

            if C(i)>=L

                pop(i).Position=unifrnd(VarMin,VarMax,VarSize);

                pop(i).Cost=CostFunction(pop(i).Position);

                C(i)=0;

            end

        end

        

        % Update Best Solution Ever Found

        for i=1:nPop

            if pop(i).Cost<=BestSol.Cost

                BestSol=pop(i);

            end

        end

        

        % Store Best Cost Ever Found

        BestCost(it)=BestSol.Cost;

        

        % Display Iteration Information

        disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);

        

    end

        

    %% Results

    figure;

    %plot(BestCost,'LineWidth',2);

    semilogy(BestCost,'LineWidth',2);

    xlabel('Iteration');

    ylabel('Best Cost');

    grid on;

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

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

    ⛄ 运行结果

    ⛄ 参考文献

    [1]李文越, 周思源, 庞京城. 基于人工蜂群算法优化BP神经网络的交通流预测[J]. 山东交通学院学报, 2017, 25(1):6.

    [2]徐健, 陈倩倩, 刘秀平. 基于交叉运算的人工蜂群优化BP神经网络的脑电信号分类[J]. 激光与光电子学进展, 2020.

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

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

  • 相关阅读:
    FPGA——用VGA时序显示图像(3)(代码)
    俯瞰·明攻山西之战(太原之战)
    几个常用的函数
    Java 如何检测Map集合中是否包含指定value呢?
    深圳唯创知音电子将参加IOTE 2023第二十届国际物联网展•深圳站
    香飘飘的想象空间:全面创新驱动外延与内涵双增长,未来可期
    【Spring】条件注解
    Android stdio的Gradle菜单栏无内容问题的解决方法
    mac pro M1(ARM)安装:ftp远程文件互传工具
    计算机网络-网络层(BGP协议,IP组播,IGMP协议与组播路由选择协议)
  • 原文地址:https://blog.csdn.net/matlab_dingdang/article/details/127282745