支持向量机(support vector machine,SVM)是针对有限样本情况的机器学习方法,它的提出根据统计学习理论的VC理论和结构风险最小化原则。支持向量机已经成为智能技术领域研究的热点。它有着泛化能力强,识别率高,算法灵活等诸多优点,但是支持向量机对内部参数有着极高的依赖性,核参数的选取和惩罚因子的设定这两个因素直接影响着分类的准确率,并且针对不同物种的数据集,需要设定不同的参数来适应数据集。因此参数的选择直接决定分类的准确率。
为了提高识别的准确度,本研究提出了粒子群优化算法和支持向量机相结合的支持向量机粒子群优化算法,建立最优的鱼类识别模型。粒子群优化算法最早是由Eberhart和Kennedy提出的,该算法源自对鸟类捕食问题的研究。
粒子群优化支持向量机的步骤如下。
%% 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);
1 matlab版本
2014a
2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]丁顺荣,肖珂.基于粒子群优化SVM和多特征融合的鱼类分类方法研究[J].中国农机化学报. 2020,41(11)