K均值聚类算法(matlab)

原文地址:K均值聚类算法(matlab)
作者:TimChen525
由于公式不能复制所以原文见
http://wenku.baidu.com/view/1c5f16da240c844769eaee41.html?st=1

K-均值聚类算法

1.初始化:选择c个代表点

2.建立c个空间聚类表:

3.按照最小距离法则逐个对样本X进行分类:

4.计算J及用各聚类列表计算聚类均值,并用来作为各聚类新的代表点(更新代表点)

5.J不变或代表点未发生变化,则停止。否则转2.

6.

 

具体代码如下:

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均值聚类算法(matlab)》

       

    原文作者:聚类算法
    原文地址: https://blog.csdn.net/zziahgf/article/details/21023885
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞