Chameleon变色龙聚类算法小结

原文链接:https://blog.csdn.net/qiu1440528444/article/details/80725142
推荐代码(java代码,亲测能用):https://github.com/kstanisz/chameleon-clustering

前言

  Chameleon,变色龙算法,属于层次聚类算法领域。一种层次聚类算法,它采用动态建模来确定一对簇之间的相似度。它可以自动地、适应地合并簇,对各种奇葩的形状也能应对自如。

1. Chameleon 算法原理

一张图大致了解整个算法的思想。
在这里插入图片描述
  1) 首先由数据集构造一个 k-最近邻图 Gk;
  2) 再通过一种图的划分算法,将Gk图划分成大量较小的子图,每个子图代表一个初始的子簇;
  3) 最后使用凝聚层次聚类算法,基于子簇的相似度反复合并子簇。

  下面再看看定义的一些概念,为了引出变色龙算法的一些定义,这里先说一下以往的一些聚类算法的不足之处,如图。
在这里插入图片描述
  1) 如图4所示:忽略簇与簇之间的互连性。
  如果只看最近邻的链接,即只看近似性,则算法会倾向于合并c和d而不是a和b,但实际上a、b的临接区域较大,距离也不远(相对于a、b内部),即互连性更好,所以应该属于同一个cluster簇。
  2) 如图5所示:忽略簇与簇之间的近似性。就是过分强调临接区域的大小,倾向于合并a、c,而不是a、b。

  Chameleon算法正好弥补了这2点要求,兼具互连性和近似性。下面用公式来描述这2个概念。

2. 概念:互连性和近似性

  簇的互连性,同时考虑 两个簇之间的距离 和 簇内各元素之间的距离,用相对互联度(RI)来量化得衡量:
R I ( C i , C j ) = ∣ E C ( C i , C j ) ∣ ∣ E C ( C i ) ∣ + ∣ E C ( C j ∣ 2 RI(C_i,C_j)=\frac{|EC(C_i,C_j)|}{\frac{|EC(C_i)|+|EC(C_j|}{2}} RI(Ci,Cj)=2EC(Ci)+EC(CjEC(Ci,Cj)

其中, E C ( C i , C j ) EC(C_i,C_j) EC(Ci,Cj) 表示将簇 C C C划分为两个子簇 E C ( C i ) EC(C_i) EC(Ci) E C ( C j ) EC(C_j) EC(Cj) 割边的权重;
E C ( C i ) EC(C_i) EC(Ci)表示将 C i C_i Ci划分为大致相等的两部分的割边的权重

  簇的近似性,考虑更多的是簇与簇之间的近似性,用相对近似度(RC)指标量化:
R C ( C i , C j ) = S ˉ ∣ E C ( C i , C j ) ∣ ∣ C i ∣ ∣ C i ∣ + ∣ C j ∣ S ˉ E C ( C i ) ∣ + ∣ C j ∣ ∣ C i ∣ + ∣ C j ∣ ∣ S ˉ E C ( C j ∣ 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|} RC(Ci,Cj)=Ci+CjCiSˉEC(Ci)+Ci+CjCjSˉEC(CjSˉEC(Ci,Cj)

其中, S ˉ E C ( C i , C j ) \bar{S}EC(C_i,C_j) SˉEC(Ci,Cj)表示将簇 C C C划分为两个子簇 E C ( C i ) EC(C_i) EC(Ci) E C ( C j ) EC(C_j) EC(Cj) 割边的平均权重,
S ˉ E C ( C i ) \bar{S}EC(C_i) SˉEC(Ci)表示将 C i C_i Ci划分为大致相等的两部分的割边的平均权重,

  定义度量公式
R I ( C i , C j ) ∗ R C ( C i , C j ) α RI(C_i,C_j) * RC(C_i,C_j)^\alpha RI(Ci,Cj)RC(Ci,Cj)α

其中 α 为是用来调节两个参量的比重的参数,α>1,更重视相对近似性,α<1更重视相对互连性。

  聚合过程中,选择使该函数值最大的簇对进行合并。重复这一过程,直到没有满足条件的子簇为止。

3. 算法流程

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

4. 优缺点

优点:可以发现高质量的任意形状的簇。
缺点:
  1) 需要设置的参数较多,包括knn中 k 值,度量公式中的 α \alpha α值,阈值minMetric的选取;
  2) 最坏情况下,高维数据的处理代价可能需要 O ( n 2 ) O(n^2) O(n2)的时间。

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
### 回答1: 变色龙聚类算法Chameleon Clustering Algorithm)是一种基于密度的聚类算法,可以在数据集中找出不同的聚类簇。下面是使用Python实现变色龙聚类算法的示例代码: ``` import numpy as np def distance(x, y): """ 计算两个点之间的欧几里得距离 """ return np.sqrt(np.sum(np.square(x - y))) def get_nearest_cluster(point, clusters, distance_func): """ 获取离当前点最近的聚类簇 """ nearest_cluster = None min_distance = float('inf') for cluster in clusters: d = distance_func(point, cluster['centroid']) if d < min_distance: min_distance = d nearest_cluster = cluster return nearest_cluster def merge_clusters(cluster1, cluster2): """ 合并两个聚类簇 """ merged_cluster = {} merged_cluster['points'] = cluster1['points'] + cluster2['points'] merged_cluster['centroid'] = np.mean(merged_cluster['points'], axis=0) return merged_cluster def chameleon_clustering(points, k, threshold): """ 变色龙聚类算法 """ # 初始化聚类簇 clusters = [{'points': [p], 'centroid': p} for p in points] # 直到只剩下k个聚类簇为止 while len(clusters) > k: # 查找最近的两个聚类簇 min_distance = float('inf') nearest_clusters = None for i in range(len(clusters)): for j in range(i+1, len(clusters)): d = distance(clusters[i]['centroid'], clusters[j]['centroid']) if d < min_distance: min_distance = d nearest_clusters = (clusters[i], clusters[j]) # 如果最近距离小于阈值,则合并这两个聚类簇 if min_distance <= threshold: clusters.remove(nearest_clusters[0]) clusters.remove(nearest_clusters[1]) merged_cluster = merge_clusters(nearest_clusters[0], nearest_clusters[1]) clusters.append(merged_cluster) # 返回聚类结果 labels = np.zeros(len(points), dtype=int) for i, cluster in enumerate(clusters): for point in cluster['points']: labels[np.where((points==point).all(axis=1))] = i return labels ``` 使用示例: ``` import matplotlib.pyplot as plt # 生成随机数据 np.random.seed(0) points = np.random.randn(100, 2) # 聚类 labels = chameleon_clustering(points, k=5, threshold=0.5) # 可视化聚类结果 plt.scatter(points[:, 0], points[:, 1], c=labels) plt.show() ``` 其中,`points`是一个二维数组,每一行代表一个数据点;`k`是聚类簇的个数;`threshold`是合并聚类簇的阈值。 ### 回答2: 变色龙聚类算法,也被称为颜色连通算法,是一种无监督学习的聚类算法。它是基于样本之间的相似性进行聚类的方法。 变色龙聚类算法的原理是,将样本分布空间看作是一个图,将样本点表示为图上的节点。算法的目标是将相似的节点(样本)合并到同一个聚类中,而不相似的节点则分到不同的聚类。 算法的基本步骤如下: 1. 首先,将每个样本点都看作一个独立的聚类。 2. 计算每一对样本点之间的相似性,常用的相似性度量方法有欧氏距离、曼哈顿距离等。 3. 选择相似性最高的一对样本点,将它们合并到同一个聚类中。 4. 更新其他样本点与新聚类的相似性。 5. 重复步骤3和步骤4,直到满足停止条件。 在每次合并节点时,会计算新的聚类的特征值,用于更新其他样本点与新聚类的相似性。特征值通常使用样本点的颜色信息,例如RGB值,即变色龙聚类算法的由来。 Python中可以使用相应的数据处理和聚类库来实现变色龙聚类算法,例如使用numpy库进行矩阵计算,使用scipy库进行相似性计算,使用sklearn库进行聚类模型的构建和训练。 总之,变色龙聚类算法是一种有效的聚类方法,通过计算样本点之间的相似性来划分聚类,能够在无监督学习的场景中应用。在Python中,可以利用相应的库来实现这一算法。 ### 回答3: 变色龙聚类算法是一种基于社交网络数据的聚类算法,也称为社交网络聚类算法。在Python中,可以使用各种库和工具来实现变色龙聚类算法变色龙聚类算法的核心概念是社交网络中的节点之间的相似度和社交影响力。该算法通过计算节点之间的相似度和社交影响力来划分节点的社区,并将具有相似度和社交影响力的节点聚类在一起。 在Python中,可以使用numpy、scipy和networkx等库来进行变色龙聚类算法的实现。首先,需要构建一个社交网络的图结构,其中节点代表个体,边表示节点之间的关系。 然后,可以使用变色龙聚类算法的步骤来实现算法。首先,根据节点之间的相似度计算节点之间的邻接矩阵。然后,根据节点之间的社交影响力计算节点的初始社区标签。 接下来,通过迭代计算节点的社区标签,直到收敛为止。在每一次迭代中,需要更新节点的社区标签,同时考虑节点的相似度和邻居节点的社区标签。最终,可以得到对节点的聚类结果。 在Python中,可以使用numpy库来进行矩阵运算和数值计算,使用networkx库来构建图结构和进行图操作,使用scipy库来进行矩阵运算和科学计算。 总而言之,变色龙聚类算法可以在Python中通过使用相关的库和工具来实现。通过计算节点之间的相似度和社交影响力,可以将节点聚类在一起,从而得到社交网络的聚类结果。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值