数据挖掘--聚类方法

聚类就是将数据对象分组成多个类或者簇,划分的原则是在同一个粗中的对象之间具有较高的相似度,而不同簇中的对象差别较大。属于一种无指导的学习方法。

  好的聚类算法应该满足以下几个方面:

(1)       可伸缩型:无论对小数据量还是大数据量应该都是有效的。

(2)       具有处理不同类型属性的能力。

(3)       能够发现任意形状的聚类。

(4)       输入参数对领域知识的弱依赖性

(5)       对于输入记录顺序不敏感

(6)       能够处理很多维度的数据,而不止是对3维左右的数据有效

(7)       处理噪声数据的能力

(8)       基于约束的距离:既能找到满足特定的约束,又具有良好聚类特性的数据分组

(9)       挖掘出来的信息是可理解的和可用的。

聚类分析主要在以下几个方面应用:

(1)       可以作为其他算法的预处理步骤

(2)       可以作为一个独立的工具来获得数据的分布情况

(3)       可以完成孤立点挖掘,用来预示欺诈行为的存在。

基本概念

聚类分析的输入可以用一组有序对(X,s)或(X,d)表示,这里X表示一组样本,sd分别是度量样本间相似度或相异度(距离)的标准。聚类系统的输出是一个分区C={C1,C2,…,Ck},其中CiX的子集,成为类。类的特征可以用如下几种方式表示:

²        通过类的中心或类的边界点表示一个类。

²        使用聚类树中的结点图形化地表示一个类。

²        使用样本属性的逻辑表达式表示类。

聚类分析的方法:

      聚类分析有很多大量的、经典的算法,比如k-平均、k-中心点、PAMCLARANS, BIRTH,CURE,OPTICS,DBSCAN,STING,CLIQUE,WAVECLUSTER等。

度量标准:

   一个聚类分析过程的质量取决于对度量标准的选择,因此必须仔细选择度量标准。1)距离函数

²        明可夫斯基距离:

       x, y 是相应的特征,n是特征的维数。则明可夫斯基距离d(x,y)表示如下

              r=2为欧式距离。

²        二次型距离:

      

²        余弦距离

      

²        二元特征样本的距离

       假定xy分别是n维特征,xiyi分别表示每维特征,且xiyi的取值为二元类型数值{01}。则xy的距离定义的常规方法是先求如下几个参数,然后采用SMCJaccard系数或Rao系数。

       a是样本xy中满足 xi=yi=1的二元类型属性的数量

       b是样本xy中满足xi=1,yi=0的二元类型属性的数量

       c是样本xy中满足xi=0,yi=1的二元类型属性的数量

       d是样本xy中满足xi=yi=0的二元类型属性的数量

       则简单匹配系数(Simple Match Coefficient, SMC)的公式如下:

             

       Jaccard系数:

             

       Rao系数:

             

      

              2)类间距离   

       设有两个类CaCb,分别有mn个元素,他们的中心分别为rarb。设元素x属于Cay属于Cb,这两个元素之间的距离记为d(x,y),类间距记为D(Ca,Cb)

²        最短距离法:类中最靠近的两个元素的距离为类间距离:

²        最长距离法:类中最远的两个元素的距离为类间距离

²        重心法:类中两个中心点间的距离为类间距离。因此就需要定义类中心,类中心的定义:

                    

²        类平均法:两个类中任意两个元素之间的距离相加后取平均值。

²        离差平方和:用到了类直径,类直径反应了类中各元素的差异,可以定义为各元素到类中心的欧式距离之和,这样就得到了Ca,Cb,Ca+b的直径分别为ra,rb,ra+b,那么类间距为ra+b – ra - rb

划分聚类方法

层划分聚类算法的基本思想

       给定一个有n个对象的数据集,划分聚类技术将构造数据k个划分,每一个划分就代表一个簇,k<=n k个划分满足下列条件:

²        每个簇至少包含一个对象

²        每个对象属于且仅属于一个簇

     对于给定的k,算法首先给出一个初始的划分方法,以后通过迭代来改变划分,是得每一次改进之后的划分方案都较前一次更好。所谓更好的标准时是:同一个簇中的对象越接近越好,不同簇之间的对象越远越好。目标是最小化所有对象与其参考点之间的相异度之和。这里的远近或者相异度/相似度实际上是聚类的评价函数。

 

评价函数:

     评价函数应该考虑里两个方面:每个簇应该是紧凑的,每个簇间的距离应该尽可能地远。这就需要观察两个值:类内差异和类间差异。类内差异可以采用多种距离函数来定义,最简单的就是计算类内的每一个点到类中心的距离的平方和,一般用w(C)表示。类间差异定义为类中心之间的距离,一般用b(C)表示。

K-means算法

     首先随机地选择k个对象,每个对象处划地代表了一个簇的平均值或中心。对剩余的每个对象根据其与各个簇中心的距离,将它赋给最近的簇。然后重新计算每个簇的平均值。这个过程不断重复,直到准则函数收敛。准则如下:

                  

     准则函数其实就是所有对象的平法误差的总和,这个准则试图试生成的结果簇尽可能地紧凑和独立。

    

算法描述:

     输入:簇的数目k和包含n个对象的数据库

     输出:k个簇,是平方误差准则最小

(1)       任意选择k个对象作为初始的簇中心

(2)       Repeat

(3)           根据簇中对象的平均值,将每个对象赋给最类似的簇

(4)           更新簇的平均值,即计算每个对象簇中对象的平均值

(5)           计算准则函数

(6)       Until E不再明显地发生变化

 

算法性能:

优点:

(1)       简单、快速

(2)       对大数据集,是可伸缩和高效率的。

(3)       算法尝试找出使平方误差函数值最小的k个划分。当结果簇是密集的,而簇与簇之间区别明显的时候,效果较好。

缺点:

(1)       不适合分类属性的数据

(2)       必须给定k,对初始值k比较敏感

(3)       不适合发现非凸面形状的簇,对噪声和孤立点数据是敏感的。

 

改进措施:

1k-模算法,可以对离散属性计算

2)不采用簇中的平均值作为参考点,而选用簇中位置最靠近中心的对象。这样可以避免孤立点的影响。

PAM算法(也称k-中心点算法)

       PAM算法需用簇中位置最靠近中心的对象作为代表对象,然后反复地用非代表对象来代替代表对象,试图找出更好的中心点,在反复迭代的过程中,所有可能的“对象对”被分析,每个对中的一个对象是中心点,另一个是非代表对象。一个对象代表可以被最大平方-误差值减少的对象代替。

       一个非代表对象Oh是否是当前一个代表对象Oi的一个好的替代,对于每个非中心点对象Oj,有以下四种情况需要考虑:

(1)       Oj当前隶属于Oi,如果OiOh替换,且Oj离另一个Om最近,i=m,那么Oj被分配给Om,则替换代价为Cjih=d(j,m)-d(j,i)

(2)       Oj当前隶属于Oi,如果OiOh替换,且OjOh最近,那么Oj被分配给Oh,则替换代价为Cjih=d(j,h)-d(j,i)

(3)       Oj当前隶属于Omm=i,如果OiOh替换,且Oj仍然离Om最近,那么Oj被分配给Om,则替换代价为Cjih=0

(4)       Oj当前隶属于Omm=i,如果OiOh替换,且OjOh最近,那么Oj被分配给Oh,则替换代价为Cjih=d(j,h)-d(j,m)

然后计算

                    

       如果 为负,则可以替换。

算法描述:

输入:簇的数目k和包含n个对象的数据库

输出:k个簇,使得所有对象与其最近中心点的相异度总和最小

(1)       任意选择k个对象作为初始的簇中心点

(2)       Repeat

(3)          指派每个剩余对象给离他最近的中心点所表示的簇

(4)          Repeat

(5)            选择一个未被选择的中心点Oi

(6)            Repeat

(7)              选择一个未被选择过的非中心点对象Oh

(8)              计算用Oh代替Oi的总代价并记录在S

(9)                Until 所有非中心点都被选择过

(10)     Until 所有的中心点都被选择过

(11)   If S中的所有非中心点代替所有中心点后的计算出总代价有小于0的存在,then找出S中的用非中心点替代中心点后代价最小的一个,并用该非中心点替代对应的中心点,形成一个新的k个中心点的集合;

(12)   Until 没有再发生簇的重新分配,即所有的S都大于0.

 

算法性能:

(1)    消除了k-平均算法对于孤立点的敏感性。

(2)    K-中心点方法比k-平均算法的代价要高

(3)    必须指定k

(4)    PAM对小的数据集非常有效,对大数据集效率不高。特别是nk都很大的时候。

其他算法

1.       CLARACluster Larger Application是基于k-中心点类型的算法能处理更大的数据集合。CLARA先抽取数据集合的多个样本,然后用PAM方法在抽样的样本中寻找最佳的k中心点,返回最好的聚类结果作为输出。但不然k-中心点准确,CLARA准确度取决于抽样算法。

2.       CLArANS(Cluster Larger Application baed upon RANdomized search,随机搜索聚类算法)另一种k-中心点的算法CLARA类似采用抽样方法,但也有不同:CLArANS在搜索的每一步都带一定随机性地选取一个样本。

层次聚类方法

层次聚类分为两种:

(1)       凝聚的层次聚类:自底向上的策略,首先将每个对象作为一个簇,然后合并这些原子簇为更大的簇,直到所有的对象都在同一个簇中,或者满足终止条件。

(2)       分类的层次聚类:自顶向下的策略。

AGNES算法

       AGNES(Agglomerative Nesting) 是凝聚的层次聚类算法,如果簇C1中的一个对象和簇C2中的一个对象之间的距离是所有属于不同簇的对象间欧式距离中最小的,C1C2可能被合并。这是一种单连接方法,其每个簇可以被簇中的所有对象代表,两个簇之间的相似度由这两个簇中距离最近的数据点对的相似度来确定。

 

       算法描述:

              输入:包含n个对象的数据库,终止条件簇的数目k

              输出:k个簇

(1)       将每个对象当成一个初始簇

(2)       Repeat

(3)                根据两个簇中最近的数据点找到最近的两个簇

(4)                合并两个簇,生成新的簇的集合

(5)       Until达到定义的簇的数目

       算法性能:

(1)       简单,但遇到合并点选择困难的情况。

(2)       一旦一组对象被合并,不能撤销

(3)       算法的复杂度为O(n的平方),不适合大数据集计算

DIANA算法

       DIANADivisive Analysis)算法属于分裂的层次聚类,首先将所有的对象初始化到一个簇中,然后根据一些原则(比如最邻近的最大欧式距离),将该簇分类。直到到达用户指定的簇数目或者两个簇之间的距离超过了某个阈值。

       DIANA用到如下两个定义:

(1)       簇的直径:在一个簇中的任意两个数据点都有一个欧氏距离,这些距离中的最大值是簇的直径

(2)       平均相异度(平均距离):

                    

       算法描述:

              输入:包含n个对象的数据库,终止条件簇的数目k

              输出:k个簇,达到终止条件规定簇数目

(1)       将所有对象整个当成一个初始簇

(2)       For ( i=1;i!=k;i++) Do Begin

(3)         在所有簇中挑选出具有最大直径的簇;

(4)           找出所挑出簇里与其他点平均相异度最大的一个点放入splinter group,剩余的放入old party中。

(5)           Repeat

(6)             old party里找出到splinter group中点的最近距离不大于old party中点的最近距离的点,并将该点加入splinter group

(7)           Until 没有新的old party的点被分配给splinter group

(8)       Splinter group old party为被选中的簇分裂成的两个簇,与其他簇一起组成新的簇集合

(9)       END

       算法性能:

              缺点是已做的分裂操作不能撤销,类之间不能交换对象。如果在某步没有选择好分裂点,可能会导致低质量的聚类结果。大数据集不太适用。

 

其他算法

       层次聚类方法比较简单,但是经常遇到的一个问题,就是在合并或分裂点选择困难的问题。一个有希望的改进方向是将层级聚类和其他聚类技术进行集成,形成多阶段聚类。

(1)       BIRCH算法

       BIRCH(利用层次方法的平衡迭代规约和聚类)是一个总和的层次聚类方法,

(2)       CURE算法

 

密度聚类方法

 基本思想:只要一个区域的点的密度大于某个阈值,就把它加到预置最近的聚类中区。密度聚类可以发现任意形状的聚类,且对噪声数据不敏感。但是计算复杂度大,且对数据维数的伸缩性较差。需要扫描整个数据库,每个数据对象都可能引起一次查询,因此当数据量大时会造成频繁的I/O操作。

 

DBSCAN算法

       DBSCANDensity-Based Spatial Clustering of Applications with Noise)算法将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域户分成簇,并且可以在有“噪声”的空间数据库中发现任意形状的聚类。

       基本定义:

(1)       对象的 -临域:给定对象的半径 内的区域。

(2)       核心对象:如果一个对象的 -临域至关于 少包含最小数目MinPts个对象,则成该对象为核心对象。

(3)       直接密度可达:给定一个对象集合D,如果p是在q -临域内,而且q是一个核心对象,我们就说对象p从对象q出发是直接密度可达的。

(4)       密度可达:如果存在一个对象链p1, p2,…,pn, p1=q pn=p,对于任意的pi属于Dpi+1是从pi关于 MinPts直接密度可达的,则对象p是从对象q关于 MinPts密度可达的。

(5)       密度相连的:如果对象集合D中存在一个对象o,使得对象pq是从o关于 MinPits密度可达的,那么对象pq是关于 MinPts可达的。

(6)       噪声:一个基于密度的簇是基于密度可达性的最大的密度相连对象的集合。不包含在任何簇中的对象被认为是“噪声”。

算法描述:

       输入:包含n个对象的数据库,半径 ,最少数目MinPts

       输出:所有生成的簇,到达密度要求

(1)    repeat

(2)        从数据库中抽取出一个未处理过的点

(3)            If 抽出的点是核心点 then 找出所有从改密度可达的对象,形成一个簇

(4)         Else 抽出的点是边缘点(非核心对象),跳出本次循环,寻找下一个点

(5)    Until 所有点都被处理

 

算法性能:

       可以发现任意形状的簇,但是该算法对用户定义的参数是敏感的,为了解决这个问题,OPTICS(ordering points to identify the clustering structure)被提出,通过引入核心距离和可达距离,使得聚类算法对输入的参数不敏感。

posted @ 2009-09-15 21:07  searchDM  阅读(847)  评论(0编辑  收藏  举报