谱聚类是利用相似矩阵的分类方法。涉及到的理论方法有:图论概念,Laplacian矩阵,谱定理,瑞利商以及kmeans聚类。
优点:通过特征分解,可以获得聚类判据在放松了的连续域中的全局最优解。与其他算法相比,它不仅思想简单、易于实现、不易陷入局部最优解,而且具有识别非凸分布的聚类能力,非常适合于许多实际问题。
A.相关概念
1. 从拓扑空间开始,一步步往上加定义,可以形成很多空间。线形空间其实还是比较初级的,如果在里面定义了范数,就成了赋范线性空间。赋范线性空间满足完备性,就成了巴那赫空间;赋范线性空间中定义角度,就有了内积空间,内积空间再满足完备性,就得到希尔伯特空间。
2. Hermite阵(共轭矩阵)是正规阵,因此Hermite阵可被酉对角化,而且得到的对角阵的元素都是实数。这意味着Hermite阵的特征值都是实的,而且不同的特征值所对应的特征向量相互正交。
3.
4. 谱定理给出了算子或者矩阵可以对角化的条件(也就是可以在某个基底中用对角矩阵来表示)。
5. n阶复方阵U的n个列向量是U空间的一个标准正交基,则U是酉矩阵(Unitary Matrix)
B. 算法流程
1. 根据相似矩阵W构造加权无向图G=(V,E),V中的顶点表示相似矩阵的样本,E是样本之间的关系,每条边的权值代表相似性度量值;
2. 求图G的Laplacian矩阵L,L=D-W。D为对角矩阵;
3. 对矩阵L求特征值与特征向量,取前k个最小的特征值的特征向量;
4. 将上一步算出的k个特征向量组成N*k的矩阵,并以矩阵行为样本进行kmeans聚类,每行被聚成的类别即为原来样本的类别。
C. 问题定义
谱聚类问题即是一个图割问题,设将顶点集V分割为A,B两个集合,cut(A,B)表示分割的代价,需要求cut(A,B)最小化,问题定义如下:
以上为最小割情况,但容易分割出孤立点,即数据倾斜情况,所以有以下两种比例割和正规割情况:
定义一个向量f,f代表图G的一种分割情况,其中元素定义如下:
可以把图割问题变换为最优化问题,即求解下式最小值时候的解f:
限制条件:,f为整数解。
上式都可以变换为三种分割公式,以下用比例割的推演进行说明:
D. 问题求解
利用瑞利商原理进行求解。
以上问题最优化公式可表示为瑞利商,
对于聚类k=2的情况,L的最小特征值即为的最小值,相应的特征向量为连续的最优解f,但是由于L为半正定阵,特征值有可能有0,相应的特征向量也为0,所以一般取第二小特征值作为最小值。再将特征向量进行k-means聚类聚成到2类或者利用阈值划分成2类,即为离散最优解。
对于聚类k>2的情况,则取最小的k个特征值,其相应的k个特征向量即为连续的最优解。根据共轭矩阵的特性可知这k个向量是相互正交的,利用k=2中的方法转换之后的k个离散最优解覆盖整个顶点集,且不相交。
图G的Laplacian矩阵L是Hermite阵(共轭矩阵)即正规矩阵,Hermite阵可被酉对角化,而且得到的对角阵的元素都是实数。这意味着Hermite阵的特征值都是实的,而且不同的特征值所对应的特征向量相互正交。
E. 代码
matlab代码:
function idx = spectral_clustering(W, k)
D = diag(sum(W));
L = D-W;
opt = struct('issym', true, 'isreal', true);
[V dummy] = eigs(L, D, k, 'SM', opt);
idx = kmeans(V, k);
end