层次聚类(Hierarchical Clustering)——CURE算法详解及举例

1 CURE聚类概述

绝大多数聚类算法或者擅长处理球形和相似大小的聚类.或者在存在孤立点时变得比较脆弱。CURE采用了一种新颖的层次聚类算法.该算法选择基于质心基于代表对象方法之间的中间策略。它不同于单个质心或对象来代表一个类,而是选择数据空间中固定数目的具有代表性的点。一个类的代表点通过如下方式产生:首先选择类中分散的对象,然后根据一个特定的分数或收缩因子“收缩”或移动它们。在算法的每一步,有最近距离的代表点对(每个点来自于一个不同的类)的两个类被合并。
每个类有多于一个的代表点使得CURE可以适应非球形的几何形状。类的收缩或凝聚可以有助于控制孤立点的影响。因此,CURE对孤立点的处理更加健壮,而且能够识别非球形和大小变化比较大的类。针对大型数据库,CURE采用随机取样和划分两种方法组合:一个随机样本首先被划分,每个划分被部分聚类。

2 算法步骤

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

2 CURE 聚类特点

CURE,Clustering Using Representative 算法的特点如下:

(1)属于凝聚层次聚类

CURE 算法首先把每个数据点看成一个簇,然后将距离最近的簇 结合,一直到簇的个数达到要求的 K 个为止。

(2)适应非球形的几何形状

不同于一个质心或者单个点来代表一个类,CURE 算法中每个簇有多个代表点,这使得 CURE算法可以适应非球形的几何形状。

代表点的选取:
首先选择簇中距离质心最远的点做为第一个点,然后依次选择距离已选到的点最远的点,直到选到c 个点为止,这些点尽量得分散,捕获了簇的形状和大小。

(3)对孤立点的处理更加健壮

另外,CURE 算法还通过“收缩因子”减少离群点对聚类效果的影响。

代表点的收缩或凝聚:
将上面选取到的代表点根据固定的参数α(0≤α≤1 )向该簇的质心收缩,距离质心越远的点(例如离群点)的收缩程度越大,因此CURE对离群点是不太敏感的,这种方法可以有效的降低离群点带来的不利影响。

收缩系数α的取值不同,聚类结果也相应不同。

当 α 趋于 0 时,所有的“代表点”都汇聚到质心,算法退化为基于“质心”的聚类;
当 α 趋于 1 时,“代表点”完全没有收缩,算法退化为基于“全连接”的聚类,
因此 α 值需要根据数据特征灵活选取,才能得到更好的聚类结果

在得到收缩后的代表点后,两个簇之间的距离就可以定义为这两个簇中距离最近的两个代表点之间的距离
在这里插入图片描述
(4)识别异常值/离群点

CURE 算法分两个阶段消除异常值的影响。

第一个阶段、是在聚类算法执行到某一阶段(或称当前的簇总数减小到某个值)时,根据簇的增长速度和簇的大小对离群点进行一次识别。

第一阶段,将聚类过程中类成员增长非常缓慢的类作为异常值剔除;

CURE算法由于异常值同其他对象的距离更大,所以其所在类中对象数目的增大就会非常缓慢,甚至不增长。

需要注意的是:
如果这个阶段选择的较早(簇总数过大)的话,会将一部分本应被合并的簇识别为离群点;
如果这个阶段选择的较晚(簇总数过少)的话,离群点很可能在被识别之前就已经合并到某些簇中;
因此原文推荐当前簇的总数为数据集大小的1/3时,进行离群点的识别。

第一阶段有一个很明显的问题,就是当随机采样到的离群点分布的比较近时(即使可能性比较小),这些点会被合并为一个簇,而导致无法将他们识别出来,这时就需要第二阶段的来进行处理。

第二阶段,是指在聚类的最后阶段,将非常小的簇删除;

由于离群点占的比重很小,而在层次聚类的最后几步中,每个正常簇的粒度都是非常高的,因此很容易将他们识别出来,一般当簇的总数缩减到大约为 k 时,进行第二阶段的识别。

(5)适应大规模数据

为了适应大型数据,CURE算法采用了随机抽样和分割相结合的手段。

随机抽样将原始数据集中的部分点提取出来,然后试图在这些点上实施CURE层次聚类算法,采样形成的数据子集要适应内存的需要并且与原始数据集相比要足够小。因此,这种随机采样的方法会大大提升CURE的执行速度,并且由于采样过程会对离群点进行过滤因而可以提高聚类质量。

另外,CURE算法还引入了分割的手段,即样本分割成几个部门,然后针对各个部分中的对象进行局部聚类,形成子类,再针对子类进行聚类,新出新的类。

3 优缺点

优点:

1)可以发现复杂空间的簇

2)受噪点影响小

缺点:

1)参数较多,包括采样的大小、聚类的个数、收缩的比例等;

2) 抽样有误差;

3)难以发现形状非常复杂的空间簇(如中空形状),对空间数据密度差异敏感

4)虽然 CURE 聚类是针对大规模数据库设计的算法,但是当数据量剧增时,效率仍然不能满足需求

参考文献1
论文:层次聚类方法的CURE算法研究

  • 1
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
层次聚类是一种聚类分析方法,主要用于对数据进行分层的聚类。其基本思想是将数据集中相似的对象逐步合并成更大的组,直到所有对象都被合并为止。层次聚类通常分为两种类型:凝聚层次聚类和分裂层次聚类。 以下是一种常用的凝聚层次聚类算法的流程: 输入:n个对象的距离矩阵D 输出:聚类树T 1. 初始化:将每个对象看做一个簇; 2. 找出距离最近的两个簇,并将其合并为一个新簇; 3. 更新距离矩阵:计算新簇与其他簇之间的距离,并将其加入到距离矩阵中; 4. 重复步骤2和3,直到所有对象都被合并为一个簇; 5. 构建聚类树:将每次合并的两个簇视为一个节点,构建一棵树形结构,该树即为聚类树T。 下面举一个简单的例子来说明层次聚类的过程。假设有如下的数据集: | 物品 | A | B | C | D | E | | ------ | -- | -- | -- | -- | -- | | 物品A | 0 | 2 | 6 | 7 | 9 | | 物品B | 2 | 0 | 5 | 8 | 10 | | 物品C | 6 | 5 | 0 | 9 | 11 | | 物品D | 7 | 8 | 9 | 0 | 3 | | 物品E | 9 | 10 | 11 | 3 | 0 | 首先将每个物品看作一个簇,距离矩阵如下: | | 物品A | 物品B | 物品C | 物品D | 物品E | | ---- | ----- | ----- | ----- | ----- | ----- | | 物品A | 0 | 2 | 6 | 7 | 9 | | 物品B | 2 | 0 | 5 | 8 | 10 | | 物品C | 6 | 5 | 0 | 9 | 11 | | 物品D | 7 | 8 | 9 | 0 | 3 | | 物品E | 9 | 10 | 11 | 3 | 0 | 然后找出距离最近的两个簇,即物品A和物品B,将其合并为一个新簇AB,更新距离矩阵如下: | | AB | 物品C | 物品D | 物品E | | ---- | ----- | ----- | ----- | ----- | | AB | 0 | 5 | 8 | 10 | | 物品C | 5 | 0 | 9 | 11 | | 物品D | 8 | 9 | 0 | 3 | | 物品E | 10 | 11 | 3 | 0 | 接着,找出距离最近的两个簇,即物品D和新簇AB,将其合并为一个新簇DAB,更新距离矩阵如下: | | DAB | 物品C | 物品E | | ---- | ----- | ----- | ----- | | DAB | 0 | 7 | 3 | | 物品C | 7 | 0 | 11 | | 物品E | 3 | 11 | 0 | 然后,找出距离最近的两个簇,即物品C和新簇DAB,将其合并为一个新簇CDAB,更新距离矩阵如下: | | CDAB | 物品E | | ---- | ----- | ----- | | CDAB | 0 | 8 | | 物品E | 8 | 0 | 最后,将所有物品都合并为一个簇,构建聚类树T,如下图所示: ![层次聚类示例](https://i.imgur.com/HC8gK9n.png) 在聚类树T中,每个叶子结点代表一个物品,而每个中间节点代表一个簇。根据聚类树T,我们可以得到不同聚类数目的聚类结果,例如当聚类数目为2时,CDAB和E分别被归为一类,AB和D分别被归为一类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老实人小李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值