K-means聚类

    K-means聚类属于一种动态聚类方法。下面我直接给出算法框架和实验例程。

    先给出实验用的数据集,有二维数据和三维数据,其他维的数据依次类推。

    二维数据DATA2=[0 0;0 1;1 0;1 1;2 1;1 2;2 2;3 2;6 6;6 7;7 6;7 7;7 8;8 6;8 7;8 8;8 9;9 7;9 8;9 9],DATA3=[0 0 0;0 1 1;1 0 1;1 1 2;2 1 1;1 2 3;2 2 4;3 2 1;6 6 7;6 7 2;7 6 6;7 7 8;7 8 9;8 6 7;8 7 6;8 8 8;8 9 5;9 7 7;9 8 9;9 9 5];画出其二维和三维视图如下


     下面给出算法框架

下面是程序和实验结果



<span style="font-family:Times New Roman;">% K-means Algorithm
data=[0 0;0 1;1 0;1 1;2 1;1 2;2 2;3 2;6 6;6 7;7 6;7 7;7 8;8 6;8 7;8 8;8 9;9 7;9 8;9 9];
[m n]=size(data);
k=2;
plotstyle = {'b.', 'r+', 'g', 'k', 'b--', 'r--'};
z=zeros(k,n);
d=zeros(k,m);
z(1:k,:)=data(1:k,:);
for j=1:99
    for i=1:k
        a=repmat(z(i,:),m,1);
        d(i,:)=sum(((a-data).^2)');
    end
    temp=sum(sum(z));
    [nn kk]=min(d,[],1);
    for i=1:k
        S=data(find(kk==i),:);
        z(i,:)=mean(S);
    end
    temp1=sum(sum(z));
    if temp==temp1
        break;
    end
end
for i=1:k
    a=repmat(z(i,:),m,1);
    d(i,:)=sum(((a-data).^2)');
end
[nn kk]=min(d,[],1);
for i=1:k
    S=data(find(kk==i),:);
    [ii jj]=size(S);
    a=repmat(z(i,:),ii,1);
    d=sum(((a-S).^2)');
    [p q]=max(d);
    R=p;
    scatter(S(:,1),S(:,2),char(plotstyle(i)));
    hold on
    alpha=0:pi/50:2*pi;%角度[0,2*pi]
    x=(2*R/3)*cos(alpha)+z(i,1);
    y=(2*R/3)*sin(alpha)+z(i,2);
    plot(x,y,'-');
    hold on
    axis equal
end</span>

下面是用K-means算法得到的聚类效果


k=3,n=2


k=6,n=2


k=3,n=3


k=6,n=3





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值