【机器学习】层次聚类算法 CURE算法

CURE算法是一种层次聚类算法。

层次聚类方法(Hierarchical Clustering Method) 是一种发展比较早、应用广泛的聚类方法,按采用“自顶向下(Top—Down)”和“自底向上(Bottom—Up)”两种方式,分别被称为分解型层次聚类法(Divisive Hierarehieal Clustering)和聚结型层次聚类法 (Agglomerative Hierarchical Clustering)。

绝大多数聚类算法或者擅长处理球形和相似大 小的聚类,或者在存在孤立点时变得比较脆弱。 CURE采用了一种新颖的层次聚类算法,该算法选择基于质心和基于代表对象方法之间的中间策略。它不同于单个质心或对象来代表一个类,而是选择数据空间中固定数目的具有代表性的点。一个类的代表点通过如下方式产生:首先选择类中分散的对象,然后根据一个特定的分数或收缩因子“收缩”或移动它们。 在算法的每一步,有最近距离的代表点对(每个点来自于一个不同的类)的两个类被合并。

每个类有多于一个的代表点使得CURE可以适 应非球形的几何形状。类的收缩或凝聚可以有助于控制孤立点的影响。因此,CURE对孤立点的处理更加健壮,而且能够识别非球形和大小变化比较大的类。 针对大型数据库,CURE采用随机取样和划分两种方 法组合:一个随机样本首先被划分,每个划分被部分聚类。

算法采用簇中的多个代表点来表示一个簇,首先选择簇中距离质心最远的点做为第一个点,然后依次选择距离已选到的点最远的点,直到选到c
c个点为止(一般选择c≥10),这些点捕获了簇的形状和大小。然后将这些选取到的点根据参数α(0≤α≤1)向该簇的质心收缩,距离质心越远的点(例如离群点)的收缩程度越大,因此CURE对离群点是不太敏感的,这种方法可以有效的降低离群点带来的不利影响。

在得到上述缩减后的代表点后,两个簇之间的距离就可以定义为这两个簇中距离最近的两个代表点之间的距离。

CURE算法的空间复杂度与数据集大小n呈线性关系,而时间复杂度高达O(n2logn) 对于低维数据集该复杂度可以降低到O(n2),因此其时间复杂度不会高于“组平均”层次聚类。但是CURE依旧不能运行于大型数据集,因此与BIRCH中通过汇总的方式来处理该问题不同的是,CURE采用了两种技术来加速聚类,首先在数据集上进行采样,可以证明采用适当的最小随机采样大小可以足够精准的表示簇的几何信息,我们可以采用“切尔霍夫界限”(Chernoff Bounds)来计算这个最小大小,其次,为了进一步提高聚类速度,CURE还将采样得到的点集进行分割,然后在分割后的子集上运行CURE层次聚类,在删除每个子集中的离群点后,再将每个子集中形成的簇进一步CURE层次聚类产生最终的聚类模型。

在得到采样样本子集的聚类信息后,就可以对数据集中剩下的样本点进行划分,这里是跟据每个簇中的代表点进行划分的,而不是像BIRCH中使用簇质心进行划分,具体的方法是找到距离当前样本点最近的代表点,并将该样本点标记为该点所在的簇。

CURE算法的步骤
  • 从源数据对象中抽取一个随机样本S。
  • 将样本S分割为一组划分。
  • 对每个划分局部的聚类。
  • 通过随机取样剔除孤立点。如果一个类增长太慢,就去掉它。
  • 对局部的类进行聚类。落在每个新形成的类中的代表点根据用户定义的一个收缩因子收缩或向 类中心移动。这些点代表和捕捉到了类的形状。
  • 用相应的类标签来标记数据。

具体思想如下:

  • CURE算法采用的是聚结层次聚类。在最开始的时候,每一个对象就是一个独立的类,然后从最相似的对象开始进行合并。
  • 为了处理大数据集,采用了随机抽样和分割 (Partitioning)手段。采用抽样的方法可以降低数据 量,提高算法的效率。在样本大小选择合适的情况下, 一般能够得到比较好的聚类结果。另外,CURE算法 还引入了分割手段,即将样本分割为几个部分,然后针对各个部分中的对象分别进行局部聚类,形成子类。再针对子类进行聚类,形成新的类。
  • 传统的算法常常采用一个对象来代表一个类,而CURE算法由分散的若干对象,在按收缩因子移向其所在类的中心之后来代表该类。由于CURE算法采用多个对象来代表一个类,并通过收缩因子来调节类的形状,因此能够处理非球形的对象分布。
  • 分两个阶段消除异常值的影响。CURE算法采用的是聚结层次聚类。在最开始的时候,每一个对 象就是一个独立的类,然后从最相似的对象开始进行 合并。 由于异常值同其它对象的距离更大,所以其所在 的类中对象数目的增大就会非常缓慢,甚至不增长。 第一个阶段的工作,是将聚类过程中增长非常缓慢的 类作为异常值除去。第二个阶段的工作(聚类基本结 束的时候)是将数目明显少的类作为异常值除去。
  • 由于CURE算法采用多个对象来代表一个 类,因此可以采用更合理的非样本对象分配策略。在完成对样本的聚类之后,各个类中只包含有样本对 象,还需要将非样本对象按一定策略分配到相应的类中。
  • 根据CURE算法提出者的研究成果,在该算法中 收缩因子 的取值在0.2-0.7之间能取得较好的聚类效果,而代表点数c一般选择大于10的数时,都能找到正确的聚类。
离群点的处理

在进行随机采样时,会过滤掉大部分的离群点,此外,在随机采样得到的数据集中存在的少量离群点由于分布在整个原始数据空间,因而被随机采样进一步隔离了。在进行CURE凝聚层次聚类时,需要将每个点单独初始化为一个簇,并将距离最近的点合并为一个簇,由于离群点往往距离样本中的其它点很远,因此他所代表的簇增长的最为缓慢,以至于簇的大小远远小于正常的簇。

以上述讨论作为契机,我们将层次聚类中的离群点识别分为两个阶段,第一个阶段是在聚类算法执行到某一阶段(或称当前的簇总数减小到某个值)时,根据簇的增长速度和簇的大小对离群点进行一次识别,需要注意的是,如果这个阶段选择的较早(即簇总数依旧很大)的话,会将一部分本应被合并的簇识别为离群点,如果这个阶段选择的较晚(即簇总数过少)的话,离群点很可能在被识别之前就已经合并到某些簇中,因此原文推荐当前簇的总数为数据集大小的1/3时,进行离群点的识别。第一阶段有一个很明显的问题,就是当随机采样到的离群点分布的比较近时(即使可能性比较小),这些点会被合并为一个簇,而导致无法将他们识别出来,这时就需要第二阶段的来进行处理。由于离群点占的比重很小,而在层次聚类的最后几步中,每个正常簇的粒度都是非常高的,因此很容易将他们识别出来,一般当簇的总数缩减到大约为k时,进行第二阶段的识别。

总结

光看看没什么用啊,,下次比较一下。

想起打ACM刷题比较多,实践了才是真的会。

https://blog.csdn.net/qq_40793975/article/details/83574309

发布了231 篇原创文章 · 获赞 13 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/LU_ZHAO/article/details/105040370
今日推荐