一、粒子群算法优化SVM简介

支持向量机(support vector machine,SVM)是针对有限样本情况的机器学习方法,它的提出根据统计学习理论的VC理论和结构风险最小化原则。支持向量机已经成为智能技术领域研究的热点。它有着泛化能力强,识别率高,算法灵活等诸多优点,但是支持向量机对内部参数有着极高的依赖性,核参数的选取和惩罚因子的设定这两个因素直接影响着分类的准确率,并且针对不同物种的数据集,需要设定不同的参数来适应数据集。因此参数的选择直接决定分类的准确率。

为了提高识别的准确度,本研究提出了粒子群优化算法和支持向量机相结合的支持向量机粒子群优化算法,建立最优的鱼类识别模型。粒子群优化算法最早是由Eberhart和Kennedy提出的,该算法源自对鸟类捕食问题的研究。

粒子群优化支持向量机的步骤如下。


  1. 设鱼类种类粒子数为m。
  2. 粒子速度
    Vi=(Vi1,Vi2,Vi3,…,Vi m) (5)
    粒子位置
    Xi=(Xi1,Xi2,Xi3,…,Xi m) (6)
    并将各粒子本身找到的最优解记为Pb,粒子全区域最优解记为Gb。
  3. 根据得到的粒子数,更新SVM算法中的惩罚系数C和核参数宽度g。
  4. 利用训练集训练SVM算法鱼类分类模型。
  5. 计算适应度函数值
    【优化分类】基于matlab粒子群算法优化SVM分类【含Matlab源码 1588期】_粒子群
    式中:Zs——类内平均距离;
    Zo——类外中心距离;
    n——测试样本数量。
  6. 每个粒子根据式(8),更新速度和位置。
    Vi m=W×Vi m+C1×r1×(Pi m-xi m)+C2×r2×(gi m-xi m) (8)
    Xi=Xi m+Vi m (9)
    式中:W——惯性权重;
    r1,r2——[0,1]范围内的随机数;
    i——当前迭代次数,初始值为1;
    Pi m——第i代个体最优位置;
    gi m——第i代全局最优位置;
    C1,C2——常数;
    Vi m——速度;
    X——粒子位置。
  7. 更新每个粒子的适应度,及选取最好的Pb和Gb。
  8. 若没有达到要求则回到步骤3,直至满足条件时结束。
    将鱼的特征向量投影到高纬度特征空间,在此空间中进行差值运算(同一类中平均距离和同一类外中心距离),其结果作为参数的适应值,最后利用全局寻优能力,进行最优参数搜索。将结果带入SVM进行样本训练。试验结果表明用粒子群优化后的支持向量机分类准确率提高。

二、部分源代码

%% I. 清空环境
clc
clear

%% II. 声明全局变量
global data
data=xlsread('BreastCancer_data');

%% III. 参数初始化
c1 = 0.25;
c2 = 0.25;

maxgen = 16; % 进化次数
sizepop = 4; %种群规模

Vmax = 0.25;
Vmin = -0.25;
popmax = 1;
popmin = 0;

%% IV. 产生初始粒子和速度
for i = 1:sizepop
% 随机产生一个种群
pop(i,:) = rand(1,9); %初始种群
V(i,:) = 0.25*rands(1,9); %初始化速度


%% V. 个体极值和群体极值
[bestfitness bestindex] = max(fitness);
zbest = pop(bestindex,:); %全局最佳
fitnessgbest = fitness; %个体最佳适应度值
fitnesszbest = bestfitness; %全局最佳适应度值

%% VI. 迭代寻优
for i = 1:maxgen

for j = 1:sizepop
% 速度更新
V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
V(j,find(V(j,:)>Vmax)) = Vmax;
V(j,find(V(j,:)<Vmin)) = Vmin;

% 种群更新
pop(j,:) = pop(j,:) + V(j,:);
pop(j,find(pop(j,:)>popmax)) = popmax;
pop(j,find(pop(j,:)<popmin)) = popmin;

% 适应度值更新
fitness(j) = fun(pop(j,:));
end


% 个体最优更新
if fitness(j) > fitnessgbest(j)
gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j);
end

% 群体最优更新
if fitness(j) > fitnesszbest
zbest = pop(j,:);
fitnesszbest = fitness(j);
end
end
yy(i) = fitnesszbest;

end

%% VII.输出结果
n=1;
for m=1:9
if zbest(m)>=0.5
selection(n)=m;

end
end
disp(['基于粒子群算法的SVM特征选择的结果为:特征 ',num2str(selection)]);
disp(['基于粒子群算法的SVM特征选择的分类准确率为:',num2str(fitnesszbest),'%']);

figure
plot(yy)
title('最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);

三、运行结果

【优化分类】基于matlab粒子群算法优化SVM分类【含Matlab源码 1588期】_算法_02

四、matlab版本及参考文献

1 matlab版本

2014a

2 参考文献

[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.

[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

[3]丁顺荣,肖珂.基于粒子群优化SVM和多特征融合的鱼类分类方法研究[J].中国农机化学报. 2020,41(11)