层次聚类改进算法之Chameleon

Chameleon简介

Chameleon(变色龙)算法是一种两阶段层次聚类算法。在进行两个类簇合并时使用更高的标准,同时考虑了类簇之间的互连性(连接两个子簇的边的权重之和)和近似性(连接两个子簇的边的平均权重),具有发现任意形状和大小的簇的能力。算法的过程可分为两个阶段,第一阶段有数据集构造一个K近邻图$G_k$,再通过一个图划分算法将$G_k$划分成大量的子图,每个子图代表一个初始子簇,第二阶段通过一个凝聚的层次聚类算法反复的合并子簇来找到真正的聚类结果。具体过程如下:

Chameleon算法原理

Chamelon是一种层次聚类算法,它采用动态建模来确定一对簇之间的相似度,从而实现聚类。那么,何为动态建模呢?要回答这个问题,我们首先要搞清楚簇的相似度依据是什么。在Chamelon中,簇的相似度依据如下两点评估:

  • 簇中对象的连接情况
  • 簇的邻近性

也就是说,如果两个簇的互连性都很高并且他们之间又靠的很近,那么就将其合并。因此,凭借这两点,我们就可以不用依赖一个静态的、用户提供的模型,而是可以自动的、适应的的去合并簇,从而实现聚类。

在K-means这种算法里面,我们是给定了簇的一个中心点的,然后再实现聚类和调优的。因此这种聚类方法就等同于我们是给定了一个“球形“(或者“类球形”),然后再去补充,修正它。这就是我们说的依赖一个静态的,用户提供的模型。而Chamelon呢,它是动态的考察自身和其他簇,然后动态的适应,合并簇。因此,他没有什么固定的模型,所以,基于这个特性,它可以发现任意形状的,高质量的簇。这也是这个算法一个巨大优势。

Chamelon算法是一种多阶段层次聚类算法,同之前我们讲过的BIRCH算法一样,它也是分为2个主要阶段的。下面我们来具体看一看这个算法的原理。

  • Chameleon采用K-最近邻图的方法来构建一个稀疏图(其中,图的每一个顶点代表一个数据对象,如果一个对象是另一个对象的k个最相似的对象之一,那么这两个顶点(对象)之间就存在一条边(这些边加权后反映对象间的相似度));
  • Chameleon使用一种图划分算法,把k-个最近邻图划分成大量相对较小的子簇,使得边割最小(划分代价,说白了就是被切断的边上的权重之和最小)。
  • Chameleon使用一种凝聚层次聚类算法,其基于子簇的相似度(为了确定最相似的子簇,该算法考察每个簇的互连性和邻近性),反复地合并子簇。

其中,最后的一步(使用一种凝聚层次聚类算法,其基于子簇的相似度(互连性和邻近性)反复地合并子簇)应该是Chameleon算法能发现任意性状的聚类的关键所在。这里涉及到两个指标,即簇的互连性和簇的邻近性。

稀疏图

Chameleon使用稀疏的k近邻图来对数据集进行建模,图中的每一个节点代表一个数据点,任意两个节点v和u之间存在每一条边代表u在v的k个最邻近的节点中。如下图,(a)是原始数据,(b)(c)(d)分别是1,2,3近邻图。

子簇相似性度量

Chameleon使用相对互连性(Relative Interconnectivity)和相对近似性(Relative Closeness)来决定子簇之间的相似性,会选择RI和RC都高的子簇对进行合并。

  • 相对互连性:$RI(C_i,C_j)=\frac{EC(C_i,C_j)}{(|EC(C_i)|+|EC(C_j)|)/2}$。其中,$EC(C_i,C_j)$是连接簇$C_i$和$C_j$的边的权重之和,$EC(C_i)$是把簇$C_i$划分成两个大小大致相等部分的最少边的权重之和。相对互连性解决的是簇之间形状不同和互连度不同的问题。
  • 相对近似性:$RC (C_i,C_j)=\frac{\bar{S}EC(C_i,C_j)}{\frac{C_i}{C_i+C_j}\bar{S}EC(C_i)+\frac{C_j}{C_i+C_j}\bar{S}EC(C_j)}$。其中,$\bar{S}EC(C_i,C_j)$是连接簇$C_i$和$C_j$的边的平均权重,$\bar{S}EC(C_i)$是把簇$C_i$划分成两个大小大致相等部分的最少边的平均权重。

Chameleon聚类过程

  • 子图划分:Chameleon使用hMetis算法根据最小化截断的边的权重之和来分隔k近邻图。
  • 子簇合并:Chameleon使用度量$RI(C_i,C_j) \times RC (C_i,C_j)^{\alpha }$来选择合并的子簇,用这个度量是同时考虑到了两个子簇之间的互连性和近似性。

合并的过程如下:

  • 给定度量函数如下minMetric,
  • 访问每个簇,计算他与邻近的每个簇的RC和RI,通过度量函数公式计算出值tempMetric。
  • 找到最大的tempMetric,如果最大的tempMetric超过阈值minMetric,将簇与此值对应的簇合并
  • 如果找到的最大的tempMetric没有超过阈值,则表明此聚簇已合并完成,移除聚簇列表,加入到结果聚簇中。
  • 递归步骤2,直到待合并聚簇列表最终大小为空。

Chameleon算法总结

Chameleon算法能高质量的发现一些任意形状的聚类,但里面的参数调整并不容易,图切分过程中的k值的选取并不那么直观,此外,算法的时间复杂度在$O(n^2)$,在数据量过大时并不适用。

参考链接:

微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

机器学习在旅游与酒店个性化的研究

当我们访问Netflix、 YouTube 或Amazon时,我们认为个性化推荐是理所当然的。这些服务已经探索

机器学习: 商业与数据科学之间的桥梁

每次我们谈论自动驾驶汽车、聊天机器人、 AlphaGo 或者预测分析,都会涉及到一些机器学习技术的实现。在公众

Python检验数据是否正态分布

判断数据是否符合正态分布,比如使用3-sigma判断数据异常前,首先需要确定的是数据是否符合正态分布。今天一起

发表评论

电子邮件地址不会被公开。 必填项已用*标注