单聚类算法
A. 聚类的计算方法
传统的聚类分析计算方法主要有如下几种:
1、划分方法(partitioning methods)
给定一个有N个元组或者纪录的数据集,分裂法将构造K个分组,每一个分组就代表一个聚类,K<N。而且这K个分组满足下列条件:(1) 每一个分组至少包含一个数据纪录;(2)每一个数据纪录属于且仅属于一个分组(注意:这个要求在某些模糊聚类算法中可以放宽);对于给定的K,算法首先给出一个初始的分组方法,以后通过反复迭代的方法改变分组,使得每一次改进之后的分组方案都较前一次好,而所谓好的标准就是:同一分组中的记录越近越好,而不同分组中的纪录越远越好。使用这个基本思想的算法有:K-MEANS算法、K-MEDOIDS算法、CLARANS算法;
大部分划分方法是基于距离的。给定要构建的分区数k,划分方法首先创建一个初始化划分。然后,它采用一种迭代的重定位技术,通过把对象从一个组移动到另一个组来进行划分。一个好的划分的一般准备是:同一个簇中的对象尽可能相互接近或相关,而不同的簇中的对象尽可能远离或不同。还有许多评判划分质量的其他准则。传统的划分方法可以扩展到子空间聚类,而不是搜索整个数据空间。当存在很多属性并且数据稀疏时,这是有用的。为了达到全局最优,基于划分的聚类可能需要穷举所有可能的划分,计算量极大。实际上,大多数应用都采用了流行的启发式方法,如k-均值和k-中心算法,渐近的提高聚类质量,逼近局部最优解。这些启发式聚类方法很适合发现中小规模的数据库中小规模的数据库中的球状簇。为了发现具有复杂形状的簇和对超大型数据集进行聚类,需要进一步扩展基于划分的方法。
2、层次方法(hierarchical methods)
这种方法对给定的数据集进行层次似的分解,直到某种条件满足为止。具体又可分为“自底向上”和“自顶向下”两种方案。例如在“自底向上”方案中,初始时每一个数据纪录都组成一个单独的组,在接下来的迭代中,它把那些相互邻近的组合并成一个组,直到所有的记录组成一个分组或者某个条件满足为止。代表算法有:BIRCH算法、CURE算法、CHAMELEON算法等;
层次聚类方法可以是基于距离的或基于密度或连通性的。层次聚类方法的一些扩展也考虑了子空间聚类。层次方法的缺陷在于,一旦一个步骤(合并或分裂)完成,它就不能被撤销。这个严格规定是有用的,因为不用担心不同选择的组合数目,它将产生较小的计算开销。然而这种技术不能更正错误的决定。已经提出了一些提高层次聚类质量的方法。
3、基于密度的方法(density-based methods)
基于密度的方法与其它方法的一个根本区别是:它不是基于各种各样的距离的,而是基于密度的。这样就能克服基于距离的算法只能发现“类圆形”的聚类的缺点。这个方法的指导思想就是,只要一个区域中的点的密度大过某个阀值,就把它加到与之相近的聚类中去。代表算法有:DBSCAN算法、OPTICS算法、DENCLUE算法等;
4、基于网格的方法(grid-based methods)
这种方法首先将数据空间划分成为有限个单元(cell)的网格结构,所有的处理都是以单个的单元为对象的。这么处理的一个突出的优点就是处理速度很快,通常这是与目标数据库中记录的个数无关的,它只与把数据空间分为多少个单元有关。代表算法有:STING算法、CLIQUE算法、WAVE-CLUSTER算法;
很多空间数据挖掘问题,使用网格通常都是一种有效的方法。因此,基于网格的方法可以和其他聚类方法集成。
5、基于模型的方法(model-based methods)
基于模型的方法给每一个聚类假定一个模型,然后去寻找能够很好的满足这个模型的数据集。这样一个模型可能是数据点在空间中的密度分布函数或者其它。它的一个潜在的假定就是:目标数据集是由一系列的概率分布所决定的。通常有两种尝试方向:统计的方案和神经网络的方案。
当然聚类方法还有:传递闭包法,布尔矩阵法,直接聚类法,相关性分析聚类,基于统计的聚类方法等。
B. 常用的聚类方法有哪几种
聚类分析的算法可以分为划分法、层次法、基于密度的方法、基于网格的方法、基于模型的方法。
1、划分法,给定一个有N个元组或者纪录的数据集,分裂法将构造K个分组,每一个分组就代表一个聚类,K<N。
2、层次法,这种方法对给定的数据集进行层次似的分解,直到某种条件满足为止。
3、基于密度的方法,基于密度的方法与其它方法的一个根本区别是:它不是基于各种各样的距离的,而是基于密度的。这样就能克服基于距离的算法只能发现“类圆形”的聚类的缺点。
4、图论聚类方法解决的第一步是建立与问题相适应的图,图的节点对应于被分析数据的最小单元,图的边(或弧)对应于最小处理单元数据之间的相似性度量。
5、基于网格的方法,这种方法首先将数据空间划分成为有限个单元的网格结构,所有的处理都是以单个的单元为对象的。
6、基于模型的方法,基于模型的方法给每一个聚类假定一个模型,然后去寻找能够很好的满足这个模型的数据集。
(2)单聚类算法扩展阅读:
在商业上,聚类可以帮助市场分析人员从消费者数据库中区分出不同的消费群体来,并且概括出每一类消费者的消费模式或者说习惯。
它作为数据挖掘中的一个模块,可以作为一个单独的工具以发现数据库中分布的一些深层的信息,并且概括出每一类的特点,或者把注意力放在某一个特定的类上以作进一步的分析;并且,聚类分析也可以作为数据挖掘算法中其他分析算法的一个预处理步骤。
许多聚类算法在小于 200 个数据对象的小数据集合上工作得很好;但是,一个大规模数据库可能包含几百万个对象,在这样的大数据集合样本上进行聚类可能会导致有偏的结果。
许多聚类算法在聚类分析中要求用户输入一定的参数,例如希望产生的簇的数目。聚类结果对于输入参数十分敏感。参数通常很难确定,特别是对于包含高维对象的数据集来说。这样不仅加重了用户的负担,也使得聚类的质量难以控制。
C. 聚类算法--DBSCAN
DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法,和K-Means,BIRCH这些一般只适用于凸样本集的聚类相比,DBSCAN既可以适用于凸样本集,也可以适用于非凸样本集。 基于密度的带有噪声的空间聚类,可用于异常值监测,通俗来说就是基于密度的聚类算法 !
聚类就是对大量未知标注的数据集,按数据的内在相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小。聚类算法是无监督的算法。
DBSCAN算法的目的: 是基于密度寻找被低密度区域分离的高密度样本分为三类:
稠密区域内部的点(核心点): 在半径Eps内含有超过MinPts数目的点
稠密区域边缘上的点(边缘点): 在半径Eps内点的数量小于MinPts(即不是核心点),但是其邻域内至少包含一个核心点
稀疏区域中的点(噪声或者背景点): 任何不是核心点或者边界点的点
特点 : 发现任意形状的簇、对噪声数据不敏感、一次扫描、需要密度参数作为停止条件,计算量大和复杂度高 。
DBSCAN是一种基于密度的聚类算法,这类密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。同一类别的样本,他们之间的紧密相连的,也就是说,在该类别任意样本周围不远处一定有同类别的样本存在。
通过将紧密相连的样本划为一类,这样就得到了一个聚类类别。通过将所有各组紧密相连的样本划为各个不同的类别,则我们就得到了最终的所有聚类类别结果。
前面我们定性描述了密度聚类的基本思想,在这里我们就看看DBSCAN是如何描述密度聚类的。DBSCAN是基于一组邻域来描述样本集的紧密程度的,参数(ϵϵ, MinPts)用来描述邻域的样本分布紧密程度。其中,ϵϵ描述了某一样本的邻域距离阈值,MinPts描述了某一样本的距离为ϵϵ的邻域中样本个数的阈值。
假设我们的样本集是D=(x1,x2,...,xm)(x1,x2,...,xm),则DBSCAN具体的密度描述定义如下:
1) ϵϵ-邻域:对于xj∈Dxj∈D,其ϵϵ-邻域包含样本集D中与xjxj的距离不大于ϵϵ的子样本集,即Nϵ(xj)={xi∈D|distance(xi,xj)≤ϵ}Nϵ(xj)={xi∈D|distance(xi,xj)≤ϵ}, 这个子样本集的个数记为|Nϵ(xj)||Nϵ(xj)|
2)核心对象:对于任一样本xj∈Dxj∈D,如果其ϵϵ-邻域对应的Nϵ(xj)Nϵ(xj)至少包含MinPts个样本,即如果|Nϵ(xj)|≥MinPts|Nϵ(xj)|≥MinPts,则xjxj是核心对象。
3)密度直达:如果xixi位于xjxj的ϵϵ-邻域中,且xjxj是核心对象,则称xixi由xjxj密度直达。注意反之不一定成立,即此时不能说xjxj由xixi密度直达, 除非且xixi也是核心对象。
4)密度可达:对于xixi和xjxj,如果存在样本样本序列p1,p2,...,pTp1,p2,...,pT,满p1=xi,pT=xjp1=xi,pT=xj, 且pt+1pt+1由ptpt密度直达,则称xjxj由xixi密度可达。也就是说,密度可达满足传递性。此时序列中的传递样本p1,p2,...,pT−1p1,p2,...,pT−1均为核心对象,因为只有核心对象才能使其他样本密度直达。注意密度可达也不满足对称性,这个可以由密度直达的不对称性得出。
5)密度相连:对于xixi和xjxj,如果存在核心对象样本xkxk,使xixi和xjxj均由xkxk密度可达,则称xixi和xjxj密度相连。注意密度相连关系是满足对称性的。
从下图可以很容易看出理解上述定义,图中MinPts=5,红色的点都是核心对象,因为其ϵϵ-邻域至少有5个样本。黑色的样本是非核心对象。所有核心对象密度直达的样本在以红色核心对象为中心的超球体内,如果不在超球体内,则不能密度直达。图中用绿色箭头连起来的核心对象组成了密度可达的样本序列。在这些密度可达的样本序列的ϵϵ-邻域内所有的样本相互都是密度相连的。
DBSCAN的聚类定义很简单: 由密度可达关系导出的最大密度相连的样本集合,即为我们最终聚类的一个类别,或者说一个簇 。
这个DBSCAN的簇里面可以有一个或者多个核心对象。如果只有一个核心对象,则簇里面其他的非核心对象样本都在这个核心对象的ϵϵ-邻域里;如果有多个核心对象,则簇里的任意一个核心对象的ϵϵ-邻域中一定有一个其他的核心对象,否则这个核心对象无法密度可达。这些核心对象的ϵϵ-邻域里所有的样本的集合组成的一个DBSCAN聚类簇。
那么怎么才能找到这样的簇样本集合呢?DBSCAN使用的方法很简单,它任意选择一个没有类别的核心对象作为种子,然后找到所有这个核心对象能够密度可达的样本集合,即为一个聚类簇。接着继续选择另一个没有类别的核心对象去寻找密度可达的样本集合,这样就得到另一个聚类簇。一直运行到所有核心对象都有类别为止。基本上这就是DBSCAN算法的主要内容了,但是我们还有三个问题没有考虑。
1)一些异常样本点或者说少量游离于簇外的样本点,这些点不在任何一个核心对象的周围,在DBSCAN中,我们一般将这些样本点标记为噪音点。
2)距离的度量问题,即如何计算某样本和核心对象样本的距离。在DBSCAN中,一般采用最近邻思想,采用某一种距离度量来衡量样本距离,比如欧式距离。这和KNN分类算法的最近邻思想完全相同。对应少量的样本,寻找最近邻可以直接去计算所有样本的距离,比如样本量较大,则一般采用KD树或者球树来快速的搜索最近邻。
3)某些样本可能到两个核心对象的距离都小于ϵϵ,但是这两个核心对象由于不是密度直达,又不属于同一个聚类簇,那么如何界定这个样本的类别呢?一般来说,此时DBSCAN采用先来后到,先进行聚类的类别簇会标记这个样本为它的类别。也就是说DBSCAN的算法不是完全稳定的算法。
DBSCAN通过检查数据集中的每个对象的ε-邻域来寻找聚类,如果一个点p的ε-邻域包含对于m个对象,则创建一个p作为核心对象的新簇。然后,DBSCAN反复地寻址这些核心对象直接密度可达的对象,这个过程可能涉及密度可达簇的合并。当没有新的点可以被添加到任何簇时,该过程结束。算法中的ε和m是根据先验只是来给出的。
DBSCAN聚类算法原理的基本要点:
1.DBSCAN算法需要选择一种距离度量,对于待聚类的数据集中,任意两个点之间的距离,反应了点之间的密度,说明了点与点是否能够聚到同一类中。由于DBSCAN算法对高维数据定义密度很困难,所以对于二维空间中的点,可以使用欧几里得距离来进行度量。
2.DBSCAN算法需要用户输入2个参数: 一个参数是半径(Eps),表示以给定点P为中心的圆形邻域的范围;另一个参数是以点P为中心的邻域内最少点的数量(MinPts)。如果满足:以点P为中心、半径为Eps的邻域内的点的个数不少于MinPts,则称点P为核心点 。
3.DBSCAN聚类聚类使用到一个 k-距离 的概念,k-距离是指:给定数据集P={p(i); i=0,1,……n},对于任意点P(i),计算点P(i)到集合D的子集S={p(1), p(2), …, p(i-1), p(i+1), …, p(n)}中 所有点之间的距离 , 距离按照从小到大的顺序排序 ,假设排序后的距离集合为D={d(1), d(2), …, d(k-1), d(k), d(k+1), …,d(n)}, 则d(k)就被称为k-距离 。也就是说, k-距离是点p(i)到所有点(除了p(i)点)之间距离第K近的距离 。对待聚类集合中 每个点p(i)都计算k-距离,最后得到所有点的k-距离集合E={e(1), e(2), …, e(n)} 。
4.根据经验计算半径Eps:根据得到的所有点的 k-距离集合E ,对集合E进行 升序排序 后得到k-距离集合 E' ,需要拟合一条排序后的E'集合中k-距离的变化曲线图,然后绘出曲线,通过观察, 将急剧发生变化的位置所对应的k-距离的值,确定为半径Eps的值 。
5.根据经验计算最少点的数量MinPts: 确定MinPts的大小,实际上也是确定k-距离中k的值 ,DBSCAN算法中取k=4,则MinPts=4。
6.另外,如果觉得经验值聚类的结果不满意,可以适当调整Eps和MinPts的值,经过多次迭代计算对比,选择最合适的参数值。可以看出,如果MinPts不变。Eps取得值过大,会导致大多数点都聚到同一个簇中,Eps过小,会导致一个簇的分裂;如果Eps不变,MinPts的值取得过大,会导致同一个簇中点被标记为离群点,MinPts过小,会导致发现大量的核心点。
我们需要知道的是,DBSCAN算法,需要输入2个参数,这两个参数的计算都来自经验知识。半径Eps的计算依赖于计算k-距离,DBSCAN取k=4,也就是设置MinPts=4,然后需要根据k-距离曲线,根据经验观察找到合适的半径Eps的值,下面的算法实现过程中,我们会详细说明。
对于算法的实现,我们概要地描述一下实现的过程:
1.解析样本数据文件。
2.计算每个点与其他所有点之间的欧几里得距离。
3.计算每个点的k-距离值,并对所有点的k-距离集合进行升序排序,输出的排序后的k-距离值。
4.将所有点的k-距离值,在Excel中用散点图显示k-距离变化趋势
5.根据散点图确定半径Eps的值
6.根据给定MinPts=4,以及半径Eps的值,计算所有核心点,并建立核心点与核心点距离小于半径Eps的点映射。
7.根据得到的核心点集合,以及半径Eps的值,计算能够连通的核心点,并得到离群点。
8.将能够连通的每一组核心点,以及到核心点距离小于半径Eps的点,都放到一起,形成一个簇。
9.选择不同的半径Eps,使用DBSCAN算法聚类得到的一组簇及其离群点,使用散点图对比聚类效果。
和传统的K-Means算法相比,DBSCAN最大的不同就是不需要输入类别数K,当然它最大的优势是可以发现任意形状的聚类簇,而不是像K-Means,一般仅仅使用于凸的样本集聚类。同时它在聚类的同时还可以找出异常点,这点和BIRCH算法类似。
那么我们什么时候需要用DBSCAN来聚类呢?一般来说,如果数据集是稠密的,并且数据集不是凸的,那么用DBSCAN会比K-Means聚类效果好很多。 如果数据集不是稠密的,则不推荐用DBSCAN来聚类 。
优点:
1)可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。不用指明类别的数量,能灵活找到并分离各种形状和大小的类。能很好地处理噪声和离群点。
2)可以在聚类的同时发现异常点,对数据集中的异常点不敏感。
3)聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。
缺点:
1)在不同密度的类方面有一定难度。如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合( HDBSCAN适合密度不均匀问题 )。
2)如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻近时建立的KD树或者球树进行规模限制来改进。当数据量增大时,要求较大的内存支持I/O消耗也很大;算法聚类效果依赖与距离公式选取,实际应用中常用欧式距离,对于高维数据,存在“维数灾难”。
3)调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。
4)对于从两类均可达的边界点,由于各个点是被随机访问的,因此DBSCAN不能保证每次都返回相同的聚类。
DBSCAN类的重要参数分为两类,一类是DBSCAN算法本身的参数,一类是最近邻度量的参数,下面我们对这些参数做一个总结。
1) eps: DBSCAN算法参数,即我们的ϵ-邻域的距离阈值,和样本距离超过ϵ的样本点不在ϵ-邻域内。 默认值是0.5 ,一般需要通过在多组值里面选择一个合适的阈值。eps过大,则更多的点会落在核心对象的ϵ-邻域,此时我们的类别数可能会减少,本来不应该是一类的样本也会被划分为一类。反之则类别数可能会增大,本来是一类的样本却被划分开。
2) min_samples: DBSCAN算法参数,即样本点要成为核心对象所需要的ϵ-邻域的样本数阈值。默认值是5。一般需要通过在多组值里面选择一个合适的阈值。通常和eps一起调参。在eps一定的情况下,min_samples过大,则核心对象会过少,此时簇内部分本来是一类的样本可能会被标为噪音点,类别数也会变多。反之min_samples过小的话,则会产生大量的核心对象,可能会导致类别数过少。
3) metric: 最近邻距离度量参数。可以使用的距离度量比较多,一般来说DBSCAN使用默认的欧式距离(即p=2的闵可夫斯基距离)就可以满足我们的需求。可以使用的距离量度参数有:欧式距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、带权重闵可夫斯基距离、标准化欧式距离、马氏距离。
还有一些其他不是实数的距离度量,一般在DBSCAN算法用不上,这里也就不列了。
4)algorithm:最近邻搜索算法参数,算法一共有三种,第一种是蛮力实现,第二种是KD树实现,第三种是球树实现。这三种方法与K近邻法(KNN)原理中算法一致。对于这个参数,一共有4种可选输入,"brute"对应第一种蛮力实现,"kd_tree"对应于第二种KD树实现,"ball_tree"对应于第三种的球树实现,"auto"则会在上面三种算法中做权衡,选择一个拟合最好的最优算法。 需要注意的是,如果输入样本特征是稀疏的时候,无论我们选择哪种算法,最后sklearn都会去用蛮力实现"brute" 。个人的经验,一般情况使用默认的"auto"就够了。如果数据量很大或者特征也很多,用“auto”建树时间可能会很长,效率不高,建议选择KD树实现“kd_tree”,此时如果发现"kd_tree"速度比较慢或者已经知道样本分布不是很均匀时,可以尝试用"ball_tree"。
5) leaf_size :最近邻搜索算法参数,为使用KD树或者球树时,停止建子树的叶子节点数量的阈值。这个值越小,则生成的KD树或者球树就越大,层数越深,建树时间越长,反之,则生成的KD树或者球树会小,层数较浅,建树时间较短。默认是30,因为这个值一般只影响算法是运行速度和使用内存大小,因此一般情况下可以不管它。
6) p :最近邻距离度量参数。只有用于闵可夫斯基距离和带权重闵客服斯基距离中p值的选择,p=1为曼哈顿距离,p=2为欧式距离。如果使用默认的欧式距离不需要管这个参数。
以上就是DBSCAN类的主要参数介绍,其实需要调参的就是两个参数eps和min_samples,这两个值的组合对最终的聚类效果有很大的影响。
D. 聚类(Clustering)
首先我们先来认识一下什么是聚类任务。
聚类是“无监督学习(unsupervised learning)”中重要的一种。其目标是:通过对无标记的训练样本学习,来揭示数据内在的性质以及规律,为进一步的数据分析做基础。聚类的结果是一个个的簇(Cluster)。所以来说,聚类通常作为其他学习算法的先导,比如在分类问题中,常常先做聚类,基于聚类的不同簇来进行分类模型的训练。
我们先来认识一下聚类算法涉及到两个基本问题:性能度量 & 距离计算。后面我们再具体讲解聚类的经典算法。
由于聚类算法是无监督式学习,不依赖于样本的真实标记。所以聚类并不能像监督学习例如分类那样,通过计算对错(精确度/错误率)来评价学习器的好坏或者作为学习器的优化目标。一般来说,聚类有两类性能度量指标:外部指标和内部指标
所谓外部,是将聚类结果与某个参考模型的结果进行比较, 以参考模型的输出作为标准,来评价聚类的好坏。 假设聚类给出的结果为 λ,参考模型给出的结果是λ*,则我们将样本进行两两配对,定义:
内部指标不依赖任何外部模型,直接对聚类的结果进行评估。直观来说: 簇内高内聚,簇间低耦合 。定义:
我们从小学的距离都是欧氏距离。这里介绍几种其他的距离度量方法:
这里对于无需属性我们用闵可夫斯基距离就不能做,需要用VDM距离进行计算,对于离散属性的两个取值a和b,定义:
所以在计算两个样本的距离时候,将两种距离混合在一起进行计算:
原型聚类即“基于原型的聚类(prototype-based clustering)”,原型指的是样本空间中具有代表性的点(类似于K-Means 选取的中心点)。通常情况下来说,算法现对原型进行初始化,然后对原型进行迭代更新求解。而不同的初始化形式和不同的求解方法,最终会得到不同的算法。常见的 K-Means 便是基于簇中心来实现聚类;混合高斯聚类则是基于簇分布来实现聚类。下面我们具体看一下几种算聚类算法:
K-Means 聚类的思想十分简单, 首先随机指定类中心,根据样本与类中心的远近划分类簇;然后重新计算类中心,迭代直至收敛。 实际上,迭代的过程是通过计算得到的。其根本的优化目标是平方误差函数E:
其中 u_i 是簇 C_i 的均值向量。直观上来看,上式刻画了簇内样本围绕簇均值向量(可以理解为簇中心)的紧密程度,E值越小,则簇内样本的相似度越高。
具体的算法流程如下:
书上还给出了基于具体西瓜样本集的计算过程说明。可以看一下。
LVQ 也是基于原型的聚类算法,与K-Means 不同的是, LVQ使用样本的真实类标记来辅助聚类 。首先,LVQ根据样本的类标记,从各类中分别随机选出一个样本作为该类簇的原型,从而形成了一个 原型特征向量组 ,接着从样本集中随机挑选一个样本,计算其与原型向量组中每个向量的距离,并选取距离最小的向量所在的类簇作为该样本的划分结果,再与真实类标比较:
可以看到,K-Means 和 LVQ 都是以类中心作为原型指导聚类,而高斯混合聚类则采用 高斯分布 来描述原型。现在假设每个类簇中的样本都服从一个多维高斯分布,那么空间中的样本可以看做由K个多维高斯分布混合而成。
多维高斯的概密为:
密度聚类是基于密度的聚类,它从个样本分布的角度来考察样本之间的 可连接性 ,并基于可连接性(密度可达)不断拓展疆域(类簇)。最着名的就是DBSCAN(Density-Based Spatial Clustering of Applications with Noise),首先我们需要明白以下概念:
层次聚类试图在不同层次对数据集进行划分,从而形成属性的聚类结构。
这里介绍一种“自底向上”结合策略的 AGNES(AGglomerative NESting)算法。假设有N个待聚类的样本,AGNES算法的基本步骤如下:
可以看出其中最关键的一步就是 计算两个类簇的相似度 ,这里有几种度量方法:
(1)单链接(singal-linkage):取类间最小距离
E. 聚类算法有哪些
聚类算法有:划分法、层次法、密度算法、图论聚类法、网格算法、模型算法。
1、划分法
划分法(partitioning methods),给定一个有N个元组或者纪录的数据集,分裂法将构造K个分组,每一个分组就代表一个聚类,K<N。使用这个基本思想的算法有:K-MEANS算法、K-MEDOIDS算法、CLARANS算法。
2、层次法
层次法(hierarchical methods),这种方法对给定的数据集进行层次似的分解,直到某种条件满足为止。具体又可分为“自底向上”和“自顶向下”两种方案。代表算法有:BIRCH算法、CURE算法、CHAMELEON算法等。
3、密度算法
基于密度的方法(density-based methods),基于密度的方法与其它方法的一个根本区别是:它不是基于各种各样的距离的,而是基于密度的。这样就能克服基于距离的算法只能发现“类圆形”的聚类的缺点。代表算法有:DBSCAN算法、OPTICS算法、DENCLUE算法等。
4、图论聚类法
图论聚类方法解决的第一步是建立与问题相适应的图,图的节点对应于被分析数据的最小单元,图的边(或弧)对应于最小处理单元数据之间的相似性度量。因此,每一个最小处理单元数据之间都会有一个度量表达,这就确保了数据的局部特性比较易于处理。图论聚类法是以样本数据的局域连接特征作为聚类的主要信息源,因而其主要优点是易于处理局部数据的特性。
5、网格算法
基于网格的方法(grid-based methods),这种方法首先将数据空间划分成为有限个单元(cell)的网格结构,所有的处理都是以单个的单元为对象的。代表算法有:STING算法、CLIQUE算法、WAVE-CLUSTER算法。
6、模型算法
基于模型的方法(model-based methods),基于模型的方法给每一个聚类假定一个模型,然后去寻找能够很好的满足这个模型的数据集。通常有两种尝试方向:统计的方案和神经网络的方案。
(5)单聚类算法扩展阅读:
聚类分析起源于分类学,在古老的分类学中,人们主要依靠经验和专业知识来实现分类,很少利用数学工具进行定量的分类。随着人类科学技术的发展,对分类的要求越来越高,以致有时仅凭经验和专业知识难以确切地进行分类,于是人们逐渐地把数学工具引用到了分类学中,形成了数值分类学,之后又将多元分析的技术引入到数值分类学形成了聚类分析。聚类分析内容非常丰富,有系统聚类法、有序样品聚类法、动态聚类法、模糊聚类法、图论聚类法、聚类预报法等。
在商业上,聚类可以帮助市场分析人员从消费者数据库中区分出不同的消费群体来,并且概括出每一类消费者的消费模式或者说习惯。它作为数据挖掘中的一个模块,可以作为一个单独的工具以发现数据库中分布的一些深层的信息,并且概括出每一类的特点,或者把注意力放在某一个特定的类上以作进一步的分析;并且,聚类分析也可以作为数据挖掘算法中其他分析算法的一个预处理步骤。