二维k-means

clear all
clc
x=[0 1 0 1 2 1 2 3 6 7 8 6 7 8 9 7 8 9 8 9;0 0 1 1 1 2 2 2 6 6 6 7 7 7 7 8 8 8 9 9];
figure(1)
plot(x(1,:),x(2,:),'r*')
%%第一步选取聚类中心,即令K=2
Z1=[x(1,1);x(2,1)];
Z2=[x(1,2);x(2,2)];
R1=[];
R2=[];
t=1;
K=1;%记录迭代的次数
dif1=inf;
dif2=inf;
%%第二步计算各点与聚类中心的距离
while(dif1>eps&dif2>eps)
for i=1:20
       dist1=sqrt((x(1,i)-Z1(1)).^2+(x(2,i)-Z1(2)).^2);
       dist2=sqrt((x(1,i)-Z2(1)).^2+(x(2,i)-Z2(2)).^2);
       temp=[x(1,i),x(2,i)]';
       if dist1<dist2
               R1=[R1,temp];
       else
               R2=[R2,temp];
       end
end
Z11=mean(R1,2);
Z22=mean(R2,2);
t1=Z1-Z11;%%测试两次是不是相等,可以有多种方法这里只简单的列举一种
t2=Z2-Z22;
dif1=sqrt(dot(t1,t1));
dif2=sqrt(dot(t2,t2));
Z1=Z11;
Z2=Z22;
K=K+1;
R1=[];
R2=[];
end
hold on

plot ([Z1(1),Z2(1)],[Z1(2),Z2(2)],'g+')

二维k-means_第1张图片






你可能感兴趣的:(二维k-means)