ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【SVM分类】基于人工蜂群算法改进SVM实现数据分类matlab源码

2021-07-25 19:01:09  阅读:214  来源: 互联网

标签:蜂群 SVM 分类 pop 算法 Cost nPop Position 源码


一、神经网络-支持向量机

支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。 1 数学部分 1.1 二维空间 ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ 2 算法部分 ​​ ​​ ​​ 

二、人工蜂群算法

受到蜜蜂群体的有组织的觅食过程的启发,Karaboga提出了模拟蜜蜂群体觅食过程的人工蜂群(Artificial Bee Colony) 算法用于解决多维度多峰谷的优化问题。该算法创始之初被用来寻找Sphere、Rosenbrock和Rastrigin函数的最小值。 首先对蜜蜂基于摇摆舞进行觅食的过程特征进行介绍。在图1中,存在两个已发现的食物源A和B。初始时,潜在工蜂以非雇佣蜂的身份进行搜索。它并不知道蜂房附近的任何蜜源的信息。因此,它有以下两个可能的选择: (1)成为一个侦察蜂,秉着自身潜在动力或外在因素自发的搜索蜂房附近的区域(见图1中的S); (2)在观看摆尾舞后,成为一个被招募者,并开始搜索蜜源(见图1中的R)。 在定位蜜源之后,该蜜蜂能够利用自身的能力来记住食物源的位置,并立刻对它进行探索。该蜜蜂现在成为了一个雇佣蜂。雇佣蜂采到蜂蜜后,从蜜源处返回蜂房并将蜂蜜卸载到蜜室中。在卸载完蜂蜜后,雇佣蜂有下列三个选择: (1)放弃已经采集过的蜜源,成为一个受其他摇尾舞招募的跟随者(UF)。 (2)施展摇尾舞技,招募蜂房内的同伴,再次回到原先采集过的食物源(EF1)。 (3)不招募其它的蜜蜂,继续探索采集过的食物源(EF2)。 ​​

二、算法流程

人工蜂群算法由连续的四个阶段组成,分别是初始化阶段、引领(雇佣)蜂阶段、跟随蜂阶端和侦察蜂阶段。 人工蜂群算法中将人工蜂群分为引领蜂、跟随蜂和侦察蜂三类,每一次搜索过程中,引领蜂和跟随蜂是先后开采食物源,即寻找最优解,而侦察蜂是观察是否陷入局部最优,若陷入局部最优则随机地搜索其它可能的食物源。每个食物源代表问题一个可能解,食物源的花蜜量对应相应解的质量(适应度值f i t fitfit)。 ​​

1、初始化阶段

​​2、引领蜂阶段

​​3、跟随蜂阶段

4、侦察蜂阶段

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;

在这里插入图片描述

5.参考文献:

书籍《MATLAB神经网络43个案例分析》

完整代码下载或者仿真咨询https://www.cnblogs.com/ttmatlab/p/14882966.html

 

标签:蜂群,SVM,分类,pop,算法,Cost,nPop,Position,源码
来源: https://www.cnblogs.com/matlabxiao/p/15058647.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有