K均值聚类算法(matlab)

来源:互联网 发布:数据分析的定义 编辑:程序博客网 时间:2024/06/06 06:34
原文地址:K均值聚类算法(matlab)作者:TimChen525
由于公式不能复制所以原文见:http://wenku.baidu.com/view/1c5f16da240c844769eaee41.html?st=1

K-均值聚类算法

1.初始化:选择c个代表点[转载]K均值聚类算法(matlab)

2.建立c个空间聚类表:[转载]K均值聚类算法(matlab)

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

[转载]K均值聚类算法(matlab)

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

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

6.[转载]K均值聚类算法(matlab)

 

具体代码如下:

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 77 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)]';
    ifdist1<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)



       

0 0