基于灰狼算法优化支持向量机的matlab算法

灰狼优化算法优化支持向量机MATLAB实战

    今天给大家分享灰狼优化算法的MATLAB实战 ,主要从算法原理和代码实战展开。

需要了解更多算法代码的,可以点击文章左下角的阅读全文,进行获取哦~需要了解智能算法、机器学习、深度学习和信号处理相关理论的可以后台私信哦,下一期分享的内容就是你想了解的内容~

一、灰狼优化算法

    灰狼优化算法(Grey Wolf Optimizer,GWO)由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优化算法。该算法受到了灰狼捕食猎物活动的启发而开发的一种优化搜索方法,它具有较强的收敛性能、参数少、易实现等特点。

    灰狼属于犬科动物,被认为是顶级的掠食者,它们处于生物圈食物链的顶端。灰狼大多喜欢群居,它们具有非常严格的社会等级层次制度,如下图所示。

基于灰狼算法优化支持向量机的matlab算法的图1

       金字塔第一层为种群中的领导者,称为 α 。在狼群中 α 是具有管理能力的个体,主要负责关于狩猎、睡觉的时间和地方、食物分配等群体中各项决策的事务。

     金字塔第二层是 α 的智囊团队,称为 β 。β 主要负责协助α 进行决策。当整个狼群的 α 出现空缺时,β 将接替 α 的位置。β 在狼群中的支配权仅次于 α,它将 α 的命令下达给其他成员,并将其他成员的执行情况反馈给 α 起着桥梁的作用。

      金字塔第三层是 δ ,δ 听从 α 和 β 的决策命令,主要负责侦查、放哨、看护等事务。适应度不好的 α 和 β 也会降为 δ 。金字塔最底层是 ω ,主要负责种群内部关系的平衡。

    灰狼的社会等级在群体狩猎过程中发挥着重要的作用,捕食的过程在 α 的带领下完成。灰狼的狩猎包括以下 3个主要部分:跟踪、追逐和接近猎物;追捕、包围和骚扰猎物,直到它停止移动;攻击猎物。

  (1)包围猎物

    在狩猎过程中,将灰狼围捕猎物的行为定义如下:

基于灰狼算法优化支持向量机的matlab算法的图2

    式(1)表示个体与猎物间的距离,式(2)是灰狼的位置更新公式。

    (2)狩猎

      灰狼能够识别猎物的位置并包围它们。当灰狼识别出猎物的位置后,β和δ在α 的带领下指导狼群包围猎物。在优化问题的决策空间中,我们对最佳解决方案(猎物的位置并不了解。因此,为了模拟灰狼的狩猎行为,我们假设α,β和δ 更了解猎物的潜在位置。我们保存迄今为止取得的3个最优解决方案,并利用这三者的位置来判断猎物所在的位置,同时强 迫其他灰狼个体(包括ω)依据最优灰狼个体的位置来更新其位置,逐渐 逼 近 猎 物。狼群内个体跟踪猎物位置的机制如下图所示。

基于灰狼算法优化支持向量机的matlab算法的图3

二、GWO算法流程

       GWO算法的流程图如图4所示。

基于灰狼算法优化支持向量机的matlab算法的图4

三、代码实战

       以GWO优化SVM的多分类问题为例,GWO优化SVM的超参数C和g.

        

tic % 计时器

%% 清空环境变量

close all

clear

clc

data=xlsread('数据集.xlsx');

train_x = data(1:1000,1:end-1)';

train_y = data(1:1000,end)';

test_x = data(1001:end,1:end-1)';

test_y = data(1001:end,end)';

train_x=train_x'

train_y=train_y';

test_x=test_x';

test_y=test_y';

%% 数据预处理

% 数据预处理,将训练集和测试集归一化到[0,1]区间

[mtrain,ntrain] = size(train_x);

[mtest,ntest] = size(test_x);

dataset = [train_x;test_x];

% mapminmax为MATLAB自带的归一化函数

[dataset_scale,ps] = mapminmax(dataset',0,1);

dataset_scale = dataset_scale';

train_x = dataset_scale(1:mtrain,:);

test_x = dataset_scale( (mtrain+1):(mtrain+mtest),: );

%% 利用灰狼算法选择最佳的SVM参数c和g

SearchAgents_no=10; % 狼群数量,Number of search agents

Max_iteration=10; % 最大迭代次数,Maximum numbef of iterations

dim=2; % 此例需要优化两个参数c和g,number of your variables

lb=[0.01,0.01]; % 参数取值下界

ub=[100,100]; % 参数取值上界

% v = 5; % SVM Cross Validation参数,默认为5

Convergence_curve=zeros(1,Max_iteration);

l=0; % Loop counter循环计数器

% Main loop主循环

while l<Max_iteration  % 对迭代次数循环

    for i=1:size(Positions,1)  % 遍历每个狼

        if fitness>Alpha_score && fitness<Beta_score % 如果目标函数值介于于Alpha狼和Beta狼的目标函数值之间

            Beta_score=fitness; % 则将Beta狼的目标函数值更新为最优目标函数值,Update beta

            Beta_pos=Positions(i,:); % 同时更新Beta狼的位置

        end

        

        if fitness>Alpha_score && fitness>Beta_score && fitness<Delta_score  % 如果目标函数值介于于Beta狼和Delta狼的目标函数值之间

            Delta_score=fitness; % 则将Delta狼的目标函数值更新为最优目标函数值,Update delta

            Delta_pos=Positions(i,:); % 同时更新Delta狼的位置

        end

    end

    

    a=2-l*((2)/Max_iteration); % 对每一次迭代,计算相应的a值,a decreases linearly fron 2 to 0

    

    % Update the Position of search agents including omegas

    for i=1:size(Positions,1) % 遍历每个狼

        for j=1:size(Positions,2) % 遍历每个维度

            

            % 包围猎物,位置更新

            

            r1=rand(); % r1 is a random number in [0,1]

            r2=rand(); % r2 is a random number in [0,1]

            

            A1=2*a*r1-a; % 计算系数A,Equation (3.3)

            C1=2*r2; % 计算系数C,Equation (3.4)

            

            % Alpha狼位置更新

            D_alpha=abs(C1*Alpha_pos(j)-Positions(i,j)); % Equation (3.5)-part 1

            X1=Alpha_pos(j)-A1*D_alpha; % Equation (3.6)-part 1

                       

            r1=rand();

            r2=rand();

            

            A2=2*a*r1-a; % 计算系数A,Equation (3.3)

            C2=2*r2; % 计算系数C,Equation (3.4)

            

            % Beta狼位置更新

            D_beta=abs(C2*Beta_pos(j)-Positions(i,j)); % Equation (3.5)-part 2

            X2=Beta_pos(j)-A2*D_beta; % Equation (3.6)-part 2       

            

            r1=rand();

            r2=rand(); 

            

            A3=2*a*r1-a; % 计算系数A,Equation (3.3)

            C3=2*r2; % 计算系数C,Equation (3.4)

            

            % Delta狼位置更新

            D_delta=abs(C3*Delta_pos(j)-Positions(i,j)); % Equation (3.5)-part 3

            X3=Delta_pos(j)-A3*D_delta; % Equation (3.5)-part 3             

            

            % 位置更新

            Positions(i,j)=(X1+X2+X3)/3;% Equation (3.7)

            

        end

    end

    l=l+1;    

    Convergence_curve(l)=Alpha_score;

end

bestc=Alpha_pos(1,1);

bestg=Alpha_pos(1,2);

bestGWOaccuarcy=Alpha_score;

%% 利用最佳的参数进行SVM网络训练

% model = fitcecoc(train_x, train_y,cmd_gwosvm);

% save classifier.mat model;

% predict_label = predict(model,test_x);

% predict_label2 = predict(model,train_x);

% 打印测试集分类准确率

k1 = length(test_y);

n1 = length(find(predict_label == test_y));

disp('打印测试集分类准确率');

Accuracy_1 = n1  / k1 * 100;

k2 = length(train_y);

n2 = length(find(predict_label2 == train_y));

disp('打印测试集分类准确率');

Accuracy_2 = n2  / k2 * 100;

%% 结果分析

% 测试集的实际分类和预测分类图

figure;

hold on;

plot(test_y,'b-o');

plot(predict_label,'r-*');

legend('真实类别','预测类别')

xlabel('测试集')

ylabel('测试集类别')

string = {'SVM-GWO训练集';['正确率Accuracy = ' num2str(Accuracy_2) '%' ]};

title(string)
%% 显示程序运行时间toc%fpr 精确率 tpr召回率[Metrics_test,FPR,TPR]=polygonareametric(test_y,predict_label,0);
predict_label2=categorical(predict_label2);train_y=categorical(train_y);predict_label=categorical(predict_label);test_y=categorical(test_y);
figureplotconfusion(predict_label2,train_y)
figureplotconfusion(predict_label,test_y)


结果显示

基于灰狼算法优化支持向量机的matlab算法的图5
基于灰狼算法优化支持向量机的matlab算法的图6
基于灰狼算法优化支持向量机的matlab算法的图7
基于灰狼算法优化支持向量机的matlab算法的图8
基于灰狼算法优化支持向量机的matlab算法的图9



文章来源:matlab学习之家

默认 最新
当前暂无评论,小编等你评论哦!
点赞 1 评论 收藏 2
关注