💥💥💞💞欢迎来到本博客❤️❤️💥💥


🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。



⛳️座右铭:行百里者,半于九十。

目录

​​💥1 概述​​

​​📚2 运行结果​​

​​🎉3 参考文献​​

​​🌈4 Matlab代码实现​​


💥1 概述

本文程序用于特征选择的二元粒子群优化(BPSO),可以选择潜在特征以提高分类精度。并讲解如何使用具有分类错误率(由 KNN 计算)的 BPSO 作为使用基准数据集的特征选择问题的适应度函数。

📚2 运行结果

【改进粒子群】基于特征选择的二元粒子群优化算法(Matlab代码实现)_算法

部分代码:

function [sFeat,Sf,Nf,curve] = jBPSO(feat,label,N,max_Iter,c1,c2,HO)
Wmax = 0.9;
Wmin = 0.4;
Vmax = 6;fun = @jFitnessFunction;
dim = size(feat,2);
X = zeros(N,dim);
V = zeros(N,dim);
for i = 1:N
for d = 1:dim
if rand() > 0.5
X(i,d) = 1;
end
end
end
fit = zeros(1,N);
fitG = inf;
for i = 1:N
fit(i) = fun(feat,label,X(i,:),HO);
if fit(i) < fitG
Xgb = X(i,:);
fitG = fit(i);
end
end
Xpb = X;
fitP = fit; curve = inf;
t = 1;
%---Iterations start-------------------------------------------------
while t <= max_Iter
w = Wmax - (Wmax - Wmin) * (t / max_Iter);
for i = 1:N
for d = 1:dim
r1 = rand();
r2 = rand();
VB = V(i,d) * w + c1 * r1 * (Xpb(i,d) - X(i,d)) + ...
c2 * r2 * (Xgb(d) - X(i,d));
VB(VB > Vmax) = Vmax; VB(VB < -Vmax) = -Vmax;
V(i,d) = VB;
TF = 1 / (1 + exp(-V(i,d)));
if TF > rand()
X(i,d) = 1;
else
X(i,d) = 0;
end
end
fit(i) = fun(feat,label,X(i,:),HO);
if fit(i) < fitP(i)
Xpb(i,:) = X(i,:);
fitP(i) = fit(i);
end
if fitP(i) < fitG
Xgb = Xpb(i,:);
fitG = fitP(i);
end
end
curve(t) = fitG;
fprintf('\nIteration %d Best (BSPO)= %f',t,curve(t))
t = t + 1;
end
Pos = 1:dim;
Sf = Pos(Xgb == 1);
Nf = length(Sf);
sFeat = feat(:,Sf);
end

🎉3 参考文献

[1]Too, Jingwei, et al. “A New Co-Evolution Binary Particle Swarm Optimization with Multiple Inertia Weight Strategy for Feature Selection.” Informatics, vol. 6, no. 2, MDPI AG, May 2019, p. 21, doi:10.3390/informatics6020021.

[2]Too, Jingwei, et al. “EMG Feature Selection and Classification Using a Pbest-Guide Binary Particle Swarm Optimization.” Computation, vol. 7, no. 1, MDPI AG, Feb. 2019, p. 12, doi:10.3390/computation7010012.

​🌈​​4 Matlab代码实现