Spectral clustering (谱聚类)是一种比较现代的聚类方法,基于图的分割(Graph cut)。不同于k-means需要数据点分布在N维欧式空间,谱聚类只需要知道数据点之间的相似性矩阵,就可进行运算,而不需要数据必须来自欧式空间。
谱聚类通过对于由数据相似性矩阵出发构造的数据Laplacian矩阵进行谱分解,实现数据降维,即实现在新的低维特征空间中,数据可分度提高。
维基百科中对于谱分解的定义如下:
线性代数中,特征分解(Eigendecomposition),又称谱分解(Spectral decomposition)是将矩阵分解为由其特征值和特征向量表示的矩阵之积的方法。
为了更加透彻的理解谱聚类,首先大概介绍下特征值和特征向量相关知识。
维基百科中对于特征值和特征向量的定义如下:
N 维非零向量 v 是 N×N 的矩阵 A 的特征向量,当且仅当下式成立:
其中 λ 为一标量,称为 v 对应的特征值。也称v 为特征值λ 对应的特征向量。也即特征向量被施以线性变换 A 只会使向量伸长或缩短而其方向不被改变。
举一个例子(维基百科中蒙娜丽莎图像的例子),假设一幅图像只进行了左右翻转变换,则对于垂直方向,这个变换并没有使得向量的防线改变,而对于水平方向,变换使得向量方向发生了逆转。从而,垂直方向是一个特征值为1的特征向量;水平方向则是特征值为-1的特征向量(特征值的大小表明经过该变换后,特征向量缩放的大小)。
现在开始说明谱聚类的基本步骤:
1、谱聚类过程相当于是图划分的过程,对于给定相似性矩阵S的数据集,可以构造无向图Graph G = (V,E),其中V为数据点,E即为数据点之间的权值,满足较近的数据点权值越大。
2、构造加权邻接矩阵(weighted adjacency matrix)W,邻接矩阵的构造一般有3中方式,1)e-邻域图,即当数据点相似性小于给定阈值时,在邻接矩阵W中对应位置为0;2)k-近邻邻域图,即当数据点xi属于距离数据点xj的k个最近的点集时,邻接矩阵W中相应位置数据保持不变,否则等于0;3)全连接图,此时W = S。即认为Graph是全连接的。最终临街矩阵W满足w(i,j) = w(j,i), w(i,i) = 0。
3、构造对角阵D = diag(sum(W))。
4、构造Laplacian矩阵L = D - W。
5、计算L的特征值和特征向量,选择最小的几个特征值对应的特征向量作为数据特征,进行k-means,算法结束。
谱聚类算法相当于对原始数据进行降维后,然后在降维后的特征空间进行k-means,由于降维过程提高了数据的可分离性,使得最终的聚类效果相比k-means要好。同时不像k-means只能识别凸形状的数据集,而且存在局部极小问题,谱聚类通过与原始数据进行特征提取的方式,使得算法能识别任意形状的样本分布,同时保证收敛到全局最优解。(至于为什么收敛到全局最优解,以及为什么选择最小的特征值对应的特征向量,建议阅读文章A Tutorial on Spectral Clustering,里面有详细介绍)
一般对谱聚类的解释都是从图论的角度出发,前几天看到一篇文章,从简谐运动角度出发重新理解这个问题,觉得挺有意思,有兴趣的同学可以看下哈。
补充:相比k-means,谱聚类算法一般情况下都能取得更好的聚类效果,然后算法还有很多人为因素和不确定因素存在,例如图的构造过程,具体应该选择怎样的相似性测度,对Laplacian矩阵特征分解后,应该选择最小的几个特征向量来表示数据特征?等等。这些都是还没有理论化确定的问题。