随着聚类分析的发展,出现了大量的聚类算法。算法的选择取决于数据的类型、聚类的目的和应用。大体上,主要的聚类算法可以划分为如下几类:划分方法、层次方法、基于密度的方法、基于网格的方法和基于模型的方法等[2]。
1. 划分方法(partitionmethod)
给定一个有N个元组或者记录的数据集,划分方法将构造K个分组,每一个分组就代表一个聚类,K<N。而且这K分组满足下列条件:
1)每一个分组至少包含一个数据记录;
2)每一个数据记录隶属于且仅属于一个分组;
对于给定的K,算法首先给出一个初始的分组方法,以后通过反复迭代的方法改变分组,使得每一次改进之后分组方案都较前一次好,所谓的“好”的标准就是同一分组的记录越相似越好,而不同分组中的记录则越相异越好。最著名与最常用的划分方法是k-Means方法[35]和k-中心点方法。
2. 基于层次的方法(hierarchicalmethod)
一个层次的聚类方法是将数据对象组成一棵聚类的树。根据层次分解是自底向上还是自顶向下形成,层次的聚类方法可以进一步分为聚合式层次聚类(agglomerative)和分裂式层次聚类(divisive)。
聚合式的层次聚类,其层次过程的方向是自底向上的。将样本集合中的每个对象作为一个初始簇,然后将最近的两个簇合并,组成新的簇,再将这个新簇与剩余的簇中最近的合并,这种合并过程需要反复进行,直到所有的对象最终被聚到一个簇中。分裂式的层次聚类,其层次过程的方向是自顶向下的,最初先将有关对象放到一个簇中,然后将这个簇分裂,分裂的原则是使两个子簇之间的聚类尽可能的远,分裂的过程也反复进行,直到某个终止条件被满足时结束。不论是合并还是分解的过程,都会产生树状结构,树的叶子节点对应各个独立的对象,顶点对应一个包含了所有对象的簇。常见的层次聚类算法有:BIRCH算法、CURE算法、ROCK算法等。
3. 基于密度的方法(density-basedmethod)
基于密度的方法[36]与其他方法的一个最根本的区别是:它不是基于各种各样的距离,而是基于密度的,它将簇看做是数据空间中被低密度区域分割开的高密度对象区域,这种方法的优势是善于发现空间数据库中任意形状的聚类。基于密度的聚类根据空间密度的差别,把具有相似密度的点作为聚类。由于密度是一个局部概念,这类算法又称为局部聚类(Local Clustering)。一般情况下,基于密度的聚类只扫描一次数据库,故又称为是单次扫描聚类(Single Scan Clustering)。基于密度的聚类方法主要有两种:基于高密度链接区域的密度聚类,如DBSCAN算法;基于密度分布函数的聚类,如DENCLUE算法。
4. 基于网格的方法(density-basedmethod)
基于网格的方法采用一个多分辨率的网格数据结构。它将数据空间量化,并将其划分为有限数目的网格单元,所有的聚类操作都在网格上进行。该算法的优势在于 处理速度快,处理时间与数据对象的数目无关。基于网格的聚类方法有STING算法和CLIQUE算法等。
5. 基于模型的方法(model-basedmehtod)
该方法是要建立数据与模型之间的最好的适应结合关系,它试图优化给定的数据和某些数学模型之间的适应性。其方法主要有两类:统计学方法和神经网络方法。
概念聚类的绝大多数方法采用了统计学的途径。概念聚类是机器学习中的一种聚类方法,给出一组未标记的对象,它产生对象的一个分类模式。与传统的聚类不同,概念聚类除了确定相似对象的分组外,还向前走了一步,为每组对象发现了特征描述。即每组对象代表了一个概念或类。
神经网络方法将每个簇描述为一个标本。标本作为聚类的“原型”,不一定对应一个特定的数据实例或对象。根据某些聚类度量,新的对象可以被分配给标本与其最相似的簇。被分配给一个簇的对象的属性可以根据该簇的标本的属性来预测。