基于灰狼算法優化支持向量機的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學習之家

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

1
2