基本思想:
Chameleon 算法没有固定的模型,它动态的考察自身和其他簇,然后动态的适应、合并簇。
回忆一下,聚类算法只要考察的两点:
(1) 簇中元素的连接情况
(2) 簇与簇之间的邻近性
当且仅当合并后的结果簇,与原来的两个簇的形状与连接结构极为相似时,即合并后的结果簇与自己的局部具有自相似性时,此情形下合并这两个簇。
通过考虑集群的连通性以及紧密性来决定最相似的两子簇,它使用了一种新颖的方法来对每一对簇之间的连通性和紧密度进行建模,从而考虑到集群本身的内部特征。因此,它不依赖于静态用户提供的模型,并且能够自动适应集群的内部特性。
簇的互联性可以用相对互联度(RI)来量化
簇的邻近性考虑更多的是簇与簇之间的近似性,用相对近似度(RC)指标量化
算法流程
(1)使用 KNN 算法将数据点与其最近 K 个点相连,建立连接边,将距离的倒数作为连接边权重。
(2)使用Metis算法,迭代选取当前点数最多的子簇作为输入,将输入子簇分割为两个子簇,使得两子簇点数相近且被切断连接边权重和最小。当子簇点数最大值小于设定值时,进入下一步。
(3)计算子簇两两间相对连接度与相对紧密度,并以此计算子簇间相似度,迭代选取相似性最大两子簇合并,直到簇类数量达到设定值或相似性最大值小于设定值时结束
改进算法
chameleon改进一:一种 CHAMELEON 改进算法2017
单纯提高了运算效率
1、分割簇不再利用复杂度高的hMetis,而是用kmeans,定大一点的K值,进行预处理。得到K个小簇。尽管kmeans受初始中心影响大,但是只要定大一点的K值,就可以近似代替hMetis算法得到的最优分割子簇。毕竟h算法分割的也不一定是最优中心。
2、chameleon算法在合并簇时,是对所有簇都进行两两计算。离得远的就没有必要了,本来就不挨着,计算出来也没用。所以本文采用“网格结构”,所谓网格结构,就是说kmeans预处理数据时,“每点按网格向外搜索找到最近的聚类中心”,对找到的聚类中心进行记录,确保知道谁与谁离得最近。这样远的,后面合并的时候就不用计算了。
chameleon改进二:Study of chameleon clustring algorithm 2017
chameleon局限性:chameleon的动态模型着力于子簇的合并,如果子簇分割的不好,则在后期合并过程中,即使合并错误,也不会再次拆开,而一错再错下去。
1、基于SK-Means的chameleon改进
中心思想和上一篇论文一样,都是通过kmeans简化metis割图部分。
区别在于:进行了两次kmeans聚类过程。
(1)先随机抽样,对多个样本进行一次kmeans,得到多个初始中心
(2)将多个初始中心合并为一个集合,进行二次kmeans聚类
(3)对比选择最优解决方案
2、基于dpc的chameleon改进
通过dpc找到初始中心,然后划分小簇。
chameleon代码请点击此处