数据挖掘十大算法翻译——2K-means

来源:互联网 发布:网络签约作家 编辑:程序博客网 时间:2024/05/20 08:42

1 算法

K-means算法是一个能够将给定的数据集分为用户定义的数量k个类的简单的迭代算法。很多研究者从不同的研究方向都发现了这个算法,其中特别显著的由Lloyed,Forgey,Friedman和Rubin,和McQueen。k-means的详细历史要追溯到下面的几个改变。Gray和Neuboff将k-means置于爬山算法的环境中为其提供了一个良好的历史背景。
这个算法作用在d维的向量上,D={x_i|i=1,…,N},x_i是d维实数向量。通过选择R^d中的k个点作为k集群的代表或者叫做“质心”来初始化该算法。选取这些初始种子的方法包括了随机抽取样本点把他们作为一个小的数据子集的聚类或者k次扰乱全局平均。这个算法以下面两部的方式迭代:

  • 1 数据分派。每个数据点被分配给它最近的质心,结反复的破坏。结果在数据的分区内。
  • 2 重定位“means(平均)”。每个簇带包被重新定位到它包含的数据集合的中心(平均)。(如果数据点包含了概率测度(权重),那么把这个点重新定义到他们的加权平均)

当代表聚类的点不在变动的时候,这个算法结束。表1描述了算法执行的可视化过程。注意每次迭代都需要N*k次比较,这决定了一次迭代的时间复杂度。需要迭代的次数取是不确定的,有可能取决于N,但是这个算法可以视为和数据集的大小程线性关系。

一个要解决的问题就是如何为分派点的时候的“最近”定义。默认的方式是使用欧几里得距离,如下面的非负损失函数所示
    这里写图片描述
在每次的重新指派之后,这个值都会变小,因此保证了有限的迭代。k-means在非凸算是的greedy-descent的特性也表名了它在局部最优的时候会结束。这个算法对于初始的质点的选取其实有很大的影响。表2展示了,对于表1中相同数据的选取有什么影响。局部最小问题可以使用相同的数据进行多次运行,这样才能够保证的得到较好的结果。
表1+号代表质心,图表显示了质心的变化和数据的指派
表1+号代表质心,图表显示了质心的变化和数据的指派

表2 初始点的影响

2 局限

除了对初始的情况比较敏感之外,k-means算法还有其他的问题。首先,由于k-means是一个通过k个一致的,各向相同的协方差矩阵的高斯的混合的拟合数据的限制的情况,当把数据点的软分配到混合的成分上的时候,他们会变硬从而把每个点单独分配他他们最有可能的部分。所以,但数据没有很好的被独立的球面所包裹的时候,会出现模棱两可的状态,例如,如果集合中有非凸形状的簇。通过在聚类之前“漂白”可以缓解这个问题,除此之外也可以使用不同的计算数据点之间的距离的方法。例如,信息理论聚类使用了KL-离散量来测量两个点之间的距离。最近的研究表明如果通过在分配的步骤并选择一个称为布雷格曼分歧的非常大的离散的类的任何成分的测量距离且不产生其他改变,k-means的精华属性,包括了收敛性,线性边界分离和可扩展性是被保留的。这个结果使得k-means对于拥有更多数据集合的类更加有效,只要他们被适当的分散。

k-means可以和别的描述非凸聚合的算法想匹配。首先使用k-means(把k取的很大)把数据集进行聚类。然后使用能够检测复杂形状的单层次连接聚类把这些组聚合在一起。这样的过程使得解决对于初始点的敏感程度更低,并且不需要预选一个特定的k值了。

最佳的解决的损耗以k增长,知道它达到零,当类的数量和不同的点的数量相同时。这使得直接比较有不同数量的聚类的解决方案和找到最佳的k值是困难的。如果需要的k事先是不知道的,一个人会代表性的用不同的k值来运行k-means,然后使用一个合适的范围来选取其中的一个结果。例如,SAS使用了立方聚类范围(cube-clustering-criterion),然而X-means增加了原始损耗函数的复杂性然后把k定义为能够最小化损耗的值。还有一种做法,一个人能够渐渐的增加聚类k的数目,在一个合适的停止区域内。平分k-means实现了这个想法。首先把所有类放到同一个聚类中,然后不断的使用2-means把最小公倍数的类进行分类。有名的LBG算法使用矢量量化让簇的数量翻倍直到得到一个合适的大小。所有的这些方法都减轻了对于预先知道k值得需求。
这个算法对于利群点也十分敏感,因为mean不是一个鲁棒的统计标准。在预处理中去除利群点会很有用。结果的后处理,例如去除小的聚类,或者把一些聚类合并为一个大的类也是不错的。Ball和Hall的1967年的ISODARA算法在k-means的预处理和后处理都是有效的。

3 泛化和连接

正如之前所提到的,k-means与将k个混合的个同向性高斯与数据的拟合有关。此外,对于多有布雷格曼分歧的距离测量的泛化与将数据和k个来源于指数族的分布的部分的混合的拟合有关。一个广泛的泛化是查看“means”的概率模型而不是R^d中的点。因此,在分配的步骤中,每个数据点被分配给最有可能产生它的模型。在重定位的步骤,模型的参数被更新来最好的适应分配的数据集。

一些基于模型的k-means允许使用者使用一些复杂的数据。例如在Hidden Markov 模型中描述的序列。

使用者可以核化k-means。尽管聚类之间的边界在高维空间是线性的,当他们投影到原来的空间的时候他们就是非线性的。这样运行核k-means来处理复杂的聚类。Dhillon et al.已经展示了核k-means和谱聚类之间密切的关系。K-medoid算法十分类似于k-means算法,除了它的质心必须是数据集中的一个点。模糊c-means也是一个类似的例子,除了它俄日每个类计算模糊的成员关系损失函数而不是一个。
尽管有这些缺点,k-means事实上是最广泛使用了分隔式聚类算法。它的算法简单,容易理解,容易扩展,并且能够容易的定制以适应其他数据流。对于非常大的数据集合,大量、关于提高k-means速度工作已经展开了,最著名的是使用kd-trees或者利用三角不等式来避免把每个点和质心比较。基础算法持续的提升和正则化保证了它迟勋的关联和逐渐的效能的增长。

0 0
原创粉丝点击