编程语言
首页 > 编程语言> > 【SVM分类】基于人工蜂群算法改进SVM实现数据分类matlab源码

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

作者:互联网

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

支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。 1 数学部分 1.1 二维空间 b5f94bf66a57585aeb4dac877e8da0d1.png2323581a095e6fee769433e6607364a0.gif​​ 6e68dd4a80172a5dc1c18fffdaed1d6d.png4660221e9d2cd4c0f80ad50296ba0c70.gif​​ 1213983f58af6c9b9b545c0e57e55d02.png5eb251622320f6209f85a2dfd37892d6.gif​​ ​2323581a095e6fee769433e6607364a0.gif​​ 476ff97fff268e4482eca0e6b544e2bb.png4660221e9d2cd4c0f80ad50296ba0c70.gif​​ b57de0b68560330e30df8ccd39f8050b.png4660221e9d2cd4c0f80ad50296ba0c70.gif​​ ​2323581a095e6fee769433e6607364a0.gif​​ 158942d14e123567f1b890877593380e.pngf4d2ad16f713b70af50bdd2ec5385c34.gif​​ ​4660221e9d2cd4c0f80ad50296ba0c70.gif​​ 2 算法部分 ​c3ac078126295225b4715a321c1e5263.gif​​ ​5eb251622320f6209f85a2dfd37892d6.gif​​ ​f4d2ad16f713b70af50bdd2ec5385c34.gif​​ ​

二、人工蜂群算法

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

二、算法流程

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

1、初始化阶段

7775edf63fdc06cbb1769396d5df25d9.pnge42dbcff6b969e27b89a4c548339a5b4.gif​2、引领蜂阶段

3a78fe87ba98a122f4322dae13035362.png1578b53aa27f8972390a5752b81cd05e.gif​3、跟随蜂阶段

cc1f98854598e49a6350333400bc52a0.png7a529478e4cea43de4ec3083b462b9a6.gif

4、侦察蜂阶段

77a6b3c2b3931e3b2bb202ee2be70c57.png

5、食物源

53a7641046320d81059f3cd759cad464.png

​三、代码



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;

96fdca326d76f2584c218caf0ac0659b.png

5.参考文献:

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

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

标签:蜂群,SVM,分类,pop,算法,Cost,nPop,Position,源码
来源: https://blog.51cto.com/u_15287693/2984881