Chameleon算法及Matlab实现

版权声明:本文为博主原创文章,转载请注明出处。欢迎交流学习Q1440528444 https://blog.csdn.net/qiu1440528444/article/details/80725142

Chameleon(变色龙)算法

——使用动态建模的多阶段层次聚类

一种层次聚类算法,它采用动态建模来确定一对簇之间的相似度。

算法思想:

  1. 首先由数据集构造一个 k-最近邻图 Gk;
  2. 再通过一种图的划分算法,将Gk图划分成大量较小的子图,每个子图代表一个初始的子簇;
  3. 最后使用凝聚层次聚类算法,基于子簇的相似度反复合并子簇。

**为引出**Chameleon变色龙算法的一些定义,先说一下以往的聚类算法的不足之处:

  1. 忽略簇与簇之间的互联性

    互联性:簇间距离较近的数据对之间的数量,即临接区域的大小。

  2. 忽略簇与簇之间的近似性

    近似性:簇间数据对的相似度,即不同簇的对象间最近距离。

如图4所示:如果只看最近邻的链接,即只看近似性,则算法会倾向于合并c和d而不是a和b,但实际上a、b的临接区域较大,距离也不远(相对于a、b内部),即互连性更好,所以应该属于同一个cluster簇。
这里写图片描述
如图5所示:另一种情况,就是过分强调临接区域的大小,倾向于合并a、c,而不是a、b。

Chameleon算法就是努力保持这两种情况之间平衡,即考虑最近邻节点的靠近程度,也考虑临接区域的大小。

Chameleon算法的聚类步骤:

  1. 第一阶段:图划分算法,将数据对象划分成大量子簇;
  2. 第二阶段:凝聚层次聚类算法,合并子簇。
    这里写图片描述

3个关键知识点:

1. k-最近邻图Gk的构造(第一阶段)

Gk图中的每个点,表示数据集中的一个数据点。对于数据集中的每一个数据点找出它的所有k-最近邻对象,然后分别在它们之间加带权边。
如何找k-最近邻对象呢??即找离该对象最近的k个对象点,
定义:若点ai到另一个点bi的距离值是所有数据点到bi的距离值中k个最小值之一,则称ai是bi的k-最近邻对象。
若一个数据点是另一个数据点的k-最近邻对象之一,则在这两点之间加一条带权边,边的权值表示这两个数据点之间的相似度,即距离越大边权值越小,则近似度越小。

2. 划分k-最近邻图Gk(得到初始子簇)

目的:把Gk图划分为大量的无连接的子图,每一个子图就是第二阶段层次聚类的初始子簇。
划分步骤:首先把图Gk划分成两个近似的等大小的子图,使分区的边的总权重和最小,即(割边最小化);我个人觉得它就是最小二分法。也就是说,簇C划分为两个子簇Ci和Cj时需要割断的边的加权和最小。割边用Ec(Ci,Cj)表示,用于评估簇Ci和Cj之间的绝对互连性。然后把每个子图看成一个初始的子图,重复上述过程直至生成每一个子图中节点数量达到一定标准。

3. 合并成最终的簇(第二阶段)

Chameleon算法根据每对簇Ci和Cj的 相对互连度 RI(Ci,Cj)和 相对接近度
RC(Ci,Cj)来决定两个簇之间的相似度。

  • 两个簇Ci和Cj之间的 相对互连度 RI(Ci,Cj)定义为Ci和Cj之间的绝对互连度关于两个簇Ci和Cj之间的内部互连度的规范化:
    这里写图片描述

    绝对互连性:连接子簇Ci和Cj之间的边的权重之和。
    相对互连性:一个子簇Ci做最小截断时需要去掉的边的权重和。

  • 两个簇Ci和Cj的的 相对接近度 RC(Ci,Cj)定义为Ci和Cj之间的绝对接近度关于两个簇Ci和Cj的内部接近度的规范化,定义如下:
    这里写图片描述
    这里写图片描述
    相对近似度:一个子簇Ci做最小截断时需要去掉的边的平均权重。
    绝对近似度:连接子簇Ci和Cj之间的边的平均权重。

相似度函数:是相对互连度与相对近似度两个指标的乘积。
RI(Ci,Cj)* RC(Ci,Cj)^a ,选择使该函数值最大的簇对进行合并。其中,a是用来调节两个参量的比重的参数。a>1,更重视相对近似性,a<1更重视相对互连性。

合并子簇具体过程:

  1. 给定度量函数和阀值minMetric(用户指定阀值TRI和TRC);
  2. 访问每个簇,计算它与邻近的每个簇的RI和RC,通过度量函数公式计算出值tempMetric,将值存放于一个列表中;
  3. 从列表找出最大的tempMetric值,若它超过阀值minMetric,将簇与此值对应的簇合并,(合并RI和RC分别超过TRI和TRC的簇对);
  4. 若找到的最大tempMetric没超过阀值,则表明此聚类已合并完成,移除聚簇列表,加入到结果聚簇中,(重复直到没有可合并的簇);
  5. 递归步骤2,直到待合并聚簇列表最终大小为空。

总结:

  1. 变色龙算法将互连性和近似性都大的簇合并;
  2. 可以发现高质量的任意形状的簇

问题:

  1. k-最近邻图中K值难以选取;
  2. 最小二等分的选取;
  3. 用户指定的阀值的选取;
  4. 最坏情况下,高维数据的处理代价可能需要O(n^2)的时间。

Matlab实现
CSDN地址下载:

https://download.csdn.net/download/qiu1440528444/10489144

猜你喜欢

转载自blog.csdn.net/qiu1440528444/article/details/80725142