转自:谱聚类(spectral clustering)原理总结 - 刘建平Pinard - 博客园
本文对其中的难懂的地方做一些备注
谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也不复杂。在处理实际的聚类问题时,个人认为谱聚类是应该首先考虑的几种算法之一。下面我们就对谱聚类的算法原理做一个总结。
1. 谱聚类概述
谱聚类是从图论中演化出来的算法,后来在聚类中得到了广泛的应用。它的主要思想是把所有的数据看做空间中的点,这些点之间可以用边连接起来。距离较远的两个点之间的边权重值较低,而距离较近的两个点之间的边权重值较高,通过对所有数据点组成的图进行切图,让切图后不同的子图间边权重和尽可能的低,而子图内的边权重和尽可能的高,从而达到聚类的目的。
乍一看,这个算法原理的确简单,但是要完全理解这个算法的话,需要对图论中的无向图,线性代数和矩阵分析都有一定的了解。下面我们就从这些需要的基础知识开始,一步步学习谱聚类。
其中:指示向量hj 是每一个子图对应一个指示向量,,为k个子图对应的指示向量,每一个指示向量都是n维的,因为有n个样本数。
这儿我们需要理解一下每个对应的结构,我们理解
有n位元素,每个数值代表这个元素是否在
的子图中,而每一个元素都只能在一个子图中,所以
的结构类似如下(对于5个样本,2个子图的结构):
第1,2个样本属于,所以
的第1,2位置的数不为0,第3,4个样本属于
,所以
的第3,4位置的数不为0,每一行只有一个元素不为0,其余的都为0。
对的理解:
为一个K X K维单位矩阵,其中K为K个子图
,为n X K 维矩阵,由于每行只有一个数不为0,所以
每行与每行相乘,只有自己与自己相乘的时候为1,这也就得到了
谱聚类的实现:用scikit-learn学习谱聚类 - 刘建平Pinard - 博客园
轮廓系数(silhouette coefficient) 结合了凝聚度和分离度,其计算步骤如下:
对于第 i 个对象,计算它到所属簇中所有其他对象的平均距离,记 ai (体现凝聚度)
对于第 i 个对象和不包含该对象的任意簇,计算该对象到给定簇中所有对象的平均距离,记 bi (体现分离度)
第 i 个对象的轮廓系数为 si = (bi-ai)/max(ai, bi)
从上面可以看出,轮廓系数取值为[-1, 1],其值越大越好,且当值为负时,表明 ai<bi,样本被分配到错误的簇中,聚类结果不可接受。对于接近0的结果,则表明聚类结果有重叠的情况。可以使用该系数检测分类结果是否可接受