1、聚类算法,什么是聚类,聚类就是按照某个特定标准(如距离准则)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。即聚类后同一类的数据尽可能聚集到一起,不同数据尽量分离。简单地说,聚类就是把相似的东西分到一组。,聚类和分类的区别,同分类不同,对于一个分类器,通常需要你告诉它“这个东西被分为某某类”这样一些例子,理想情况下,一个 分类器会从它得到的训练集中进行“学习”,从而具备对未知数据进行分类的能力,这种提供训练数据的过程通常叫做监督学习。而在聚类的时候,我们并不关心某一类是什么,我们需要实现的目标只是把相似的东西聚到一起,
2、一个聚类算法通常只需要知道如何计算相似 度就可以开始工作了,因此 ,聚类通常并不需要使用训练数据进行学习,这在 机器学习中被称作无监督学习。,聚类的现状及应用,聚类技术正在蓬勃发展,对此有贡献的研究领域包括数据挖掘、统计学、机器学习、空间数据库技术、生物学以及市场营销等。各种聚类方法也被不断提出和改进,而不同的方法适合于不同类型的数据,因此对各种聚类方法、聚类效果的比较成为值得研究的课题。聚类分析是一种重要的人类行为,早在孩提时代,一个人就通过不断改进下意识中的聚类模式来学会如何区分猫狗、动物植物。目前在许多领域都得到了广泛的研究和成功的应用,如用于模式识别、数据分析、图像处理、市场研究、客户
3、分割、Web文档分类等。,聚类算法选择与分类,目前,有大量的聚类算法。而对于具体应用,聚类算法的选择取决于数据的类型、聚类的目的。如果聚类分析被用作描述或探查的工具,可以对同样的数据尝试多种算法,以发现数据可能揭示的结果。 主要的聚类算法可以划分为如下几类:划分方法、层次方法、基于密度的方法、基于网格的方法以及基于模型的方法。,几种聚类算法介绍,划分聚类算法(K-means聚类算法) 层次聚类算法( AGNES 、 DIANA ) 密度聚类算法( DBSCAN ),K-means聚类算法,k-means是划分方法中较经典的聚类算法之一。由于该算法的效率高,所以在对大规模数据进行聚类时被广泛应用
4、。目前,许多算法均围绕着该算法进行扩展和改进。 k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。假设我们提取到原始数据的集合为D(x1, x2, , xn),并且每个xi为d维的向量,K-means聚类的目的就是,在给定分类组数k(k n)值的条件下,将原始数据分成k类 ,S = S1, S2, , Sk,在数值模型上,即对以下表达式求最小值:这里i 表示分类Si 的平均值。,k-means聚类算法计算机实现步骤,1、从D中随机取k个元素,作为k个簇的各自的中心。 2、分别计算剩下的元素到k个簇中心的相异度,将这些元素分别划归到相异度最低的簇。
5、3、根据聚类结果,重新计算k个簇各自的中心,计算方法是取簇中所有元素各自维度的算术平均数。 4、将D中全部元素按照新的中心重新聚类。 5、重复第4步,直到聚类结果不再变化。 6、将结果输出。,k-means聚类算法示例,对于一个数据集合D,假设K=3,首先 3 个中心点被随机初始化,所有的数据点都还没有进行聚类,默认全部都标记为红色,如下图所示:,k-means聚类算法示例,然后进入第一次迭代:按照初始的中心点位置为每个数据点着上颜色,重新计算 3 个中心点,结果如下图所示:,k-means聚类算法示例,可以看到,由于初始的中心点是随机选的,这样得出来的结果并不是很好,接下来是下一次迭代的结果
6、:,k-means聚类算法示例,可以看到大致形状已经出来了。再经过两次迭代之后,基本上就收敛了,最终结果如下:,k-means聚类算法示例,但k-means 并不是万能的,虽然许多时候都能收敛到一个比较好的结果,但是也有运气不好的时候会收敛到一个让人不满意的局部最优解,例如选用下面这几个初始中心点:,k-means聚类算法示例,最终会收敛到这样的结果:,k-means聚类算法优缺点,优点: 1.算法快速、简单。 2.对大数据集有较高的效率并且是可伸缩性的。 3.时间复杂度近于线性,而且适合挖掘大规模数据集。 缺点: 1.K-means 算法中 K 是事先给定的,这个 K 值的选定是非常难以估计
7、,很多时候,事先并不知道数据集应该分成多少个类别才最合适。 2. K-means 算法中,需要根据初始聚类中心来确定一个初始划分,然后对初始划分进行优化。这个初始聚类中心的选择对聚类结果有较大的影响,一旦初始值选择的不好,可能无法得到有效的聚类结果。 3.不适合于发现非凸面形状的簇或者大小差别很大的簇。而且,它对于“躁声”和孤立点数据是敏感的。,层次聚类,当采用划分聚类方法(如k-means)K值选取十分困难时,我们不妨考虑可以考虑层次聚类。层次聚类是另一种主要的聚类方法,它具有一些十分必要的特性使得它成为广泛应用的聚类方法。它生成一系列嵌套的聚类树来完成聚类。单点聚类处在树的最底层,在树的顶
8、层有一个根节点聚类。根节点聚类覆盖了全部的所有数据点。可根据其聚类方式划分为:凝聚(自下而上)聚类和分裂(自上而下)聚类。层次凝聚的代表是AGNES算法。层次分裂的代表是DIANA算法。,AGNES算法,AGNES (AGglomerative NESting)算法最初将每个对象作为一个簇,然后这些簇根据某些准则被一步步地合并。两个簇间的相似度由这两个不同簇中距离最近的数据点对的相似度来确定。聚类的合并过程反复进行直到所有的对象最终满足簇数目。AGNES(自底向上凝聚算法)计算机编程实现: 输入:包含n个对象的数据库,终止条件簇的数目k。 输出:k个簇,达到终止条件规定簇数目。 (1) 将每个
9、对象当成一个初始簇; (2) REPEAT (3) 根据两个簇中最近的数据点找到最近的两个簇; (4) 合并两个簇,生成新的簇的集合; UNTIL 达到定义的簇的数目;,判断两个类之间相似度的方法,1. SingleLinkage:又叫做 nearest-neighbor ,就是取两个类中距离最近的两个样本的距离作为这两个集合的距离,也就是说,最近两个样本之间的距离越小,这两个类之间的相似度就越大。容易造成一种叫做 Chaining 的效果,两个 cluster 明明从“大局”上离得比较远,但是由于其中个别的点距离比较近就被合并了,并且这样合并之后 Chaining 效应会进一步扩大,最后会得
10、到比较松散的 cluster 。 2. CompleteLinkage:这个则完全是 Single Linkage 的反面极端,取两个集合中距离最远的两个点的距离作为两个集合的距离。其效果也是刚好相反的,限制非常大,两个 cluster 即使已经很接近了,但是只要有不配合的点存在,就顽固到底,老死不相合并,也是不太好的办法。这两种相似度的定义方法的共同问题就是指考虑了某个有特点的 数据,而没有考虑类内数据的整体特点 3.Average-linkage:这种方法就是把两个集合中的点两两的距离全部放在一起求一个平均值,相对也能得到合适一点的结果。 average-linkage的一个变种就是取两两
11、距离的中值,与取均值相比更加能够解除个别偏离样本对结果的干扰。,层次聚类,AGNES算法示例,第1步:根据初始簇计算每个簇之间的距离,随机找出距离最小的两个簇,进行合并,最小距离为1,合并后1,2点合并为一个簇。第2步:,对上一次合并后的簇计算簇间距离,找出距离最近的两个簇进行合并,合并后3,4点成为一簇。第3步:重复第2步的工作,5,6点成为一簇。第4步:重复第2步的工作,7,8点成为一簇。第5步:合并1,2,3,4成为一个包含四个点的簇。第6步:合并5,6,7,8,由于合并后的簇的数目已经达到了用户输入的终止条件程序结束。,步骤 最近的簇距离 最近的两个簇 合并后的新簇 1 1 1,2 1
12、,2,3,4,5,6,7,8 2 1 3,4 1,2,3,4,5,6,7,8 3 1 5,6 1,2,3,4,5,6,7,8 4 1 7,8 1,2,3,4,5,6,7,8 5 1 1,2,3,4 1,2,3,4,5,6,7,8 6 1 5,6,7,8 1,2,3,4,5,6,7,8结束,序号 属性 1 属性 2 1 1 1 2 1 2 3 2 1 4 2 2 5 3 4 6 3 5 7 4 4 8 4 5,层次聚类算法优缺点及改进算法,优点:适用于任意形状和任意属性的数据集,灵活控制不同层次的聚类粒度,强聚类能力。 缺点:大大延长了算法的执行时间,不能回溯处理。层次聚类方法尽管简单,但经常会
13、遇到合并或分裂点的选择的困难。改进层次方法的聚类质量的一个有希望的方向是将层次聚类和其他聚类技术进行集成,形成多阶段聚类。下面介绍两个改进的层次聚类方法BIRTH 和CURE。,BIRCH聚类算法,BIRCH(利用层次方法的平衡迭代归约和聚类)是一个综合的层次聚类方法,它用聚类特征和聚类特征树(CF)来概括聚类描述。该算法通过聚类特征可以方便地进行中心、半径、直径及类内、类间距离的运算。CF树是一个具有两个参数分支因子B和阂值T的高度平衡树,存储了层次聚类的聚类特征。分支因子定义了每个非叶节点孩子的最大数目,而阈值给出了存储在树的叶子节点中的子聚类的最大直径。,BIRCH聚类算法,BIRCH算
14、法的工作过程包括两个阶段: 阶段一:BIRCH扫描数据库,建立一个初始存放于内存的CF树,它可以被看作数据的多层压缩,试图保留数据内在的聚类结构。随着对象的插入,CF树被动态地构造,不要求所有的数据读入内存,而可在外存上逐个读入数据项。因此,BIRTH方法对增量或动态聚类也非常有效。 阶段二:BIRCH采用某个聚类算法对CF树的叶结点进行聚类。在这个阶段可以执行任何聚类算法,例如典型的划分方法。BIRCH算法试图利用可用的资源来生成最好的聚类结果。通过一次扫描就可以进行较好的聚类,故该算法的计算复杂度是O(n),n是对象的数目。,CURE聚类算法,很多聚类算法只擅长处理球形或相似大小的聚类,另
15、外有些聚类算法对孤立点比较敏感。CURE算法解决了上述两方面的问题,选择基于质心和基于代表对象方法之间的中间策略,即选择空间中固定数目的具有代表性的点,而不是用单个中心或对象来代表一个簇。该算法首先把每个数据点看成一簇,然后再以一个特定的收缩因子向簇中心“收缩”它们,即合并两个距离最近的代表点的簇。,CURE聚类算法,CURE算法采用随机取样和划分两种方法的组合,具体步骤如下: 从源数据集中抽取一个随机样本。 为了加速聚类,把样本划分成p份,每份大小相等。 对每个划分局部地聚类。 根据局部聚类结果,对随机取样进行孤立点剔除。主要有两种措施:如果一个簇增长得太慢,就去掉它。在聚类结束的时候,非常
16、小的类被剔除。 对上一步中产生的局部的簇进一步聚类。落在每个新形成的簇中的代表点根据用户定义的一个收缩因子收缩或向簇中心移动。这些点代表和捕捉到了簇的形状。 用相应的簇标签来标记数据。 由于它回避了用所有点或单个质心来表示一个簇的传统方法,将一个簇用多个代表点来表示,使CURE可以适应非球形的几何形状。另外,收缩因子降底了噪音对聚类的影响,从而使CURE对孤立点的处理更加健壮,而且能识别非球形和大小变化比较大的簇。CURE的复杂度是O(n),n是对象的数目,所以该算法适合大型数据的聚类。,密度聚类算法,密度聚类方法的指导思想是,只要一个区域中的点的密度大于某个域值,就把它加到与之相近的聚类中去
17、。这类算法能克服基于距离的算法只能发现“类圆形”的聚类的缺点,可发现任意形状的聚类,且对噪声数据不敏感。但计算密度单元的计算复杂度大,需要建立空间索引来降低计算量,且对数据维数的伸缩性较差。这类方法需要扫描整个数据库,每个数据对象都可能引起一次查询,因此当数据量大时会造成频繁的I/O操作。代表算法有:DBSCAN、OPTICS、DENCLUE算法等。 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)一个比较有代表性的基于密度的聚类算法。与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足
18、够高密度的区域划分为簇,并可在有“噪声”的空间数据库中发现任意形状的聚类。,密度聚类算法,对象的-临域:给定对象在半径内的区域。 核心对象:如果一个对象的-临域至少包含最小数目MinPts个对象,则称该对象为核心对象。 例如,在下图中,=1cm,MinPts=5,q是一个核心对象。 直接密度可达:给定一个对象集合D,如果p是在q的-邻域内,而q是一个核心对象,我们说对象p从对象q出发是直接密度可达的。例如,在图1中,=1cm,MinPts=5,q是一个核心对象,对象p从对象q出发是直接密度可达的。图1 核心对象,密度聚类算法,密度可达:如果存在一个对象链p1,p2,pn,p1=q,pn=p,对
19、piD,(1=i=n),pi+1是从pi关于和MitPts直接密度可达的,则对象p是从对象q关于和MinPts密度可达的。 例如,在图2中,=1cm,MinPts=5,q是一个核心对象,p1是从q关于和MitPts直接密度可达,p是从p1关于和MitPts直接密度可达,则对象p从对象q关于和MinPts密度可达。 密度相连:如果对象集合D中存在一个对象o,使得对象p和q是从o关于和MinPts密度可达的,那么对象p和q是关于和MinPts密度相连的。 噪声: 一个基于密度的簇是基于密度可达性的最大的密度相连对象的集合。不包含在任何簇中的对象被认为是“噪声”。,密度聚类算法,图2 直接密度可达
20、图3 密度相连 图4 噪声,DBSCAN 聚类算法,DBSCAN通过检查数据集中每个对象的-邻域来寻找聚类。如果一个点p的-邻域包含多于MinPts个对象,则创建一个p作为核心对象的新簇。然后,DBSCAN反复地寻找从这些核心对象直接密度可达的对象,这个过程可能涉及一些密度可达簇的合并。当没有新的点可以被添加到任何簇时,该过程结束。具体如下:DBSCAN算法描述 输入:包含n个对象的数据库,半径,最少数目MinPts。 输出:所有生成的簇,达到密度要求。 1. REPEAT 2. 从数据库中抽取一个未处理过的点; 3. IF 抽出的点是核心点 THEN找出所有从该点密度可达的对象,形成一个簇
21、4. ELSE 抽出的点是边缘点(非核心对象),跳出本次循环,寻找下一点; 5. UNTIL 所有点都被处理;,DBSCAN 聚类算法示例,下面给出一个样本事务数据库(见左表),对它实施DBSCAN算法。 根据所给的数据通过对其进行DBSCAN算法,以下为算法的步骤(设n=12,用户输入=1,MinPts=4)样本事务数据库 DBSCAN算法执行过程示意 聚出的类为1,3,4,5,9,11,12,2,6,7,8,10。,DBSCAN 聚类算法示例,第1步,在数据库中选择一点1,由于在以它为圆心的,以1为半径的圆内包含2个点(小于4),因此它不是核心点,选择下一个点。 第2步,在数据库中选择一点
22、2,由于在以它为圆心的,以1为半径的圆内包含2个点,因此它不是核心点,选择下一个点。 第3步,在数据库中选择一点3,由于在以它为圆心的,以1为半径的圆内包含3个点,因此它不是核心点,选择下一个点。 第4步,在数据库中选择一点4,由于在以它为圆心的,以1为半径的圆内包含5个点,因此它是核心点,寻找从它出发可达的点(直接可达4个,间接可达3个),聚出的新类1,3,4,5,9,10,12,选择下一个点。 第5步,在数据库中选择一点5,已经在簇1中,选择下一个点。 第6步,在数据库中选择一点6,由于在以它为圆心的,以1为半径的圆内包含3个点,因此它不是核心点,选择下一个点。 第7步,在数据库中选择一点
23、7,由于在以它为圆心的,以1为半径的圆内包含5个点,因此它是核心点,寻找从它出发可达的点,聚出的新类2,6,7,8,11,选择下一个点。 第8步,在数据库中选择一点8,已经在簇2中,选择下一个点。 第9步,在数据库中选择一点9,已经在簇1中,选择下一个点。 第10步,在数据库中选择一点10,已经在簇1中,选择下一个点。 第11步,在数据库中选择一点11,已经在簇2中,选择下一个点。 第12步,选择12点,已经在簇1中,由于这已经是最后一点所有点都以处理,程序终止。,密度聚类算法优缺点,优点: (1)与K-MEANS比较起来,不需要输入要划分的聚类个数 (2)聚类簇的形状没有偏倚; (3)可以在
24、需要时输入过滤噪声的参数; 缺点: (1)当数据量增大时,要求较大的内存支持I/O消耗也很大 (2)当空间聚类的密度不均匀、聚类间距差相差很大时,聚类质量较差。,聚类算法小结,对聚类进行研究是数据挖掘中的一个热门方向,由于以上所介绍的聚类方法都存在着某些缺点,因此近些年对于聚类分析的研究很多都专注于改进现有的聚类方法或者是提出一种新的聚类方法。以下将对传统聚类方法中存在的问题以及人们在这些问题上所做的努力做一个简单的总结:1. 从以上对传统的聚类分析方法所做的总结来看,不管是k-means方法,还是CURE方法,在进行聚类之前都需要用户事先确定要得到的聚类的数目。然而在现实数据中,聚类的数目是
25、未知的,通常要经过不断的实验来获得合适的聚类数目,得到较好的聚类结果。,聚类算法小结,2 . 传统的聚类方法一般都是适合于某种情况的聚类,没有一种方法能够满足各种情况下的聚类,比如BIRCH方法对于球状簇有很好的聚类性能,但是对于不规则的 聚类,则不能很好的工作;K-medoids方法不太受孤立点的影响,但是其计算代价又很大。因此如何解决这个问题成为当前的一个研究热点,有学者提出将 不同的聚类思想进行融合以形成新的聚类算法,从而综合利用不同聚类算法的优点,在一次聚类过程中综合利用多种聚类方法,能够有效的缓解这个问题。 3 . 随着信息时代的到来,对大量的数据进行分析处理是一个很庞大的工作,这就
26、关系到一个计算效率的问题。有文献提出了一种基于最小生成树的聚类算法,该算法通 过逐渐丢弃最长的边来实现聚类结果,当某条边的长度超过了某个阈值,那么更长边就不需要计算而直接丢弃,这样就极大地提高了计算效率,降低了计算成本。,聚类算法小结,4. 处理大规模数据和高维数据的能力有待于提高。目前许多聚类方法处理小规模数据和低维数据时性能比较好,但是当数据规模增大,维度升高时,性能就会急剧下 降,比如k-medoids方法处理小规模数据时性能很好,但是随着数据量增多,效率就逐渐下降,而现实生活中的数据大部分又都属于规模比较大、维度比较 高的数据集。有文献提出了一种在高维空间挖掘映射聚类的方法PCKA(Projected Clustering based on the K-Means Algorithm),它从多个维度中选择属性相关的维度,去除不相关的维度,沿着相关维度进行聚类,以此对高维数据进行聚类。5. 目前的许多算法都只是理论上的,经常处于某种假设之下,比如聚类能很好的被分离,没有突出的孤立点等,但是现实数据通常是很复杂的,噪声很大,因此如何有效的消除噪声的影响,提高处理现实数据的能力还有待进一步的提高。,Thank you !,