Matlab——K均值聚类的实现

Matlab实现K均值聚类

%根据c均值法进行聚类分析
%C 均值法原理
%该方法取定 C 个类别和选取 C 个初始聚类中心,按最小距离原则将各模式分配到 C类中的某一类,
%然后不断地计算类心和调整各模式的类别,最终使各模式到其判属类别中心的距离平方之和最小。
clear;clc;
a=[1,0,0
   2,1,0
   3,0,1
   4,1,1
   5,2,1
   6,1,2
   7,2,2
   8,3,2
   9,6,6
   10,7,6
   11,8,6
   12,6,7
   13,7,7
   14,8,7
   15,9,7
   16,7,8
   17,8,8
   18,9,8
   19,8,9
   20,9,9];
s=0.000001;
[m,n]=size(a);
center1=a(1,2:3);         % 初始的第一类及第 2 类类中心
center2=a(2,2:3);
x=0;
while 1
      set1=[]; set2=[];   %12 类的集合
      
      %%2 步:计算所有点到两个类中心的距离,并把此点放入距离最近的那一类
for i=1:m
    d1=(a(i,2)-center1(1))^2+(a(i,3)-center1(2))^2;
    d2=(a(i,2)-center2(1))^2+(a(i,3)-center2(2))^2;
    if d1<d2
        set1=[set1;a(i,:)];
    else
        set2=[set2;a(i,:)];
    end
end    
center3=mean(set1(:,2:3));       %根据新分成的两类建立新的聚类中心
center4=mean(set2(:,2:3));
D1=sqrt((center1(1)-center3(1))^2+(center1(2)-center3(2))^2);%新建成聚类中心和原来聚类中心距离
D2=sqrt((center2(1)-center4(1))^2+(center2(2)-center4(2))^2);
if (D1<s)&&(D2<s)   %判断新聚类中心和原来聚类中心是否相等
   break
end
    center1=center3; %更新类中心
    center2=center4;   
    x=x+1;    %判断循环次数
end
fprintf('循环次数为 %d\n',x);
plot(set1(:,2),set1(:,3),'*','Color','red');%画出图像
hold on;
plot(set2(:,2),set2(:,3),'*','Color','blue');
pos=axis;                     %pos=[xmin,xmax,ymin,ymax]
xlabel('x1','Position',[1.03*pos(2) 0.4+pos(3)]), ylabel('x2');
ylabel('x2','Position',[0.2+pos(1) 0.4+pos(4)]), ylabel('x2');

小白练手,敬请斧正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值