基于蝗虫(蚱蜢)优化算法优化的支持向量机分类模型及其MATLAB实现-附代码

  • Post author:
  • Post category:其他




基于蝗虫(蚱蜢)优化算法GOA优化的支持向量机分类模型SVM及其MATLAB实现-附代码



1. 模型与算法描述



1.1 蝗虫优化算法原理介绍

蝗 虫 优 化 算 法 ( Grasshopper Optimization Algorithm, GOA) 是一种新型的元启发式算法,由 Mirjalili 等人于2017年提出。该算法受幼虫和成年蝗虫大范围移动与寻找食物源的聚集行为启发,具有操作参数少,公式简单的特点。针对基准测试函数优化问题的实验结果表明,GOA的收敛性优于粒子群算法。

在这里插入图片描述


1.1.1 蝗虫群的位置移动





X

i

d

=

c

(

j

=

1

,

j

i

N

c

u

b

d

l

b

d

2

s

(

x

j

d

x

i

d

)

x

j

x

i

d

i

j

)

+

T

d

(

1

)

X_{i}^{d}=c\left(\sum_{j=1,j \neq i}^{N} c \frac{u b_{d}-l b_{d}}{2} s\left(\left|x_{j}^{d}-x_{i}^{d}\right|\right) \frac{x_{j}-x_{i}}{d_{i j}}\right)+{T}_{d}(1)







X











i










d





















=








c








































j


=


1


,


j






















=



i



















N




















c













2














u



b











d


























l



b











d





































s






(































x











j










d



























x











i










d















































)


















d











ij
































x











j



























x











i


































































+










T












d



















(


1


)





式中,



d

d






d





是表示变量维度,



i

,

j

i, j






i


,




j





表示蝗虫个体编号,



u

b

d

l

b

d

ub_d、lb_d






u



b










d





















l



b










d





















分别表示变量的上限与下限,



T

d

T_d







T










d





















表示最优的蝗虫个体位置,



d

i

j

d_{ij}







d











ij






















是两个蝗虫个体之间的欧式距离,c是控制参数,用于平衡算法的全局探索和局部开发。函数



s

(

)

s( )






s


(


)





表示两个蝗虫个体之间的交互力影响。

控制参数



c

c






c





一般设计为线性递减,使得算法具有动态与不确定搜索能力:





c

=

c

max

t

c

max

c

min

T

max

(

2

)

c=\mathrm{c}_{\max }-t \frac{\mathrm{c}_{\max }-\mathrm{c}_{\min }}{\mathrm{T}_{\max }}(2)






c




=









c












m


a


x































t














T












m


a


x

































c












m


a


x




























c












m


i


n






































(


2


)





式中,



c

m

a

x

c

m

i

n

c_{max}、c_{min}







c











ma


x























c











min






















分别表示递减区间的最大值与最小值,



t

t






t





表示当前的迭代次数,



T

m

a

x

T_{max}







T











ma


x






















表示最大迭代次数。


1.1.2 蝗虫个体之间的相互影响





s

(

r

)

=

f

e

r

l

e

r

(

3

)

s(r)=f \mathrm{e}^{\frac{-r}{l}}-\mathrm{e}^{-r}(3)






s


(


r


)




=








f



e























l



















r









































e














r










(


3


)





式中,



f

l

f、l






f





l





分别表示吸引强度参数与吸引尺度参数,取0.5和1.5。




s

(

r

)

>

0

s(r)>0






s


(


r


)




>








0





时,



r

r






r





的取值范围表示吸引区.




s

(

r

)

<

0

s(r)<0






s


(


r


)




<








0





时,



r

r






r





的取值范围表示排斥区.




s

(

r

)

=

0

s(r)=0






s


(


r


)




=








0





时,蝗虫个体之间既不排除也不吸引,



r

r






r





的取值范围表示舒适区.


1.1.3 蝗虫优化算法的基本实现步骤

  1. 初始化最大迭代次数N,种群大小n,变量范围,控制参数的最大值最小值等参数。
  2. 初始化种群位置,计算初始的个体适应度,并得到最优蝗虫位置与适应度。
  3. 开始循环(K=1):使用公式(2)、(3)更新参数。使用公式(1)更新蝗虫个体的位置,并检查是否越界。
  4. 计算每个蝗虫的适应度,更新到目前为止找到的最优食物源(即最优个体位置与适应度)。
  5. 重复执行步骤3和4,直到满足最大迭代次数,结束循环(K=N)。
  6. 返回最优的参数取值和最优的适应度值。



1.2 支持向量机分类介绍

使用台湾林智仁教授开发的libsvm支持向量机库函数,可以进行支持向量机的多分类,并且能简单的设置支持向量机核函数属性,比如线性核函数,多项式核函数,RBF核函数。RBF核函数具有映射范围广、运算快速等特点,使用较为广泛。在libsvm的库函数中,



C

C






C





的值为1,



σ

\sigma






σ





默认取1/k,k为总类别数。这两个参数的取值与支持向量机模型学习能力的关系如下图所示:




C

C






C





取值




σ

\sigma






σ





取值

SVM模型的学习能力
欠学习
过学习

使用智能优化算法优化支持向量机分类时,大多通过优化惩罚参数



C

C






C





与核函数参数



σ

\sigma






σ





来提高分类精度。



2. 蝗虫优化算法GOA优化支持向量机分类模型的构建过程


数据来源:

采用意大利红酒数据集进行分类模型的实现。数据集大小为178组样本,每组样本都具有13个特征,3种标签类型。获取的类型一般采用01的索引编码:

类型 编码
1 1 0 0
2 0 1 0
3 0 0 1
使用支持向量机做分类时,不需要通过索引编码的方式,直接获取123等整数类别即可(各种神经网络分类模型需要在程序中通过编码与解码索引,实现较高的分类精度)。

为了方便操作,将特征与整数类型放到EXCEL中,读取代码的命令如下:

%% 读取数据
data=xlsread('数据.xlsx','Sheet1','A1:N178');  %使用xlsread函数读取EXCEL中对应范围的数据即可  

%输入输出数据
input=data(:,1:end-1);    %data的第一列-倒数第二列为特征指标
output_labels=data(:,end);  %data的最后面一列为标签类型



2.1 优化模型的建立

优化惩罚参数c与核参数



σ

\sigma






σ





,目标函数采用五折交叉验证的最佳准确率。目标函数公式如下:





Fitness 

=

n

N

×

100

%

\text { Fitness }=\frac{n}{N} \times 100 \%







Fitness





=



















N














n






















×








100%







式中,



n

n






n





为识别准确的样本统计个数,



N

N






N





为识别的样本总数。适应度越大,说明优化模型的识别准确率越高。



2.2 算法流程

在这里插入图片描述



3. GOA-SVM数据分类模型的参数设置

GOA算法的参数设置:

% GOA的参数选项初始化
goa_option.maxgen = 100;                     %最大迭代次数
goa_option.sizepop = 20;                %种群大小
goa_option.cbound = [1e-5,1000];         %惩罚参数C的优化范围
goa_option.gbound = [1e-5,1000];        %核参数g的优化范围
goa_option.v = 5;                %交叉验证折数

%系数c的变化范围
cMax=1;
cMin=0.00004;
f=0.5;L=1.5;   %相互作用力公式的系数常量

GOA优化后的参数赋给SVM:

%% 利用最佳的参数进行SVM网络训练
cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg)];
model = libsvmtrain(train_output_labels,train_input,cmd);



4. 运行结果


4.1 蝗虫优化算法的适应度曲线和优化后的c、g参数值,交叉验证CV准确率

在这里插入图片描述


4.2 蝗虫优化算法优化后的实际类型与识别类型对比图像

在这里插入图片描述

从适应度曲线来看,蝗虫优化算法的收敛速度很快,但后期发生聚群行为(可能陷入局部最优)。SVM对红酒数据集的分类准确率一般为97%上下,故起到了优化的效果。

参考文献: [1]Shahrzad, Saremi, Seyedali, et al. Grasshopper Optimisation Algorithm: Theory and application[J]. Advances in Engineering Software, 2017.



5. MATLAB代码与数据下载地址


见CSDN主页资源/

CSDN下载链接



https://download.csdn.net/download/qq_57971471/87729962



版权声明:本文为qq_57971471原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。