本文将对谱聚类的知识进行一些总结。目的在于记录自己的学习经历,当作自己的笔记来写。写得不好的地方欢迎交流指正。谱聚类是一种非常流行的聚类算法,它不需要对簇的类型有很强的假设,可以聚类任何形状的数据。
一、简要介绍
由于网上有许多的关于谱聚类的介绍,所以我这里只是简要介绍一下谱聚类。聚类是一种对数据分析非常有用的工具,它是一种典型的无监督学习的方法它。将数据集合分为许多的簇,使得同一个簇中的元素具有高相似度,而不同簇之间的相似度则低。
谱聚类使用了关联矩阵的特征向量来进行聚类。是一种基于图论的聚类方法。
二、谱聚类理论知识
谱聚类算法利用了谱图切分的理论。我们假设有图G=<V,E>,V为图的顶点集,而集合中的每个顶点代表我们聚类的一个数据点。E为图的边集,每条边的权重为两个数据点的相关联的程度,权重越高,说明两个顶点之间相似度越高。G为一个无向带权图。我们的目标是将这个图G切分为多个不相交的子图,使得子图内有很高的相似度,而子图间相似度较低。那么我们现在就把聚类问题转换为Graph-cut问题。那么,切割的准则是什么呢?
我这里介绍三类切割准则:Minimum-cut、Normalized-cut、Multiway Normalized-cut。
(1)Minimum cut
我们先来考虑2路切分的问题,也就是把图切成两部分A,B。A∩B=空集,A∪B=V。把该图切割,也就意味着断开A与B之间的所有相连接的所有边。所以这种切分准则的定义为:
其中,s(p,q)为两个点之间的相似程度。那么如何去量化这一相似程度呢?一个非常常见的方法是高斯距离:
该准则最小化两个簇A、B之间的相似程度,以达到聚类的效果。但是存在一个问题:会出现切割不平衡的情况。即,只从集合V中切出一个顶点,如下图所示:
(该图来源于《Normalized Cuts and Image Segmentation》)
所以,这个并不是最好的准则。关于min-cut的求解,一般使用max-flow。具体的内容已经超越了本文的范围,有兴趣的同学可以去了解一下。
(2)Normalized cut
简称Ncut准则,该准则最先在《Normalized Cuts and Image Segmentation》中提出,它的准则定义为:
cut(A,B)与min-cut中的定义相同,而assoc(A,V)表示的是子集A中的点到集合V中点的所有edge的总和。定义如下:
这种准则解决了min-cut的弊端。极端情况下,如果只切出一个点的情况,假设集合B只包含一个点,那么assoc(B,V)的值与cut(A,B)的值将会非常接近,两者比值接近1,所以肯定不会是最小的Ncut值。由Ncut的定义可知,我们测量的是两个子集的不相关程度,那么是不是也可以测量各个子集的相关程度呢?带着这个问题,Shi和Malik提出了另一个准则,用来测量相关程度:
其中,assoc(A,A)和assoc(B,B)表示他们集合的edge的总和。要做到最优切分,我们当然要使子集内关联程度高,所以应该最大化Nassoc;也要使子集间关联程度低,所以应该最小化Ncut。那么该如何选择呢?两者皆可。可以证明,最大化Nassoc就相当于最小化Ncut,即二者是等价的关系。证明如下:、
由于证明比较简单,我这里就不做解释了。
(3)Multiway Normalized cut
我们上面提到了2路的切分,现在把这一准则推广到多路切分。准则如下:
其中,k为切分的簇数,是Ai的补集。。当k=2时,就变成了我们上面的Ncut。
(4)还有一些其他准则,如Average cut,Ratio cut,Min-max cut等。这里不再一一叙述。
上述的所有准则,我们将其最小化都是一个N-P hard问题。那么该如何将其最小化呢?一种可选的方法是放松约束,将原问题转换为解决拉普拉斯矩阵的问题。这将得到一个近似的最优解。所以,该方法称为谱聚类的原因也是因为这里会用到特征值分解,拉普拉斯矩阵的特征值就被称为谱。我们在这里定义一个关于集合V的指示向量:
最后的划分即为图拉普拉斯矩阵的第二小特征向量。(注:关于为什么是第二小的特征向量,为什么是拉普拉斯矩阵,求解过程是什么等问题,我将统一在下一篇文章中解释)
三、谱聚类算法
(1)前期准备。给定一个数据即X.两点之间的weight可以表示为Sij:
由Sij组成的NXN的矩阵称为相似度矩阵W,我们将顶点vi的度定义为:所有和vi相连顶点weight的总和。由此我们可以得到度矩阵D:
其中,。即对W矩阵中的第i行(或者列)求和。自此,我们得到了拉普拉斯矩阵L=D-W
有很多的谱聚类算法,他们的不同之处在于如何去选择目标函数以及如何构造拉普拉斯矩阵(相似矩阵的构造有很多种,如全连接、k近邻、阈值法等)。但是所有的算法都有一个相同的框架:
a.根据给定的数据构造一个图矩阵,不同情况有不同的方法。
b.解除矩阵的前k个特征向量并以此构造新的特征空间。
c.通过一些聚类算法(如k-means)来聚类特征空间中的特征向量。
下面我将简要介绍三种典型的谱聚类算法。
(2)SM Algorithm。该算法是有Shi and Malik在Normalized cut and image segment一文中提出的。最小化Ncut可以被描述为:
这里的x表示种类,只能去1或者-1。我们可以通过放松x的约束到实数来找到一个近似解。这个目标函数可以通过瑞利熵(Rayleigh quotient)来求解。然后,问题就转换为解第二小特征值的问题。我们解出来的特征值对应的特征向量就是我们聚类的结果。虽然解出来的是实数值,但是我们不关心他们的具体数值,只关心它的正负号(或者大于还是小于均值)即可。
(3)NJW Algorithm
该算法同时使用了k个特征向量,因为使用更多的特征向量可以得到更好的结果。该算法的大致步骤为:
a.计算相似度矩阵S和度矩阵D,计算归一化拉普拉斯矩阵:
b.计算出L的前k个特征向量v1,,,,vk
c.使用v1,v2,,,vk这k个列向量去构造矩阵Q。Q为NxK
d.对于矩阵Q的每一行,将其归一化到1,即:
e.重新构建n个向量r,ri为Q的第i行
f.使用经典的聚类算法对上面的n个向量r进行聚类,最后得出C1,C2,,,Ck个簇。
(3)Markov Random walks
马尔科夫随机游走是从一种不同的视角来看待谱聚类,它使用的是概率模型来解决谱方法问题。随机游走在图中可以解释为,随机的从一个节点跳到另外一个节点。谱聚类可以被解释为寻找一种图切分,使得随机游走在同一个簇中待很长时间,几乎不会游走到其他簇中去。
构建随机转移矩阵,我们发现,其实矩阵P就是归一化之后的S,P中每一行的和为1。所以Pij就是从vi跳到vj的概率。算法流程与最开始给的框架相似,这里不再多说。值得注意的是,随机游走解出来的应该是第二大的特征值对应的特征向量,而不是第二小。
关于随机游走算法更具体的解释,请参考《A Random Walks View of Spectral Segmentation》,其中还从另外一个方面说明了为什么Ncut算法要取第二小特征值对应的特征向量。
四、困难点
(1)如何合理构造相似矩阵和拉普拉斯矩阵。
(2)如何决定参数,如簇的数量和sigma的值。
(3)大规模数据的计算问题。