最近由于研究需要,学习了谱聚类算法。大致是先在CSDN上对算法有个全局的认识,然后在B站上看了点视频加深认识,最后在谷歌学术上找了一些论文加以巩固理论基础。本文不含大量数学公式,但严格按照算法的原理讲解,比较适合初学者阅读,相信等读者基本了解算法的原理后再看数学公式推导效果会更好。
1.1、聚类:首先我们知道聚类属于机器学习中的无监督学习,我们用作训练的数据是不带标签的,所以能做的事情就是把相似的数据放在一起,形成一个簇。人类可以轻而易举的按照自己的标准(算法)将相似的数据聚在一起;至于机器衡量数据相似性的标准则为距离,需要注意的是对于不同的任务这个距离的定义可能有所不同。
1.2、谱聚类目标:由于两个数据彼此的相似度是一样的,故可将数据 x i x_{i} xi视为无向图G(V,E)中的顶点 v i v_{i} vi,并按照顶点之间的距离设置连接两个顶点的边权重 w i j w_{ij} wij,两个顶点距离越远 w i j w_{ij} wij越小或为0(相似度低),距离越近则 w i j w_{ij} wij越大(相似度高),并设置 w i i w_{ii} wii = 0。我们的目标是找到一种切图方式(切分每个点到它该在的簇中),使得切完图后,每个子图(簇)内边权重值之和尽量大,子图间边权重值之和尽量小,进而达到聚类的目的。
由上面可以看出谱聚类的目标很简单,但为了达到好的聚类效果,建模会比较复杂,比如后面会提到的N-cut优化问题,它的真实值求解就是一个NP-hard问题,不过可以构造归一化拉普拉斯矩阵,通过求解原问题的松弛版本,达到近似求解的目的,我们会用到瑞利-里茨定理,而使用这个定理需要求解拉普拉斯矩阵的特征值及其对应的特征向量。我们知道矩阵的谱为其特征值,我想这大概是其称为谱聚类的原因吧,只是个人理解。不过需要指出的是我们求的是拉普拉斯矩阵最小的几个特征值对应的特征向量,这些特征向量包含着原始每个数据属于哪个簇,后面会具体讲解。
1.1、概述:邻接矩阵W是根据边权重值构建的,根据我们上文提到的思想,首先要使用距离刻画无向图中顶点之间的相似性,这要求我们使用的相似度函数要能保证距离近的两点之间的函数值(边权重值)大,距离远的两点之间的函数值小或者为0(不相似),不难发现W必为对称矩阵,即 w i j w_{ij} wij = w j i w_{ji} wji。具体实践的时候,为了加速计算,邻接矩阵通常是稀疏的,所以邻接矩阵实际上是对局部数据进行建模。
1.2、构建邻接矩阵的不同方法: ε-neighborhood;k-nearest neighbor;fully connected。
1.2.1、ε-neighborhood法:这种方法不常用。此方法设定两点之间的欧氏距离小于阈值ε时, w i j w_{ij} wij = w j i w_{ji} wji = ε,否则 w i j w_{ij} wij = w j i w_{ji} wji = 0,该方法的设定也是为了使其具有相似度函数的特征,但是两点之间的距离要么是0要么是ε,这个相似度的刻画显然不太符合我们的要求。可以发现由该方法构造的邻接矩阵是稀疏的,尤其是当ε很小的情况下,此时适用于大型数据集,但精确性可能不高。
1.2.2、k-nearest neighbor法:对数据集采用KNN算法,如果 v j v_{j} vj是 v i v_{i} vi的k近邻,则两点之间的边权重值 w i j = e x p ( − ∥ x i − x j ∥ 2 2 σ 2 ) w_{ij} = exp(- \frac{\left\|xi - xj\right\|_2 }{2σ^2}) wij=exp(−2σ2∥xi−xj∥2),否则 w i j w_{ij} wij = 0。但仅按照这种思想是不行的,因为构造出来的相似度矩阵可能不对称,这是由于KNN算法本身造成的。也就是说, v j v_{j} vj是 v i v_{i} vi的k近邻 ,但 v i v_{i} vi不一定是 v j v_{j} vj的k近邻,即 w i j w_{ij} wij不一定等于 w j i w_{ji} wji,这不符合邻接矩阵的特征。可用两种方法来弥补,第一种是如果 v i v_{i} vi和 v j v_{j} vj其中之一是对方的K近邻,那么设置 w i j w_{ij} wij = w j i w_{ji} wji = e x p ( − ∥ x i − x j ∥ 2 2 σ 2 ) exp(- \frac{\left\|xi - xj\right\|_2 }{2σ^2}) exp(−2σ2∥xi−xj∥2),否则 w i j w_{ij} wij = w j i w_{ji} wji = 0;第二种是 v i v_{i} vi和 v j v_{j} vj必须都为对方的K近邻时才设置 w i j w_{ij} wij = w j i w_{ji} wji = e x p ( − ∥ x i − x j ∥ 2 2 σ 2 ) exp(- \frac{\left\|xi - xj\right\|_2 }{2σ^2}) exp(−2σ2∥xi−xj∥2),否则 w i j w_{ij} wij = w j i w_{ji} wji = 0。
1.2.3、fully connected法:将图中的任意两点之间的边权重值 w i j w_{ij} wij都大于零,由于相似度函数关键是要对局部数据进行建模,可以发现高斯核函数满足这个要求,可令 w i j = e x p ( − ∥ x i − x j ∥ 2 2 σ 2 ) w_{ij} = exp(- \frac{\left\|xi - xj\right\|_2 }{2σ^2}) wij=exp(−2σ2∥xi−xj∥2),这里的参数σ和ε-neighborhood法中的ε作用一致,其控制着局部数据的宽度。在实践中这种方法是最常用的。
2.1、Part1部分完成了对数据相似度的刻画,根据谱聚类的思想,我们最后需要完成的是找到合适的切图方式,将原图中n个顶点切成k个簇。使得切图后簇间边权重值之和尽量小,簇内边权重值之和尽量大,这两个要求是等价的,我们满足其一即可,一般选择最小化簇间边权重值之和。
2.2、考虑两个不相交的子图A,B ⊂ \subset ⊂ V,定义cut(A,B) = ∑ i ∈ A , j ∈ B w i j \sum\limits_{i\in A,j\in B}w_{ij} i∈A,j∈B∑wij,如果能使得cut(A,B)最小,那么可以认为切图后使得A、B两个簇的簇间边权重值之和最小。而对应于图中的k个子图 A 1 , A 2 , . . . , A k A_1,A_2,...,A_k A1,A2,...,Ak,定义cut( A 1 , A 2 , . . . , A k A_1,A_2,...,A_k A1,A2,...,Ak) = ∑ i = 1 k \sum\nolimits_{i=1}^{k} ∑i=1kcut( A i , A ˉ i A_i,\bar A_i Ai,Aˉi),其中 A ˉ i \bar A_i Aˉi为 A i A_i Ai在V中的补集。
2.2.1、切图方案一: 同样可以minimizecut( A 1 , A 2 , . . . , A k A_1,A_2,...,A_k A1,A2,...,Ak),使得簇间边权重值之和最小,这种方案比较容易求解,但是往往得不到好的结果。比如在划分图为两个簇的情况下,这种方法会将图中离其他点很远的一个点划成一个簇,剩余其它点为一个簇,这显然不是我们想要的结果。实践中一般采用下面的两种方案之一。
2.2.2、切图方案二: 在最小化簇间边权重值之和的同时,考虑使得每个簇内的顶点个数尽可能的"平衡",也称这个方案为RatioCut,其数学表示为minimize ∑ i = 1 k \sum\nolimits_{i=1}^{k} ∑i=1k c u t ( A i , A ˉ i ) ∣ A i ∣ \frac{cut(A_i,\bar A_i)}{\vert A_i\vert} ∣Ai∣cut(Ai,Aˉi),其中 ∣ A i ∣ \vert A_i\vert ∣Ai∣为子图 A i A_i Ai中点的个数。但是,这种思想的引入也使得原来易解的问题变成了NP-hard。在Part3中具体讲怎么近似求解。
2.2.3、切图方案三: 方案二中衡量簇的大小是通过顶点的个数实现的,然而集合中顶点的个数多并不一定代表这个集合划分的好,我们关键还是要看集合中各点之间的相似度是否足够的高,所以可以从边权重的角度来确定簇的大小。对于任意一个子图A,定义vol(A) = ∑ i ∈ A ∑ j = 1 n w i j \sum\limits_{i\in A}\sum\limits_{j=1}^{n}w_{ij} i∈A∑j=1∑nwij,其中 i ∈ A i\in A i∈A表示子图 A A A中的顶点的下标,即 { i ∣ v i ∈ A } \{i|v_i\in A\} {i∣vi∈A}。然后可以通过minimize ∑ i = 1 k \sum\nolimits_{i=1}^{k} ∑i=1k c u t ( A i , A ˉ i ) v o l ( A i ) \frac{cut(A_i,\bar A_i)}{vol(A_i)} vol(Ai)cut(Ai,Aˉi)保证方案三得以实现,称这种方案为Normalized cut(N-cut)。与方案二相同,这种方法也使得优化问题变成了NP-hard。在Part3中具体讲怎么近似求解。
3.1、由Part2中我们知道无论是RatioCut还是N-cut,都无法得到原优化问题的精确解。但可采用谱聚类的思想来解决原优化问题的松弛版本,具体方法是构造拉普拉斯矩阵,根据瑞利-里茨定理,可通过求解拉普拉斯矩阵的某些特征值对应的特征向量来近似求解。
3.2、非归一化拉普拉斯矩阵定义为L = D - W,其中度矩阵D是将 d 1 , d 2 , . . . , d n d_1,d_2,...,d_n d1,d2,...,dn放置在对角线上组成的对角矩阵,而 d i = ∑ j = 1 n w i j d_i = \sum\nolimits_{j = 1}^{n}w_{ij} di=∑j=1nwij,W为邻接矩阵。
3.3、