首页 理论教育聚类的方法:优化数据分析过程

聚类的方法:优化数据分析过程

【摘要】:聚类的定义与待处理对象特征有关。聚类的方法很多,不同的方法对于同一数据集聚类的结果可能不同。根据层次分解形式的方式,层次聚类方法可划分为凝聚的层次聚类和分裂的层次聚类方法。绝大多数层次聚类方法属于这一类,它们的不同表现在簇内与簇间相似度的定义不同。目前,一般将基于层次的聚类方法和其他聚类技术进行集成以形成多阶段聚类,从而提高聚类质量。它是一种结构辅助聚类的方法,在大型数据库中的速度和伸缩性较好。

聚类分析的思想就是根据“物以类聚”的原理,将样本或模式进行分类。聚类的定义与待处理对象特征有关。基于不同的模型构造思想,提出了一系列更加具体化的定义[95]

(1)基于距离的定义。一个聚类是这样一组数据的集合,其聚类成员之间距离的最大值小于这些成员到任一非聚类成员距离的最小值。显然,这种定义方法过于机械,它对于刻画复杂数据聚类的能力较弱。

(2)基于质心的定义。在数据集合中指定若干个质心,根据各数据点到这些质心的距离划分聚类,它使得一个聚类中的元素到其质心的距离小于其到任何其他质心的距离。这种定义方法一般只能够恰当地描述球形聚类,它不适于描述不规则形状的聚类。

(3)基于连接的定义。一个聚类是一组彼此连接的数据点的集合,每个数据到聚类中其他数据之间的接近程度大于其到非聚类成员之间的接近程度。这种定义方法的有效性在于它能够描述任意形状的聚类,但当数据集包含噪声时,基于连接的定义方法难以区分夹杂于噪声数据之间的不同聚类。

(4)基于密度的定义。聚类是数据空间中的稠密区域元素所构成的子集合,两个聚类之间的边界通过稀疏区域划定。基于密度的定义能够适应聚类形状不规则和包含噪声数据的情形,因此它较之其他定义方法具有独到的优越性。

(5)基于相似性的定义。聚类是一组“相似”数据对象的集合,处于不同聚类的元素彼此互不“相似”。

聚类的方法很多,不同的方法对于同一数据集聚类的结果可能不同。以下介绍划分法和层次方法[95]

1.划分法

给定包含n个数据对象的数据集,并给定所要形成的聚类个数K(K<n),划分算法将对象集合划分为K份,其中每个划分均代表一个聚类,所形成的聚类将使得同类中的对象是“相似”的,而不同聚类中的对象是“不相似”的。

K-均值(K-means)聚类方法是最典型的划分方法,将n个对象划分成K个聚类,确保聚类内具有较高的相似度,而聚类间的相似度较低。其处理流程为:首先从n个数据对象中随机选择K个数据对象作为初始聚类的中心,而对于余下的每个对象,根据其与各个聚类中心的距离或相似度,分别将它们分配给与其最相似的聚类;然后重新计算每个聚类的平均值。这个过程不断重复,直到目标测度函数开始收敛。其目标测度函数通常采用平方误差准则,即:

式中:E为所有聚类对象的平方误差和;p为聚类对象;mi为类Ci的各聚类对象的平均值。

K-均值算法具体描述如图2.9所示。

当结果簇是密集的,而簇与簇之间区别明显时,K-means算法效果较好。对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度是O(nkt),n是所有对象的数目,k是簇的数目,t是迭代的次数。通常情况下,k≪n,且t≪n。

图2.9 K-均值算法

但是,K-means算法只有在簇的平均值被定义的情况下才能使用,且用户指定的k值在很多应用中依据不容易把握。另外,K-means算法不适合于发现非凸形状的簇,或者大小判别很大的簇。而且,它对于噪声和孤立点敏感,少量的该类数据能够对所属簇的平均值产生极大的影响[25]

K-means算法有很多变种。它们可能在初始k个平均值的选择,相异度的计算,计算聚类平均值的策略上有所不同。经常会产生较好的聚类结果的一个策略是,首先采用层次的自底向上算法决定的结果簇的数目及找到初始的簇,然后用迭代的重定位来改进聚类结果[25]

K-means算法的一个变体是k-modes方法,它扩展了K-means算法,用模式来替代类的平均值,采用新的相异性度量方法来处理分类性质的数据,采用基于频率的方法来修改聚类的模式。K-means算法和k-modes方法可以综合起来处理有数值类型和分类类型属性的数据,这就是k-prototypes方法[25]

期望最大(Expectation Maximization,EM)算法以另一种方式对Kmeans算法进行了扩展。它不把对象分配给一个确定的簇,而是根据对象与簇之间隶属关系发生的概率来分派对象。换句话说,在簇之间没有严格的界限[25]

2.层次方法

层次方法就是通过分解所给定的数据对象集来创建一个层次。根据层次分解形式的方式,层次聚类方法可划分为凝聚的层次聚类和分裂的层次聚类方法。

(1)凝聚的层次聚类是自底向上的策略。首先将每个对象作为一个簇,然后合并这些原子簇为越来越大簇,直到所有的对象都在一个簇中,或者某个终结条件被满足。绝大多数层次聚类方法属于这一类,它们的不同表现在簇内与簇间相似度的定义不同。

(2)分裂的层次聚类是自顶向下的策略。首先将所有对象归为一个簇中,然后逐渐细分为越来越小的簇,直到每个对象自成一簇,或者达到了某个终结条件,例如达到了某个希望的簇数目,或者两个最近的簇之间的距离超过了某个阈值

在凝聚或分裂的层次聚类方法过程中,簇间距离是重要的依据,目前广泛采用的簇间距离的度量方法一般有4种[25]

1)最小距离:

2)最大距离:

3)平均值距离:

4)平均距离:

这里,|p-p1|是两个对象p和p1之间的距离;Ci是簇的平均值。

由于划分的不可逆性,这种方法的最大困难在于聚类过程中对聚类进行合并或分裂的选择,不适宜地选择合并或分裂会导致低质量的聚类结果。此外,每次决定聚类的合并还是分裂都需要检验和计算大量的数据对象和聚类,因此效率较低[95]。目前,一般将基于层次的聚类方法和其他聚类技术进行集成以形成多阶段聚类,从而提高聚类质量。常用的层次方法有最短距离法、最长距离法、中间距离法、BIRCH、CURE和Chameleon等[95]

BIRCH(Balanced Iterative Reducing and Clustering Using Hierarchies)是利用层次方法的平衡迭代约减和聚类方法[25]。它引入了两个概念:聚类特征和聚类特征树(CF tree),用于概括聚类过程的描述。它是一种结构辅助聚类的方法,在大型数据库中的速度和伸缩性较好。

一个聚类特征(CF)是一个三元组,用来描述子类(cluster)对象的信息。假设某个子类中有n个d维的对象或点{oi},则式(2.11)、式(2.12)、式(2.13)定义了该子类的质心x0、半径R和直径D。

R和D反映了整个子类围绕它的质心的紧密程度。

而该子类的CF定义如式(2.14)。

CF=(n,LS,SS) (2.14)

式中:n为子类中点的数目;LS为n个点的和;SS为n个点的平方和

CF有效地记录了子类的要素,而不是存储所有子类中的对象。

CF树是高度平衡的树,它存储了层次聚类的特征。如图2.10所示是一个CF树的示意图(原图来源于文献[25]中图7.8)。树中的非叶节点有后代或子树,非叶节点存储了其后代的CF的和,也就是概括了其子节点的聚类信息。一棵CF树有两个参数:分支因子B和阈值T。分支因子定义了树中非叶子节点的最大子节点数目,阈值T给出了树中叶子节点的最大直径。两参数会影响生成树的大小。

图2.10 CF树结构示意图

BIRCH算法包括两个阶段[25]

(1)扫描数据集,建立一个初始CF树,CF树一般存放在内存中。这个CF树压缩了数据集信息,只保留了聚类所需的数据信息。

(2)采用某个聚类算法对CF树的节点进行聚类。

在阶段(1),随着新的数据对象被处理,CF树被动态构造,这个方法对增量聚类有很好的支持。一个数据对象被插入到最近的叶子。如果在插入后存储在叶子节点中的子类的直径大于阈值T,那么该叶子就会被分裂。新的数据对象插入后,其信息向树根传递。如果CF树构造过大,不适应内存,可以定义一个较小的阈值,并重建CF树。重建过程从旧树的叶子节点构造新树,不需重读数据集。因此,为了构建CF树,一般只需读一个数据集。

在阶段(2),利用构建的CF树来生成最好的聚类。BIRCH采用了一种多阶段聚类技术,一遍扫描CF树产生基本的聚类,再进行一或多遍扫描可以进一步改进聚类的质量。算法的计算复杂度是O(n)。实验表示BIRCH算法对数据集规模伸缩有线性的时间效率,且聚类质量较好。但是,由于CF树节点阈值限制,其聚类结果并不总是表达了自然聚类。而且,如果簇不是球形的,算法不会很好地工作,因为它用半径和直径的概念来控制聚类过程。

大多数聚类算法或者擅长处理球形和相似大小的聚类,或者在存在孤立点时变得比较脆弱。CURE解决了偏于球形和相似大小的问题,在处理孤立点上也更加健壮。CURE采用一种新的层次聚类算法,算法选择基于质心和基于代表对象方法之间的中间策略[25]。在CURE算法中,一个簇的代表点通过如下方式产生:首先选择簇中分散的对象,然后根据一个特定的分数或收缩因子向簇中心收缩。有算法的每一步,有最近距离的代表点对的两个簇会被合并。CURE算法的核心步骤描述如下[25]

1)从源数据对象中抽取一个随机样本S。

2)将样本S划分为一组分块。

3)对每个划分局部聚类。

4)通过随机取样剔除孤立点。如果一个簇增长得过慢,就去掉它。

5)对局部的簇进行聚类,落在每个新形成的簇中的代表点根据用户定义的一个收缩因子a收缩或向簇中心移动。

6)用相应的簇标签来标记数据。

每个簇有多于一个代表点,使得算法可以适应非球形的几何形状。簇的收缩可以帮助控制孤立点的影响。因此,CURE对孤立点的处理更加健壮。而且,能够识别非球形和大小变化较大的簇。对于大规模数据集,它的伸缩性较好,且聚类质量不降低[25]