📄 breastcancerqpso3.m
字号:
function [F_gbest,inter_distance,intra_distance]=breastcancerqpso3(MAXITER)
load breastcancer.mat datavectorcancer;%%%载入数据集
[vectorsize,vectorlength]=size(datavectorcancer);
popsize=30; %群体的粒子数%
centroid=2;%聚类的个数
dimension=9; %数据向量维数%
% MAXITER=100;
e=2;
%%%%%%初始化的过程%%%%%%%%
f_xx=zeros(1,popsize);
f_pbest=f_xx;
f_gbest=0;
gbest=zeros(2,9);
SD=zeros(1,2);
f=zeros(1,2);
D=zeros(1,2);
for i=1:popsize
[c1,c2]=Initializecancer(datavectorcancer);
partical(i).centroid=[c1;c2];
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,datavectorcancer,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(2,9);
mbest=zeros(2,9);
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(datavectorcancer(:,j));
if partical(i).centroid(w,j)<MIN
partical(i).centroid(w,j)=MIN;
end
MAX=max(datavectorcancer(:,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,datavectorcancer, 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_distance=pdist(gbest);
dist = distfcm(gbest,datavectorcancer); % 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);
cluster_num1=length(num1);
cluster_num2=length(num2);
for i1=1:cluster_num1
datavectorcancer1=datavectorcancer(num1(i1));
end
for i2=1:cluster_num2
datavectorcancer2=datavectorcancer(num2(i2));
end
X1=datavectorcancer1-ones(cluster_num1,1)*gbest(1,:);
Y1_1=sqrt(sum((X1.^2)'));
Y1(times)=sum(Y1_1);
X2=datavectorcancer2-ones(cluster_num2,1)*gbest(2,:);
Y2_2=sqrt(sum((X2.^2)'));
Y2(times)=sum(Y2_2);
intra_distance(times)=(Y1(times)+Y2(times))/2;
times=times+1;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -