数据挖掘概念与分析第十章笔记

聚类的基本概念和方法

什么是聚类?聚类是一个把数据对象集划分成多个组或簇的过程,使得簇内的对象具有很高的相似性,但是与其他簇中的对象很不相似。

对聚类分析的要求

书中介绍了很多的典型要求,其中有伸缩性,相似性度量,聚类空间等,总而言之,聚类算法具有多种要求。

基本的聚类方法有哪些?

1:划分方法

2:层次方法

3:基于密度的方法

4:基于网格的方法

书中图10.1列出了各个方法的一般特点,有些聚类方法集成了多种聚类方法的思想,因此有时很难将一个给定的算法只划归到一个聚类方法类别。接下来就将依次讨论这四种方法

划分方法

聚类分析最简单,最基本的版本是划分,它把对象组织成多个互斥的组或簇。

大部分的划分算法是基于距离来划分的(这里的距离实际上是用来度量相似性的)。该方法首先创建k个划分,k为要创建的划分个数;然后利用一种叫做迭代的重定位技术通过将对象从一个划分移到另一个划分来帮助改善划分质量。典型的划分方法包括:k- means,k-medoids,CLARA(Clustering LARge Application),CLARANS(Clustering Large Application based upon RANdomized Search),FCM。

我们主要讲解典型的k-均值和k-中心点算法。这两个算法适合发现中小规模数据库中的球状簇。

一:k-means:一种基于形心的技术

假设数据集D包含n个欧式空间中的对象。划分方法把D中的对象分配到k个簇中,其中各个簇之间互斥。然后用一个目标函数用来评估划分的质量,使得簇内对象相互相似,簇间对象相异。

基于形心的划分技术使用簇Ci的形心代表该簇。从概念上讲,簇的形心就是它的中心点。形心可以用多种方法定义,例如用分配给该簇对象的均值或中心点定义。

我们说了要用目标函数来评估划分的质量,目标函数的值称为簇内变差, 它是Ci中所有对象和形心之间的误差平方和,公式10.1已经给出计算方法。

优化簇内变差是一项具有挑战性的计算任务,在最坏的情况下,我们必须要枚举大量可能的划分,并检查簇内变差,并检查簇内变差值,为了克服求精确解的巨大计算开销,实践中通常使用贪心方法。贪心方法是指在对问题求解时,总是做出当前看来是最好的解,做到局部最优,而不是全局最优。

书中还给出了k-means的复杂度,该方法对于处理大数据集,是相对可伸缩的和有效的。并且只有仅当簇的均值有定义的时候才能使用k-means方法。该方法当然存在一定的缺陷,比如不适合于发现非凸形状的簇,或者大小差别很大的簇。此外,它对噪声和离群点敏感,因为少量的这类数据能够对均值产生极大的影响。

如何提高k-means的可伸缩性?

1:在聚类的时候使用合适规模的样本

2:使用过滤方法,使用空间层次数据索引节省计算均值的开销

3:使用微聚类的思想

 二:k-中心点:一种基于代表对象的技术

如何修改k-means方法,降低它对离群点的敏感性?针对这个问题我们提出了k-中心点。我们可以不用k-中心性采用簇中对象的均值作为参考点,而是挑选实际对象来代表簇,每个簇使用一个代表对象。其余的每个对象被分到与其最相似的代表性对象所在簇中。目标函数并不是k-means中的簇内变差,而是一个叫做绝对误差标准的函数 。公式为10.2

围绕中心点划分(PAM)算法是K-中心点聚类的一种流行的实现。它用迭代,贪心的方法处理问题。它的主要流程如下 :
1、随机选择K个对象,每个对象代表一个簇的中心点; 
2、对剩下的每个对象,分别计算其与各个簇中心(代表对象)的欧式距离,将它分配到最相似的簇; 
3、更新代表对象了。这一步稍微有点复杂,我拆开来说。 
3.1:为了决定一个非代表对象是否是当前的一个代表对象更好的替代,我们需要来计算一下。 
3.2:首先计算所有点(除开该候选对象)到当前代表对象集合的绝对误差之和(实际上就是计算公式10.2) 
3.3:然后计算所有点(除开待替换对象)到当前代表对象集合(该集合目前是少了待替换对象,多了该候选对象)的绝对误差之和(公式10.2) 
3.4:接着,比较这两次计算的值,如果3.3的值比3.2的值小,那么说明如果我们使用该候选点替换该中心点之后,聚类的效果会更好。所以我们进行中心点的替换(代表对象)。 
4、重复第2,3步直至聚类稳定。

可以参考这篇博客 k-中心点

想PAM这样的典型k-中心点算法在小型数据集上运行良好,但是不能很好地用于大数据集。为了处理大数据集,可以使用一种称为CLARA的基于抽样的方法,书中P297简要讲解了。

层次方法

由于实际需要,我们想把数据划分成不同层上的组群,对于数据汇总或者可视化来说,用层级结构的形式来表示数据对象是有用的。

层次聚类方法一般分为这三种:

1:算法方法(凝聚,分裂,多阶段方法):这些方法都将数据对象看做是确定性的,并根据对象之间的确定性的距离计算簇

2:概率方法:使用概率模型捕获簇,并根据模型的拟合度度量簇的质量

3:贝叶斯方法:这类方法计算可能的聚类的分布,即他们返回给定数据上的一组聚类结构和他们的概率、条件,而不是输出数据集上单个确定性的聚类。

算法方法

一:凝聚的层次聚类方法

该方法使用自底向上的策略。该单个簇成为层次结构的根。在合并步骤,它找出两个最接近的簇(根据某种相似性度量),并且合并他们,形成一个簇。因为每次迭代合并两个簇,其中每个簇至少包含一个对象,因为凝聚方法最多需要n次迭代。

二:分裂的层次聚类方法

该方法使用自顶向下的策略。 它从把所有对象置于一个簇中开始,递归地把这些簇划分成更小的簇。直到最底层的簇都足够凝聚或仅包含一个对象。

在凝聚和分裂中,用户都可以指定期望的簇个数作为终止条件。例10.3介绍了一种凝聚的层次聚类算法AGNES和一种分裂的层次聚类算法DIANA。

对于凝聚和分裂,可能遇到的最大问题就是分裂点和凝聚点的选取,这种决定是至关重要的。分裂通常使用启发式方法进行划分,但可能导致不精确的结果。为了效率,分类方法通常不对已经做出的划分决策回溯。一旦一个簇被划分,该簇的任何可供选择其他划分都不再考虑。由于分裂的这一特点,凝聚方法远比分裂方法多。

三:算法方法的距离度量

无论是使用凝聚方法还是使用分裂方法,一个核心问题是度量两个簇之间的距离,其中每个簇一般是一个对象集。

书中给出了四个广泛采用的簇间距离度量方法:最小距离,最大距离,均值距离,平均距离。根据字面意思就可以得出计算公式,在这里需要注意一下最小距离和最大距离。

当算法使用最小距离来衡量簇间距离时,有时称它为最近邻聚类算法。如果当最近的两个簇之间的距离超过用户给定的阈值时聚类过程就终止。则称其为单连接算法

当算法使用最大距离来衡量簇间距离时,有时称它为最远邻聚类算法。如果当最近的两个簇之间的最大距离超过用户给定的阈值时聚类过程就终止,则称其为全连接算法

根据这两种构造过程,我们可以发现,单连接趋向于局部邻近性定义的分层的簇,而全连接则趋向于发现由全局邻近性选择的簇

四:多阶段聚类

一种提高层次方法聚类质量的有希望的方向是集成层次聚类与其他聚类技术,形成多阶段聚类。这里介绍两种多阶段聚类方法:BIRCH和Chameleon

1:BIRCH:使用聚类特征树的多阶段聚类

BIRCH是为大量数值数据聚类设计的,它克服了凝聚聚类方法所面临的两个困难:可伸缩性和不能撤销先前步骤所做的工作。书中给的例子对于我来说我觉得不是很好理解,所以找了一篇博客来参考参考 BIRCH算法​​​​​​

2:Chameleon:使用动态建模的多阶段层次聚类

 在Chameleon中,簇的相似度依据如下两点评估:簇中对象的连接情况和簇的邻近性。参考博客 Chameleon算法

五:概率层次方法

算法的层级聚类方法有以下缺点:

1:为层次聚类选择一种好的距离度量常常是困难的

2:为了使用算法的方法,数据对象不能有缺失的属性值。

3:大部分算法的层次聚类方法都是启发式的,在每一步局部地搜索好的合并/划分。

概率层次聚类旨在通过使用概率模型度量簇之间的距离,克服以上某些缺点。把聚集的数据看做是一个样本或生成模型,通过聚类样本尽可能准确的估计总体。

 我们用聚类质量来度量,而聚类质量是体现在总体的分布函数上。如果样本的聚类质量越高,则总体的生成模型就越接近某种分布函数(高斯分布或伯努利分布,由参数决定)。

图10.12给出了概率层次聚类算法的具体步骤。因为数学知识已经丢了有两年了,看起来还是有点吃力,系统学习算法的时候再好好研究。

基于密度方法

划分和层次方法旨在发现球状簇,很难发现任意形状的簇。为了发现任意形状的簇,作为选择,我们可以把簇看做数据空间中被稀疏区域分开的稠密区域。这就是基于密度的聚类方法的主要策略。

一:DBSCAN:一种基于高密度连通区域的基于密度的聚类

 DBSCAN涉及到几个概念:核心对象,直接密度可达,密度可达,密度相连。刚开始看的时候会觉得很晕,因为这些术语感觉都差不多,而且之前没接触过,不过多看两遍并且结合书上的例10.7例子,理解起来问题应该不大。

参考BIRCSANBIRCSAN聚类原理

DBSCAN算法需要选择一种距离度量,对于待聚类的数据集中,任意两个点之间的距离,反映了点之间的密度,说明了点与点是否能够聚到同一类中。由于DBSCAN算法对高维数据定义密度很困难,所以对于二维空间中的点,可以使用欧几里德距离来进行度量。

二:OPTICS:通过点排序识别聚类结构

DBSCAN中,把选择能产生可接受的聚类结果的参数值的责任留给了用户,这并不是一个好的做法。此外,现实的高维数据集常常具有非常倾斜的分布,全局密度参数不能很好的刻画其内在的聚类结构。为了克服在聚类分析中使用一组全局参数的缺点,提出了OPTICS聚类分析算法。

OPTICS并不显示地产生数据集聚类,而是输出簇排序。这个排序是所有分析对象的线性表,并且代表了数据的基于密度的聚类结构,它包含的信息等价于从一个广泛的参数设置所获得的基于密度的聚类。换句话说,从这个排序中可以得到基于任何半径和任何阈值的聚类。

OPTICS涉及到几个概念:半径,阈值,核心点,核心距离,可达距离,最小可达距离。书中例10.8给出了核心距离和可达零距离的例子。

具体做法为:
输入:样本集D, 邻域半径E, 给定点在E领域内成为核心对象的最小领域点数MinPts 
输出:具有可达距离信息的样本点输出排序 
方法: 
1、创建两个队列,有序队列和结果队列。(有序队列用来存储核心对象及其该核心对象的直接可达对象,并按可达距离升序排列;结果队列用来存储样本点的输出次序。你可以把有序队列里面放的理解为待处理的数据,而结果队列里放的是已经处理完的数据); 
2、如果所有样本集D中所有点都处理完毕,则算法结束。否则,选择一个未处理(即不在结果队列中)且为核心对象的样本点,找到其所有直接密度可达样本点,如过该样本点不存在于结果队列中,则将其放入有序队列中,并按可达距离排序; 
3、如果有序队列为空,则跳至步骤2(重新选取处理数据)。否则,从有序队列中取出第一个样本点(即可达距离最小的样本点)进行拓展,并将取出的样本点保存至结果队列中(如果它不存在结果队列当中的话)。然后进行下面的处理。 
3.1.判断该拓展点是否是核心对象,如果不是,回到步骤3(因为它不是核心对象,所以无法进行扩展了。那么就回到步骤3里面,取最小的。这里要注意,第二次取不是取第二小的,因为第一小的已经放到了结果队列中了,所以第二小的就变成第一小的了。)。如果该点是核心对象,则找到该拓展点所有的直接密度可达点; 
3.2.判断该直接密度可达样本点是否已经存在结果队列,是则不处理,否则下一步; 
3.3.如果有序队列中已经存在该直接密度可达点,如果此时新的可达距离小于旧的可达距离,则用新可达距离取代旧可达距离,有序队列重新排序(因为一个对象可能直接由多个核心对象可达,因此,可达距离近的肯定是更好的选择); 
3.4.如果有序队列中不存在该直接密度可达样本点,则插入该点,并对有序队列重新排序; 
4、迭代2,3。 
5、算法结束,输出结果队列中的有序样本点。

三:DENCLUE:基于密度分布函数的聚类

这个有点看不懂,先放一放

基于网格的方法

后面单独写来记录

聚类评估 

 聚类评估估计在数据集上进行聚类的可行性和被聚类方法产生的结果的质量。聚类评估主要包括以下任务:

1:估计聚类趋势

聚类趋势评估确定给定的数据集是否具有可以导致有意义的聚类的非随机结构。我们用霍普金斯统计量来检验空间分布的变量的空间随机性

2:确定数据集中的簇数

书中给出了肘方法,更高级的方法还可以使用信息准则或信息论的方法确定簇数。

3:测定聚类质量

对于测定聚类的质量,我们可以根据是否有基准可用,如果有基准可用,则外在方法可以使用它,外在方法比较聚类结果和基准。如果没有基准可用,则我们可以使用内在方法,通过簇分离情况评估聚类的好坏。

外在方法又称监督方法,内在方法是无监督方法。

猜你喜欢

转载自blog.csdn.net/Phoenix_tgd/article/details/82343900
今日推荐