K-均值聚类算法(原理加程序代码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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+')