K-Means聚类MATLAB实现

话不多说,直接上代码;

%k-means
n = 3000;
c = 6;
t = randperm(n);
x = [randn(1,n/3)-2 randn(1,n/3) randn(1,n/3)+2;
    randn(1,n/3) randn(1,n/3)+4 randn(1,n/3)]';
m = x(t(1:c),:);
x2 = sum(x.^2,2);
s0(1:c,1) = inf;

for i = 1:6000
    m2 = sum(m.^2,2);
    [d,y] = min(repmat(m2,1,n)+repmat(x2',c,1)-2*m*x');
    for j = 1:c
        m(j,:) = mean(x(y==j,:));
        s(j,1) = mean(d(y==j));
    end
    if norm(s-s0)<0.001, break, end
    s0 = s;
end
figure(1);
clf;
hold on;
plot(x(:,1),x(:,2),'ko');
figure(2);
clf;
hold on;
plot(x(y==1,1),x(y==1,2),'ro');
plot(x(y==2,1),x(y==2,2),'g-');
plot(x(y==3,1),x(y==3,2),'b*');
plot(x(y==4,1),x(y==4,2),'m+');
plot(x(y==5,1),x(y==5,2),'y^');
plot(x(y==6,1),x(y==6,2),'cx');
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值