K-均值聚类算法(原理加程序代码)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

K-均值聚类算法

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

2.建立c 个空间聚类表:C K K K ...,21

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

),(),,(m in arg J i i

K x add p x j ∂=

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

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

6.),(1∑∑=∈=c

i K x i

i p x J δ

具体代码如下:

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

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

plot ([Z1(1),Z2(1)],[Z1(2),Z2(2)],'g+')

相关文档
最新文档