赞
踩
基于层次的聚类方法,是对给定的数据进行层次的分解,直到某种条件满足为止。首先将数据点组成一颗聚类树,根据层次,自底向上或是自顶向下分解。层次的方法可以分为凝聚的方法和分裂的方法。
凝聚的方法,也称为自底向上的方法,初始时每个数据点都被看成是单独的一个簇,然后通过逐步合并相近的数据点或簇,形成越来越大的簇,直到所有的数据点都在一个簇中,或者达到某个终止条件为止。
凝聚的方法:
步骤1:用异常侦测等方法去离群点。
为了提高凝聚方法的分类效率和优化分类效果,首先应用异常侦测等方法去离群点。我们通常采用基于概率分布模型的方法,一元或多元正太分布分析方法,如果数据点不能很好地拟合一个概率模型,或者说它不服从该分布,则将该数据点标识为离群点。
步骤2:用密度分类的方法将数据分成许多小类。
采用了诸如DBSCAN的基于密度的划分算法,将数据划分足够小的类,以便减少凝聚算法的高昂成本,并且该步骤可逆,即如果后面的凝聚算法得不到一个全局优解,可以重复本步。
步骤3:自底向上凝聚算法(AGNES-AGglomerative NESting).
自底向上凝聚的逻辑算法如下:
输入:包含n个数据点的数据库,终止条件簇的数目k。
输出:k个簇,达到终止条件规定簇数目。
将每个数据点当成一个初始簇;
重复以下步骤:
1)根据两个簇中最近的数据点找到最近的两个簇。
2)合并两个簇,生成新的簇的集合。
3)达到定义的簇的数目时终止。
分裂的方法,也称为自顶向下的方法。它与凝聚层次聚类恰好相反,初始时将所有的数据点置于一个簇中,然后逐渐细分为更小的簇,直到最终每个数据点都在单独的一个簇中,或者达到某个终止条件为止。
1)用异常侦测等方法去离群点。步骤同上;
2)DIANA(DIvisive ANAlysis,自顶向下分裂算法)逻辑算法。
自顶向下分裂算法步骤如下:
输入:包含n个数据点的数据库,终止条件簇的数目k。
输出:k个簇,达到终止条件规定簇数目。
1)将所有数据点设为初始簇数目。
2)找出S中与其他点平均相异度最大的点X1,将X1放入新簇S1。
3)根据S中剩余点到最近的距离重新分簇,于是产生两个新簇S1和S2。
4)将S1和S2中直径大的簇,重复2)、3)步。
5)生成k个新簇时终止。
6)应用轮廓系数方法对分裂方法聚类结果评估。
分裂法在生活中也是可以看到的。例如,下火车或下公交车的人群按照目的地分裂:先按照大方向分裂,再按小方向分类,最后再到各自的目的地。
综合层次聚类方法:
1.BIRCH算法
BICH(Balanced Iterative Reducing and Clustering using Hierarchies)算法是一个综合性的层次聚类方法,它利用层次方法的平衡迭代进行归约和聚类。其核心是用一个聚类特征(CF)三元组表示一个簇的有关信息,从而使簇中的点可用对应的聚类特征表示。它通过构造满足分支因子和簇直径限制的聚类特征树来求聚类。该算法通过聚类特征可以方便地进行中心、半径、直径及类内、类间距离的运算。
聚类特征是一个三维向量,CF(n,LS,SS),其中n是数据点的个数,LS是n个点的线性和,SS是n个点的平方和。通过CF可以方便地求中心、半径、直径及类内、类间距离。CF树有两个参数:
分支因子beta,通过它定义每个非叶子结点的子女的最大数目。
阈值T,存储在叶节点中的子簇的最大直径。
算法实现流程如下:
1)用异常侦测等方法去离群点。同上;
2)扫描数据库,建立一个初始的CF树。它可以被看做一个数据的多层压缩,试图保留数据内在的聚类结构。当一个数据点被插入到最近的叶节点(子聚类)中时,随着数据点的插入,CF树被动态地构造,不要求所有的数据读入内存,可在外存上逐个读入数据项。因此,BIRTH方法对增量或动态聚类也非常有效。
3)采用某个聚类算法对CF树的叶节点进行聚类。在这个阶段可以执行任何聚类算法,例如典型的划分方法。BIRCH算法试图利用可用的资源来生成最好的聚类结果。通过一次扫描就可以进行比较好地聚类,故该算法的计算复杂度是O(n),n是数据点的数目。
4)应用轮廓系数方法对分裂方法聚类结果评估。同上
该算法的优点是数据点数目具有线性易伸缩性,并具有良好的聚类质量,一次扫描就可以进行较好的聚类。缺点是BIRCH算法只适用于类的分布呈凸形及球形的情况,对不可视的高维数据则不可行。
BIRCH逻辑算:
输入:包括n个数据点的数据集合D=[x1,x2,…,xn]及阈值T。
输出:簇集合。
过程:
1)扫描数据集,建立初始的CF树。
2)对每个数据点xi执行如下操作。
3)为xi找一个正确的待插入的叶子节点。
4)如果阈值条件不被破环,则将xi插入到叶子节点中,并从被插入的叶子节点到根节点依次更新CF三元组。
5)否则,如果有叶子节点空间,则将xi作为单独的簇插入到树中,并更新CF三元组。
6)否则分类叶子节点,重新安排CF三元组。
CURE算法:
CURE(Clustering Using Representatives)算法中既有层次部分,也有划分部分,所以CURE也是一个综合性的聚类算法。
前面讲到的聚类算法倾向于处理簇为球形、且簇的大小相似的聚类问题,并且对孤点较为敏感。CURE采用了多个点代表一个簇的方法,可以较好地处理以上问题。并且在处理大数据量的时候采用了随机抽样、分区的方法,来提高其效率,使得其可以高效地处理大量数据。
算法实现流程如下:
1)用异常侦测等方法去离群点,同上;
2)对原始数据进行随机抽样,将样本进行等量划分,划分后便形成了以这些样本点为代表的分区。
3)对于每一个分区,再使用层次聚类算法中的凝聚算法。再凝聚算法中的每一步,距离最近的代表性点所对应的簇将被合并。它们之间的距离被定义为两个簇中代表性点之间距离的最小值。
4)应用轮廓系数方法对分裂方法聚类结果评估。同上
CURE算法的具体步骤如下:
1)从原始数据集中抽取一个随机样本S。
2)为了加速聚类,把样本划分成p份,每份大小相等。
3)对每个划分进行局部聚类。
4)根据局部聚类结果,通过随机抽样剔除孤立点。主要有两种措施:如果一个簇增长得太慢,就去掉它;在聚类结束的时候,非常小的类被剔除。
5)对上一步中产生的局部的簇进一步聚类。从每个簇中选择c(常数)个数,然后通过应用收缩因子a,将这些分散的点向簇的质心方向收缩。当a为1的时候,所有点都收缩成一点,即质心。通过多个有代表性的点,簇的形状可以更好地被表达出来。
6)用相应的簇标签来记数据。
CURE算法的优点是它回避用所有点或单个质心来表示一个簇的传统方法,而实将一个簇用多个具有代表性的点来表示,是CURE可以适应非球形的几何形状。
另外,收缩因子降低了噪声对聚类的影响,从而使CURE对孤点的处理更加健壮,而且能识别非球形和大小变化比较大的簇,对于大型数据库具有良好的伸缩性。缺点是参数设置对聚类结果有很大的影响,不能处理分类属性。CURE的复杂的复杂度O(n),其中n是数据点的数目。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。