聚类-K-means算法详细总结

目录

1、聚类

2、k-means算法过程

2、k-means算法优缺点分析 

 优点

 缺点

3、k-means算法改进方法: K-Means ++ 算法


1、聚类

        所谓聚类问题,就是给定一个元素集合D,其中每个元素具有n个可观察属性,使用某种算法将D划分成k个子集,要求每个子集内部的元素之间相异度尽可能低,而不同子集的元素相异度尽可能高。其中每个子集叫做一个簇。与分类不同,分类是有监督学习,要求分类前明确各个类别,并断言每个元素映射到一个类别,而聚类是标记学习,在聚类前可以不知道类别甚至不给定类别数量,是无监督学习的一种。目前聚类广泛应用于统计学、生物学、数据库技术和市场营销等领域,相应的算法也非常的多。本文仅介绍一种最简单的聚类算法——k均值(k-means)算法。

2、k-means算法过程

        k-means算法中的k代表类簇个数,means代表类簇内数据对象的均值(这种均值是一种对类簇中心的描述),因此,k-means算法又称为k-均值算法。k-means算法是一种基于划分的聚类算法,以距离作为数据对象间相似性度量的标准,即数据对象间的距离越小,则它们的相似性越高,则它们越有可能在同一个类簇。数据对象间距离的计算有很多种,k-means算法通常采用欧氏距离来计算数据对象间的距离。

                                                                                dist(x_{i},x_{j})=\sqrt{\sum_{d=1}^{D} (x_{i,d} -x_{j,d})} 

其中,DD表示数据对象的属性个数。

        k-means算法聚类过程中,每次迭代,对应的类簇中心需要重新计算(更新):对应类簇中所有数据对象的均值,即为更新后该类簇的类簇中心。定义第kk个类簇的类簇中心为CenterkCenterk,则类簇中心更新方式如下: 

                                                                              Center_{k}=\frac{1}{\left | C_{k} \right |}\sum_{x_{i}\in C_{K}}dist(x_{i},Center_{k})

其中,K表示类簇个数。当两次迭代J的差值小于某一阈值时,即ΔJ<δ时,则终止迭代,此时所得类簇即为最终聚类结果。 
  k-means算法思想可描述为:首先初始化K个类簇中心;然后计算各个数据对象到聚类中心的距离,把数据对象划分至距离其最近的聚类中心所在类簇中;接着根据所得类簇,更新类簇中心;然后继续计算各个数据对象到聚类中心的距离,把数据对象划分至距离其最近的聚类中心所在类簇中;接着根据所得类簇,继续更新类簇中心;……一直迭代,直到达到最大迭代次数TT,或者两次迭代JJ的差值小于某一阈值时,迭代终止,得到最终聚类结果。算法详细流程描述如下:

             

k-means算法聚类过程示意图,如下:

                 

其中,黑色圆点代表类簇中心,白色圆点代表待聚类数据对象。

2、k-means算法优缺点分析 

 优点

   算法简单易实现; 

 缺点

  需要用户事先指定类簇个数K; 
  聚类结果对初始类簇中心的选取较为敏感; 
  容易陷入局部最优; 
  只能发现球型类簇;

3、k-means算法改进方法: K-Means ++ 算法

K-Means主要有两个最重大的缺陷——都和初始值有关:

●  K 是事先给定的,这个 K 值的选定是非常难以估计的。很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适。( ISODATA 算法通过类的自动合并和分裂,得到较为合理的类型数目 K)

● K-Means算法需要用初始随机种子点来搞,这个随机种子点太重要,不同的随机种子点会有得到完全不同的结果。(K-Means++算法可以用来解决这个问题,其可以有效地选择初始点)

我在这里重点说一下 K-Means++算法步骤:

1.先从我们的数据库随机挑个随机点当“种子点”。

2.对于每个点,我们都计算其和最近的一个“种子点”的距离D(x)并保存在一个数组里,然后把这些距离加起来得到Sum(D(x))。

3.然后,再取一个随机值,用权重的方式来取计算下一个“种子点”。这个算法的实现是,先取一个能落在Sum(D(x))中的随机值Random,然后用Random -= D(x),直到其<=0,此时的点就是下一个“种子点”。

4.重复第(2)和第(3)步直到所有的K个种子点都被选出来。

5.进行K-Means算法。

 

不解之处可以参考文献

K-means算法研究综述

猜你喜欢

转载自blog.csdn.net/qq_17073497/article/details/81070302