K-means算法的实现与应用举例

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

K-means 算法的实现与应用举例

1 K-means 方法

K-means 算法如下:

S1:初始化,聚类中心k c ,,c c 21,标号集Φ====k I I I 21; S2: 分类:

()(){}end

;i I I ;

c x c x j n

i for j j T

j i j i k

j **1*min arg :1=--==≤≤

S3:重新计算聚类中心:

end

;x I c k

j for

j

I i i j j ∑∈==1:1

S4:迭代S2-S3,直至收敛。 其matlab 程序见附录1。

2实验

实验1 随机生成300个[]44,-之间的二维数对,用K-means 算法将其分为两类(其matlab 程序见附录2),如fig1,由图1(b)可看出,离群点对聚类中心的位置有明显的影响。

实验2 随机生成600个二维数对,其中300个落于以(0,0)为圆心的单位圆,另外300

-4

-3-2-1

01234

-4-3-2-10

1

234

Cluster 1

Cluster 2Centroids

-4

-3-2-10

1234

-4-3

-2

-1

1

2

3

Cluster 1Cluster 2Centroids

(a)

(b)

fig1 实验1

个落入(2,2)为圆心的单位圆,用K-means 算法将其分为两类(其matlab 程序见附录2),如fig2(a),而fig2(b)则为在以上实验的基础上增加了30个干扰点之后的分类图,可见K-means 算法不能对其很好的分类,离群点对聚类中心的位置有明显的影响。

实验3 随机生成600个二维数对,其中300个落于以(0,0)为圆心的单位元,另外300个落入以(0,0)为圆心的单位圆,长半径为3短半径为2的圆盘,用K-means 算法将其分为2类(其matlab 程序见附录2),结果见fig3,可见K-means 算法同样不能对其很好的分类。

-3

-2-10123

-3-2

-1

1

2

3

Cluster 1

Cluster 2Centroids

3 K-means 算法修正

修正一:实验2中增加离群点后,K-means 算法失效,是因为采用2范数计算距离,使计算出的重心与实际重心存在较大的误差。为减小误差,可以采用1-范数计算距离,或是采用中值代替均值计算新的聚类中心,即

()

k ,j ,

I i x medium c j i j 1=∈=

-1

-0.50

0.51 1.52

-1-0.5

0.5

1

1.5

2

Cluster 1

Cluster 2Centroids

-1

012

3456

-10

1

2

3

4

5

6

Cluster 1Cluster 2Centroids

(a)

(b)

fig2 实验2

fig3 实验3

通过实验可以知道,采用1-范数计算距离实验效果并没有很好的改进,而采用中值计算聚类中心取得较好的效果(matlab 程序见附录3),采用同实验2增加干扰后相同的实验数据用修正后的K-means 算法进行分类,得到实验结果如fig4(a),而实验3中结果产生的原因则是由于没有考虑数据点自身的结构特征与其他数据点之间关系引起,并且K-means 算法只考虑类内间距最小性并没有考虑类间间距的最大性,即只考虑了类内数据的相似性的最大性并没有考虑类间数据的差异性的最大性,所以单纯的改变聚类中心的选取方法,而没有对相关性(距离)进行本质的重新的定义,并不能对实验3的实验结果很好的改进,如fig4(b):

4附录

附录1

function [idx,C,D,sumD]=kmeans_mean(X,k) %kmeans2norm K-means clustering. % X:n*p 的数据矩阵 % k:将X 划分为几类

% startM:k*p 的矩阵,初始类中心

% idx:n*1的向量,存储每个点的聚类编号 % C:k*p 的矩阵,存储k 个聚类的中心位置

% sumD:1*k 的和向量,类间所有点与该类中心的距离之和 % D:n*k 的矩阵,每一点与所有中心的距离

%sumK:1*k 的和向量,记录第k 个类中点的个数 [n,p] = size(X); idx=zeros(n,1); C=zeros(k,p); startM=zeros(k,p); D=zeros(n,k);

-1

012

3456

-10

1

2

3

4

5

6

Cluster 1

Cluster 2Centroids

-3

-2-1

0123

-3-2

-1

1

2

3

Cluster 1Cluster 2Centroids

fig4 中值修正

(a)

(b)

(b)

(a)

相关文档
最新文档