📄 breastcancerqpso3.asv
字号:
function [F_gbest,inter_distance,intra_distance]=breastcancerqpso3(MAXITER)
load breastcancer.mat datavectorcancer;%%%载入数据集
[vectorsize,vectorlength]=size(datavector);
popsize=30; %群体的粒子数%
centroid=2;%聚类的个数
dimension=9; %数据向量维数%
% MAXITER=100;
e=2;
%%%%%%初始化的过程%%%%%%%%
f_xx=zeros(1,popsize);
f_pbest=f_xx;
f_gbest=0;
gbest=zeros(3,4);
SD=zeros(1,3);
f=zeros(1,3);
D=zeros(1,3);
for i=1:popsize
[c1,c2,c3]=Initialize(datavector);
partical(i).centroid=[c1;c2;c3];
end
for i=1:popsize
partical(i).pbest=partical(i).centroid;
partical(i).p=partical(i).centroid;
end
for i=1:popsize %粒子的个数
[Je(i)]=f4(partical(i).centroid,centroid,datavector,e);
f_xx(i)=Je(i);%f_xx(i)代表粒子i当前的适应性值
f_pbest(i)=f_xx(i);%f_pbest(i)代表粒子i最佳适应性值
end
%初始化f_gbest
f_gbest=f_pbest(1);
for i=1:popsize
if f_gbest>f_pbest(i)
f_gbest=f_pbest(i);
end
end
%%%%%%%%所有初始化过程结束%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
times=1;
while times<=MAXITER
z=(1.0-0.5)*(MAXITER-times)/MAXITER+0.5;
mbest1=zeros(3,4);
mbest=zeros(3,4);
for i=1:centroid
for j=1:popsize
mbest1(i,:)=mbest1(i,:)+partical(j).pbest(i,:);
end
end
mbest=mbest1/popsize;
for i=1:popsize
for w=1:centroid
for j=1:dimension
fi=rand(1,1);
partical(i).p(w,j)=fi*partical(i).pbest(w,j)+(1-fi)*gbest(w,j);
b=z*abs(mbest(w,j)-partical(i).centroid(w,j));
u=rand(1,1);
v=log(1/u);
if (rand(1,1)>0.5)
partical(i).centroid(w,j)=partical(i).p(w,j)-(b*v);
else
partical(i).centroid(w,j)=partical(i).p(w,j)+(b*v);
end
MIN=min(datavector(:,j));
if partical(i).centroid(w,j)<MIN
partical(i).centroid(w,j)=MIN;
end
MAX=max(datavector(:,j));
if partical(i).centroid(w,j)>MAX
partical(i).centroid(w,j)=MAX;
end
end
end
[center1,f_x(i)] = fcm1(partical(i).centroid,datavector, centroid);
if f_pbest(i)>f_x(i)
f_pbest(i)=f_x(i);%f_pbest(i)代表粒子i最佳适应性值
end
partical(i).pbest=center1;%partical(i).pbest代表粒子i最佳位置
if f_gbest>f_pbest(i)
f_gbest=f_pbest(i);%f_gbest记录全局最佳适应性值
gbest=partical(i).pbest;%gbest记录全局最佳位置
end
end
partical(i).centroid=center1;
F_gbest(times)=f_gbest;
inter_distance1=pdist(gbest);
inter_distance(times)=sum(inter_distance1)/3;
dist = distfcm(gbest,datavector); % fill the distance matrix
tmp = dist.^(-2/(e-1)); % calculate new U, suppose expo != 1
U= tmp./(ones(centroid, 1)*sum(tmp));
maxU = max(U);
% Find the data points with highest grade of membership in cluster 1
num1= find(U(1,:) == maxU);
% Find the data points with highest grade of membership in cluster 2
num2 = find(U(2,:) == maxU);
num3 = find(U(3,:) == maxU);
cluster_num1=length(num1);
cluster_num2=length(num2);
cluster_num3=length(num3);
for i1=1:cluster_num1
datavector1=datavector(num1(i1));
end
for i2=1:cluster_num2
datavector2=datavector(num2(i2));
end
for i3=1:cluster_num3
datavector3=datavector(num3(i3));
end
X1=datavector1-ones(cluster_num1,1)*gbest(1,:);
Y1_1=sqrt(sum((X1.^2)'));
Y1(times)=sum(Y1_1);
Y1=X1.^2;
X2=datavector2-ones(cluster_num2,1)*gbest(2,:);
Y2_2=sqrt(sum((X2.^2)'));
Y2(times)=sum(Y2_2);
X3=datavector3-ones(cluster_num3,1)*gbest(3,:);
Y3_3=sqrt(sum((X3.^2)'));
Y3(times)=sum(Y3_3);
intra_distance(times)=(Y1(times)+Y2(times)+Y3(times))/3;
times=times+1;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -