1 简介
在机器学习领域,要处理的数据的规模越来越大,而学习算法在数据的特征过多的时候,往往会产生性能上的下降。作为解决这个问题的有效手段,特征选择一直以来都得到了广泛的关注。粒子群优化算法作为一种优化方法,具有较好的局部搜索能力,所以利用粒子群优化方法来解决特征选择问题成为一个研究热点。
粒子群优化的特征选择方法通过引导粒子的搜索进行特征选择,从而提高粒子群优化算法在特征选择问题中的搜索效率。本实验针对“BreastCancer”数据集,通过粒子群优化算法进行特征选择,并对特征选择后的数据进行SVM分类。将直接SVM分类的结果,和使用粒子群算法进行特征选择后再进行SVM分类的结果进行对比。对比两者的实验结果,结果表明使用粒子群优化算法进行特征选择能够提高SVM的分类精度。综上所述,所得的实验结果与预期结果一致。
2 部分代码
%_________________________%
% 粒子群优化算法 %
%_________________________%
function [ zbest ,yy,fitnesszbest]=pso(sizepop,Max_iter,popmin,popmax,dim,fobj,Vmax,Vmin,c1,c2)
X0=initialization(sizepop,dim,popmax,popmin);%种群初始化
V=rand(sizepop,dim);%初始化速度
%% 产生初始粒子和速度
pop= X0;
%计算初始适应度值
fitness = zeros(1,sizepop);
for i = 1:sizepop
fitness(i) = fobj(pop(i,:));%计算适应度值
end
%% 个体极值和群体极值
[bestfitness bestindex]=min(fitness);
zbest=pop(bestindex,:); %全局最佳
gbest=pop; %个体最佳
fitnessgbest=fitness; %个体最佳适应度值
fitnesszbest=bestfitness; %全局最佳适应度值
%% 迭代寻优
for i=1:Max_iter
for j=1:sizepop
%速度更新
V(j,:) = V(j,:) + c1rand(gbest(j,:) - pop(j,:)) + c2rand(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)=fobj(pop(j,:));
end
for j=1:sizepop
%个体最优更新
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
3 仿真结果
4 参考文献
[1]郑含博等. "基于多分类最小二乘支持向量机和改进粒子群优化算法的电力变压器故障诊断方法." 高电压技术 40.11(2014):6.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。