谱聚类(spectral clustering)原理总结

谱聚类(spectral clustering)原理总结

谱聚类对数据分布的适应性更强,聚类效果优秀,同时聚类的计算量小且实现起来不复杂。
引用文章链接:https://blog.csdn.net/yc_1993/article/details/52997074

等周长问题:具体为如何在给定长度的线条下围出一个最大的面积,也可理解为,在给定面积下如何使用更短的线条,而这,也正是谱图聚类想法的端倪,如何在给定一张图,拿出“更短”的边来将其“更好”地切分。而这个“更短”的边,正是对应了spectral clustering中的极小化问题,“更好”地切分,则是对应了spectral clustering中的簇聚类效果。

1、谱聚类概述

​ 谱聚类是从图论中演化出来的算法,后来在聚类中得到了广泛的应用。

主要思想是把所有的数据看做空间中的点,这些点之间可以用边连接起来。距离较远的两个点之间的边权重值较低,而距离较近的两个点之间的边权重值较高,通过对所有数据点组成的图进行切图,让切图后不同的子图间边权重和尽可能的低,而子图内的边权重和尽可能的高,从而达到聚类的目的。

乍一看,这个算法原理的确简单,但是要完全理解这个算法的话,需要对图论中的无向图,线性代数和矩阵分析都有一定的了解。下面我们就从这些需要的基础知识开始,一步步学习谱聚类。

spectral clustering的优点主要有以下:
  1. 过程对数据结构并没有太多的假设要求
  2. 可以通过构造稀疏Similarity Graph,使得对于更大的数据集表现出明显优于其他算法的计算速度。
  3. 由于Spectral Clustering是对图切割处理,不存在像Kmeans将离散的小簇聚合在一起的情况。
  4. 无需像GMM一样对数据概率分布做假设。

2. 谱聚类基础之一:无向权重图

由于谱聚类是基于图论的,因此我们首先温习下图的概念。

对于一个图 G G G我们一般用点的集合 V V V和边的集合 E E E来描述。即为 G ( V , E ) G(V,E) G(V,E),其中 V V V即为数据集里面所有的点 ( v 1 , v 2 , . . . , v n ) ({{v}_{1}},{{v}_{2}},...,{{v}_{n}}) (v1,v2,...,vn)。对于 V V V中的任意两个点,可以有边连接,也可以没有边连接。我们定义权重 w i j {{w}_{ij}} wij为点 v i {{v}_{i}} vi和点 v j {{v}_{j}} vj由于我们是无向图,所以 w i j = w j i {{w}_{ij}}={{w}_{ji}} wij=wji。对于有边连接的两个点 v i {{v}_{i}} vi v j {{v}_{j}} vj, w i j > 0 {{w}_{ij}>0} wij>0,对于没有边连接的两个点 v i {{v}_{i}} vi v j {{v}_{j}} vj, w i j = 0 {{w}_{ij}=0} wij=0。对于图中的任意一个点 v i {{v}_{i}} vi它的度 d i {{d}_{i}} di定义为和它相连的所有边的权重之和,即:

d i = ∑ j = 1 n w i j {{d}_{i}}=\sum\limits_{j=1}^{n}{{{w}_{ij}}} di=j=1nwij

利用每个点度的定义,我们可以得到一个nxn的度矩阵 D D D它是一个对角矩阵,只有主对角线有值,对应第i行的第i个点的度数,定义如下: D = ( d 1 … … … d 2 … ⋮ ⋮ ⋱ … … d n ) D=\left( \begin{matrix} {{d}_{1}} & \ldots & \ldots \\ \ldots & {{d}_{2}} & \ldots \\ \vdots & \vdots & \ddots \\ \ldots & \ldots & {{d}_{n}} \\ \end{matrix} \right) D=d1d2dn

利用 所有点之间的权重值,我们可以得到图的邻接矩阵 W W W,它也是一个 n ∗ n n*n nn的矩阵,第i行的第j个值对应我们的权重 w i j {}{{w}_{ij}} wij除此之外,对于点集 V V V的的一个子集 A ⊂ V A⊂V AV,我们定义:

∣ A ∣ |A| A:子集A中点的个数 v o l ( A ) = ∑ i ∈ A   d i vol(A)=\underset{i\in A}{\mathop{\sum }}\,{{d}_{i}} vol(A)=iAdi

3. 谱聚类基础之二:相似矩阵

对于邻接矩阵 W W W,它是由任意两点之间的权重值 w i j {{w}_{ij}} wij

组成的矩阵。通常我们可以自己输入权重,但是在谱聚类中,我们只有数据点的定义,并没有直接给出这个邻接矩阵,那么怎么得到这个邻接矩阵呢?

基本思想,距离较远的两个点之间的边权重值较低,而距离较近的两个点之间的边权重值较高,不过这仅仅是定性,我们需要定量的权重值。一般来说,我们可以通过样本点距离度量的相似矩阵 S S S来获得邻接矩阵 W W W

构建邻接矩阵 W W W的方法有三类。 ϵ − ϵ- ϵ邻近法,K邻近法和全连接法。

对于 ϵ − ϵ- ϵ邻近法,它设置了一个距离阈值 ϵ ϵ ϵ然后用欧式距离 S i j {{S}_{ij}} Sij度量任意两点 x i 和 {{x}_{i}}和 xi x j {{x}_{j}} xj的距离。即相似矩阵的 S i j = ∣ ∣ x i − x j ∣ ∣ 2 2 {{S}_{ij}}=||{{x}_{i}}-{{x}_{j}}||_{2}^{2} Sij=xixj22, 然后根据 S i j {{S}_{ij}} Sij ϵ ϵ ϵ的大小关系,来定义邻接矩阵 W W W如下:

w i j = { 0 s i j > ε ε s i j < ε {{w}_{ij}}=\left\{ \begin{matrix} 0 & {{s}_{ij}}>\varepsilon \\ \varepsilon & {{s}_{ij}}<\varepsilon \\ \end{matrix} \right. wij={0εsij>εsij<ε

从上式可见,两点间的权重要不就是 ϵ ϵ ϵ,要不就是0,没有其他的信息了。距离远近度量很不精确,因此在实际应用中,我们很少使用ϵ-邻近法。

第二种定义邻接矩阵 W W W的方法是K邻近法,利用KNN算法遍历所有的样本点,取每个样本最近的k个点作为近邻,只有和样本距离最近的k个点之间的 w i j > 0 {{w}_{ij}}>0 wij>0。但是这种方法会造成重构之后的邻接矩阵 W W W非对称,我们后面的算法需要对称邻接矩阵。为了解决这种问题,一般采取下面两种方法之一:

第一种K邻近法是只要一个点在另一个点的K近邻中,则保留 S i j {{S}_{ij}} Sij

w i j = w j i = { 0 x i ∉ K N N ( x j ) a n d x j ∉ K N N ( x i ) exp ⁡ ( − ∣ ∣ x i − x j ∣ ∣ 2 2 2 σ 2 ) x i ∈ K N N ( x j ) o r x j ∈ K N N ( x i ) {{w}_{ij}}={{w}_{ji}}=\left\{ \begin{matrix} 0 & {{x}_{i}}\notin KNN({{x}_{j}})and{{x}_{j}}\notin KNN({{x}_{i}}) \\ \exp (-\frac{||{{x}_{i}}-{{x}_{j}}||_{2}^{2}}{2{{\sigma }^{2}}}) & {{x}_{i}}\in KNN({{x}_{j}})or{{x}_{j}}\in KNN({{x}_{i}}) \\ \end{matrix} \right. wij=wji={0exp(2σ2xixj22)xi/KNN(xj)andxj/KNN(xi)xiKNN(xj)orxjKNN(xi)

第二种K邻近法是必须两个点互为K近邻中,才能保留 S i j {{S}_{ij}} Sij

w i j = w j i = { 0 x i ∉ K N N ( x j ) o r x j ∉ K N N ( x i ) exp ⁡ ( − ∣ ∣ x i − x j ∣ ∣ 2 2 2 σ 2 ) x i ∈ K N N ( x j ) a n d x j ∈ K N N ( x i ) {{w}_{ij}}={{w}_{ji}}=\left\{ \begin{matrix} 0 & {{x}_{i}}\notin KNN({{x}_{j}})or{{x}_{j}}\notin KNN({{x}_{i}}) \\ \exp (-\frac{||{{x}_{i}}-{{x}_{j}}||_{2}^{2}}{2{{\sigma }^{2}}}) & {{x}_{i}}\in KNN({{x}_{j}})and{{x}_{j}}\in KNN({{x}_{i}}) \\ \end{matrix} \right. wij=wji={0exp(2σ2xixj22)xi/KNN(xj)orxj/KNN(xi)xiKNN(xj)andxjKNN(xi)

第三种定义邻接矩阵 W W W的方法是全连接法,相比前两种方法,第三种方法所有的点之间的权重值都大于0,因此称之为全连接法。可以选择不同的核函数来定义边权重,常用的有多项式核函数,高斯核函数和Sigmoid核函数。最常用的是高斯核函数RBF,此时相似矩阵和邻接矩阵相同:

w i j = s i j = exp ⁡ ( − ∣ ∣ x i − x j ∣ ∣ 2 2 2 σ 2 ) {{w}_{ij}}={{s}_{ij}}=\exp (-\frac{||{{x}_{i}}-{{x}_{j}}||_{2}^{2}}{2{{\sigma }^{2}}}) wij=sij=exp(2σ2xixj22)

在实际的应用中,使用第三种全连接法来建立邻接矩阵是最普遍的,而在全连接法中使用高斯径向核RBF是最普遍的。

4. 谱聚类基础之三:拉普拉斯矩阵

单独把拉普拉斯矩阵(Graph Laplacians)拿出来介绍是因为后面的算法和这个矩阵的性质息息相关。它的定义很简单,拉普拉斯矩阵 L = D − W L=D−W L=DW

D D D即为我们第二节讲的度矩阵,它是一个对角矩阵。而 W W W即为我们第二节讲的邻接矩阵,它可以由我们第三节的方法构建出。

拉普拉斯矩阵有一些很好的性质如下:

  1. 拉普拉斯矩阵是对称矩阵,这可以由 D D D W W W都是对称矩阵而得。

  2. 由于拉普拉斯矩阵是对称矩阵,则它的所有的特征值都是实数。

  3. 对于任意的向量 f f f,我们有

    f T L f = 1 2 ∑ i , j = 1 n w i j ( f i − f j ) 2 {{f}^{T}}Lf=\frac{1}{2}\sum\limits_{i,j=1}^{n}{{{w}_{ij}}{{({{f}_{i}}-{{f}_{j}})}^{2}}} fTLf=21i,j=1nwij(fifj)2

    这个利用拉普拉斯矩阵的定义很容易得到如下:

    f T L f = f T D f − f T W f = ∑ i = 1 n d i f i 2 − ∑ i , j = 1 n w i j f i f j {{f}^{T}}Lf={{f}^{T}}Df-{{f}^{T}}Wf=\sum\limits_{i=1}^{n}{{{d}_{i}}{{f}_{i}}^{2}-}\sum\limits_{i,j=1}^{n}{{{w}_{ij}}{{f}_{i}}}{{f}_{j}} fTLf=fTDffTWf=i=1ndifi2i,j=1nwijfifj= 1 2 ( ∑ i = 1 n d i f i 2 − 2 ∑ i , j = 1 n w i j f i f j + ∑ j = 1 n d j f j 2 ) = 1 2 ∑ i , j = 1 n w i j ( f i − f j ) 2 \frac{1}{2}(\sum\limits_{i=1}^{n}{{{d}_{i}}{{f}_{i}}^{2}-}2\sum\limits_{i,j=1}^{n}{{{w}_{ij}}{{f}_{i}}{{f}_{j}}+}\sum\limits_{j=1}^{n}{{{d}_{j}}{{f}_{j}}^{2}})=\frac{1}{2}\sum\limits_{i,j=1}^{n}{{{w}_{ij}}{{({{f}_{i}}-{{f}_{j}})}^{2}}} 21(i=1ndifi22i,j=1nwijfifj+j=1ndjfj2)=21i,j=1nwij(fifj)2

  4. 拉普拉斯矩阵是半正定的,且对应的n个实数特征值都大于等于0,即 0 = λ 1 ≤ λ 2 ≤ . . . ≤ λ n 0={{\lambda }_{1}}\le {{\lambda }_{2}}\le ...\le {{\lambda }_{n}} 0=λ1λ2...λn

    且最小的特征值为0,这个由性质3很容易得出。

5. 谱聚类基础之四:无向图切图

对于无向图 G G G的切图,我们的目标是将图 G ( V , E ) G(V,E) G(V,E)切成相互没有连接的k个子图,每个子图点的集合为: A 1 , A 2 , . . . , A k {{A}_{1}},{{A}_{2}},...,{{A}_{k}} A1,A2,...,Ak,它们满足${{A}{i}}\cap {{A}{j}}=\varnothing $, A 1 ∪ A 2 ∪ . . . ∪ A k = V {{A}_{1}}\cup {{A}_{2}}\cup ...\cup {{A}_{k}}=V A1A2...Ak=V.

对于任意两个子图点的集合$A,B\subset V,A\cap B=\varnothing $我们定义A和B之间的切图权重为:

W ( A , B ) = ∑ i ∈ A , j ∈ B w i j W(A,B)=\sum\limits_{i\in A,j\in B}{{{w}_{ij}}} W(A,B)=iA,jBwij

那么对于我们k个子图点的集合: A 1 , A 2 , . . . , A k {{A}_{1}},{{A}_{2}},...,{{A}_{k}} A1,A2,...,Ak,我们定义切图cut为:

c u t ( A 1 , A 2 , . . . , A k ) = 1 2 ∑ i = 1 k W ( A i − A i ‾ ) cut({{A}_{1}},{{A}_{2}},...,{{A}_{k}})=\frac{1}{2}\sum\limits_{i=1}^{k}{W({{A}_{i}}-\overline{{{A}_{i}}})} cut(A1,A2,...,Ak)=21i=1kW(AiAi)

其中 A i ‾ \overline{{{A}_{i}}} Ai为AiAi的补集,意为除 A i {{A}_{i}} Ai子集外其他V的子集的并集。

那么如何切图可以让子图内的点权重和高,子图间的点权重和低呢?一个自然的想法就是最小化

c u t ( A 1 , A 2 , . . . , A k ) cut({{A}_{1}},{{A}_{2}},...,{{A}_{k}}) cut(A1,A2,...,Ak), 但是可以发现,这种极小化的切图存在问题

6. 谱聚类之切图聚类

为了避免最小切图导致的切图效果不佳,我们需要对每个子图的规模做出限定,一般来说,有两种切图方式,第一种是RatioCut,第二种是Ncut。下面我们分别加以介绍。

6.1 RatioCut切图

RatioCut切图为了避免第五节的最小切图,对每个切图,不光考虑最小化 c u t ( A 1 , A 2 , . . . , A k ) cut({{A}_{1}},{{A}_{2}},...,{{A}_{k}}) cut(A1,A2,...,Ak)cut(A1,A2,…Ak),它还同时考虑最大化每个子图点的个数,即:

R a t i o C u t ( A 1 , A 2 , . . . , A k ) = 1 2 ∑ i = 1 k W ( A i − A i ‾ ) ∣ A i ∣ RatioCut({{A}_{1}},{{A}_{2}},...,{{A}_{k}})=\frac{1}{2}\sum\limits_{i=1}^{k}{\frac{W({{A}_{i}}-\overline{{{A}_{i}}})}{|{{A}_{i}}|}} RatioCut(A1,A2,...,Ak)=21i=1kAiW(AiAi)

那么怎么最小化这个RatioCut函数呢?牛人们发现,RatioCut函数可以通过如下方式表示。

我们引入指示向量 h j ∈ { h 1 , h 2 , . . . , h k } , j = 1 , 2 , . . . . , k {{h}_{j}}\in \left\{ {{h}_{1}},{{h}_{2}},...,{{h}_{k}} \right\},j=1,2,....,k hj{h1,h2,...,hk},j=1,2,....,k.对于任意一个向量 h j {{h}_{j}} hj, 它是一个n维向量(n为样本数),我们定义 h i j {{h}_{ij}} hij:

h i j = { 0 v i ∉ A j 1 ∣ A j ∣ v i ∈ A j {{h}_{ij}}=\left\{ \begin{matrix} 0 & {{v}_{i}}\notin {{A}_{j}} \\ \frac{1}{\sqrt{|{{A}_{j}}|}} & {{v}_{i}}\in {{A}_{j}} \\ \end{matrix} \right. hij={0Aj 1vi/AjviAj

那么我们对于 h i T L h i {{h}_{i}}^{T}L{{h}_{i}} hiTLhi,有

h i T L h i = 1 2 ∑ m = 1 ∑ n = 1 w m n ( h i m − h i n ) 2 {{h}_{i}}^{T}L{{h}_{i}}=\frac{1}{2}\sum\limits_{m=1}{\sum\limits_{n=1}{{{w}_{mn}}}}{{({{h}_{im}}-{{h}_{in}})}^{2}} hiTLhi=21m=1n=1wmn(himhin)2 (1)

= 1 2 ( ∑ m ∈ A i n ∉ A i w m n ( 1 ∣ A i ∣ − 0 ) 2 + ∑ m ∉ A i n ∈ A i w m n ( 0 − 1 ∣ A i ∣ ) 2 ) =\frac{1}{2}\left( \sum\limits_{m\in {{A}_{i}}n\notin {{A}_{i}}}{{{w}_{mn}}{{(\frac{1}{\sqrt{|{{A}_{i}}|}}-0)}^{2}}+\sum\limits_{m\notin {{A}_{i}}n\in {{A}_{i}}}{{{w}_{mn}}{{(0-\frac{1}{\sqrt{|{{A}_{i}}|}})}^{2}}}} \right) =21(mAin/Aiwmn(Ai 10)2+m/AinAiwmn(0Ai 1)2) (2)

= 1 2 ( ∑ m ∈ A i n ∉ A i w m n 1 ∣ A i ∣ + ∑ m ∉ A i n ∈ A i w m n 1 ∣ A i ∣ ) =\frac{1}{2}\left( \sum\limits_{m\in {{A}_{i}}n\notin {{A}_{i}}}{{{w}_{mn}}\frac{1}{|{{A}_{i}}|}+\sum\limits_{m\notin {{A}_{i}}n\in {{A}_{i}}}{{{w}_{mn}}\frac{1}{|{{A}_{i}}|}}} \right) =21(mAin/AiwmnAi1+m/AinAiwmnAi1) (3)

= 1 2 ( c u t ( A i , A i ‾ ) 1 ∣ A i ∣ + c u t ( A i ‾ , A i ) 1 ∣ A i ∣ ) =\frac{1}{2}\left( cut({{A}_{i}},\overline{{{A}_{i}}})\frac{1}{|{{A}_{i}}|}+cut(\overline{{{A}_{i}}},{{A}_{i}})\frac{1}{|{{A}_{i}}|} \right) =21(cut(Ai,Ai)Ai1+cut(Ai,Ai)Ai1) (4)

= c u t ( A i , A i ‾ ) ∣ A i ∣ =\frac{cut({{A}_{i}},\overline{{{A}_{i}}})}{|{{A}_{i}}|} =Aicut(Ai,Ai) (5)

上述第(1)式用了上面第四节的拉普拉斯矩阵的性质3. 第二式用到了指示向量的定义。可以看出,对于某一个子图i,它的RatioCut对应于 h i T L h i {{h}_{i}}^{T}L{{h}_{i}} hiTLhi

那么我们的k个子图呢?对应的RatioCut函数表达式为:

R a t i o C u t ( A 1 , A 2 , . . . , A k ) = ∑ i = 1 k h i T L h i = ∑ i = 1 k ( H T L H ) i = t r ( H T L H ) RatioCut({{A}_{1}},{{A}_{2}},...,{{A}_{k}})=\sum\limits_{i=1}^{k}{{{h}_{i}}^{T}L{{h}_{i}}}=\sum\limits_{i=1}^{k}{{{({{H}^{T}}LH)}_{i}}}=tr({{H}^{T}}LH) RatioCut(A1,A2,...,Ak)=i=1khiTLhi=i=1k(HTLH)i=tr(HTLH)

其中 t r ( H T L H ) tr({{H}^{T}}LH) tr(HTLH)为矩阵的迹。

也就是说,我们的RatioCut切图,实际上就是最小化我们的 t r ( H T L H ) tr({{H}^{T}}LH) tr(HTLH)。注意到 H T H = I {{H}^{T}}H=I HTH=I,则我们的切图优化目标为:

arg ⁡ min ⁡ ⏟ H t r ( H T L H ) s . t . H T H = I \underbrace{\arg \min }_{H}tr({{H}^{T}}LH)\begin{matrix} s.t. & {{H}^{T}}H=I \\ \end{matrix} H argmintr(HTLH)s.t.HTH=I

注意到我们H矩阵里面的每一个指示向量都是n维的,向量中每个变量的取值为0或者 1 ∣ A j ∣ \frac{1}{\sqrt{|{{A}_{j}}|}} Aj 1,就有 2 n {{2}^{n}} 2n种取值,有k个子图的话就有k个指示向量,共有 k 2 n {{k2}^{n}} k2n种H,因此找到满足上面优化目标的H是一个NP难的问题。那么是不是就没有办法了呢?

注意观察 t r ( H T L H ) tr({{H}^{T}}LH) tr(HTLH)中每一个优化子目标 h i T L h i {{h}_{i}}^{T}L{{h}_{i}} hiTLhi,其中 h h h是单位正交基, L L L为对称矩阵,此时 h i T L h i {{h}_{i}}^{T}L{{h}_{i}} hiTLhi的最大值为 L L L的最大特征值,最小值是 L L L的最小特征值。如果你对主成分分析PCA很熟悉的话,这里很好理解。在PCA中,我们的目标是找到协方差矩阵(对应此处的拉普拉斯矩阵 L L L)的最大的特征值.

而在我们的谱聚类中,我们的目标是找到目标的最小的特征值,得到对应的特征向量,此时对应二分切图效果最佳。也就是说,我们这里要用到维度规约的思想来近似去解决这个NP难的问题。

对于 h i T L h i {{h}_{i}}^{T}L{{h}_{i}} hiTLhi,我们的目标是找到最小的L的特征值,而对于 t r ( H T L H ) = ∑ i = 1 k h i T L h i tr({{H}^{T}}LH)=\sum\limits_{i=1}^{k}{{{h}_{i}}^{T}L{{h}_{i}}} tr(HTLH)=i=1khiTLhi​,则我们的目标就是找到k个最小的特征值,一般来说,k远远小于n,也就是说,此时我们进行了维度规约,将维度从n降到了k,从而近似可以解决这个NP难的问题。

通过找到 L L L的最小的k个特征值,可以得到对应的k个特征向量,这k个特征向量组成一个nxk维度的矩阵,即为我们的 H H H。一般需要对 H H H矩阵按行做标准化,即:

h i j ∗ = h i j ( ∑ t = 1 k h i t 2 ) 1 2 h_{ij}^{*}=\frac{{{h}_{ij}}}{{{(\sum\limits_{t=1}^{k}{h_{it}^{2}})}^{\frac{1}{2}}}} hij=(t=1khit2)21hij

由于我们在使用维度规约的时候损失了少量信息,导致得到的优化后的指示向量 h h h对应的 H H H现在不能完全指示各样本的归属,因此一般在得到 n ∗ k n*k nk维度的矩阵 H H H后还需要对每一行进行一次传统的聚类,比如使用K-Means聚类.

6.2 Ncut切图

Ncut切图和RatioCut切图很类似,但是把Ratiocut的分母 ∣ A i ∣ |{{A}_{i}}| Ai换成 v o l ( A i ) vol(Ai) vol(Ai). 由于子图样本的个数多并不一定权重就大,我们切图时基于权重也更合我们的目标,因此一般来说Ncut切图优于RatioCut切图

N C u t ( A 1 , A 2 , . . . , A k ) = 1 2 ∑ i = 1 k W ( A i − A i ‾ ) v o l ( A i ) NCut({{A}_{1}},{{A}_{2}},...,{{A}_{k}})=\frac{1}{2}\sum\limits_{i=1}^{k}{\frac{W({{A}_{i}}-\overline{{{A}_{i}}})}{vol({{A}_{i}})}} NCut(A1,A2,...,Ak)=21i=1kvol(Ai)W(AiAi)

对应的,Ncut切图对指示向量 h h h做了改进。注意到RatioCut切图的指示向量使用的是 1 ∣ A i ∣ \frac{1}{\sqrt{|{{A}_{i}}|}} Ai 1标示样本归属,而Ncut切图使用了子图权重 1 v o l ( A i ) \frac{1}{\sqrt{vol({{A}_{i}})}} vol(Ai) 1来标示指示向量 h h h,定义如下:

h i j = { 0 v i ∉ A j 1 v o l ( A j ) v i ∈ A j {{h}_{ij}}=\left\{ \begin{matrix} 0 & {{v}_{i}}\notin {{A}_{j}} \\ \frac{1}{\sqrt{vol({{A}_{j}})}} & {{v}_{i}}\in {{A}_{j}} \\ \end{matrix} \right. hij={0vol(Aj) 1vi/AjviAj

那么我们对于 h i T L h i {{h}_{i}}^{T}L{{h}_{i}} hiTLhi,有: h i T L h i = c u t ( A i , A i ‾ ) v o l ( A i ) {{h}_{i}}^{T}L{{h}_{i}}=\frac{cut({{A}_{i}},\overline{{{A}_{i}}})}{vol({{A}_{i}})} hiTLhi=vol(Ai)cut(Ai,Ai)

推导方式和RatioCut完全一致。也就是说,我们的优化目标仍然是

N C u t ( A 1 , A 2 , . . . , A k ) = ∑ i = 1 k h i T L h i = ∑ i = 1 k ( H T L H ) i = t r ( H T L H ) NCut({{A}_{1}},{{A}_{2}},...,{{A}_{k}})=\sum\limits_{i=1}^{k}{{{h}_{i}}^{T}L{{h}_{i}}}=\sum\limits_{i=1}^{k}{{{({{H}^{T}}LH)}_{i}}}=tr({{H}^{T}}LH) NCut(A1,A2,...,Ak)=i=1khiTLhi=i=1k(HTLH)i=tr(HTLH)

但是此时我们的 H T H ≠ I {{H}^{T}}H\ne I HTH=I而且 H T D H = I {{H}^{T}}DH=I HTDH=I.推导如下:

h i T D h i = ∑ j = 1 n h i j 2 d j = 1 v o l ( A i ) ∑ j ∈ A i d j = 1 v o l ( A i ) v o l ( A i ) = 1 {{h}_{i}}^{T}D{{h}_{i}}=\sum\limits_{j=1}^{n}{{{h}_{ij}}^{2}{{d}_{j}}}=\frac{1}{vol({{A}_{i}})}\sum\limits_{j\in {{A}_{i}}}{{{d}_{j}}}=\frac{1}{vol({{A}_{i}})}vol({{A}_{i}})=1 hiTDhi=j=1nhij2dj=vol(Ai)1jAidj=vol(Ai)1vol(Ai)=1

也就是说,此时我们的优化目标最终为:

arg ⁡ min ⁡ ⏟ H t r ( H T L H ) s . t . H T D H = I \underbrace{\arg \min }_{H}tr({{H}^{T}}LH)\begin{matrix} s.t. & {{H}^{T}}DH=I \\ \end{matrix} H argmintr(HTLH)s.t.HTDH=I

此时我们的 H H H中的指示向量 h h h并不是标准正交基,所以在RatioCut里面的降维思想不能直接用。怎么办呢?其实只需要将指示向量矩阵 H H H做一个小小的转化即可。

我们令 H = D − 1 2 F H={{D}^{-\frac{1}{2}}}F H=D21F, 则: H T L H = F T D − 1 2 L D − 1 2 F {{H}^{T}}LH={{F}^{T}}{{D}^{-\frac{1}{2}}}L{{D}^{-\frac{1}{2}}}F HTLH=FTD21LD21F, H T D H = F T F = I {{H}^{T}}DH={{F}^{T}}F=I HTDH=FTF=I

也就是说优化目标变成了:

arg ⁡ min ⁡ ⏟ F t r ( F T D − 1 2 L D − 1 2 F ) s . t . F T F = I \underbrace{\arg \min }_{F}tr({{F}^{T}}{{D}^{-\frac{1}{2}}}L{{D}^{-\frac{1}{2}}}F)\begin{matrix} s.t. & {{F}^{T}}F=I \\ \end{matrix} F argmintr(FTD21LD21F)s.t.FTF=I

可以发现这个式子和RatioCut基本一致,只是中间的L变成了 D − 1 2 L D − 1 2 {{D}^{-\frac{1}{2}}}L{{D}^{-\frac{1}{2}}} D21LD21。这样我们就可以继续按照RatioCut的思想,求出 D − 1 2 L D − 1 2 {{D}^{-\frac{1}{2}}}L{{D}^{-\frac{1}{2}}} D21LD21的最小的前 k k k个特征值,然后求出对应的特征向量,并标准化,得到最后的特征矩阵 F F F,最后对 F F F进行一次传统的聚类(比如K-Means)即可。

一般来说, D − 1 2 L D − 1 2 {{D}^{-\frac{1}{2}}}L{{D}^{-\frac{1}{2}}} D21LD21相当于对拉普拉斯矩阵 L L L做了一次标准化,即: L i j d i ∗ d j \frac{{{L}_{ij}}}{\sqrt{{{d}_{i}}*{{d}_{j}}}} didj Lij

7. 谱聚类算法流程

铺垫了这么久,终于可以总结下谱聚类的基本流程了。一般来说,谱聚类主要的注意点为相似矩阵的生成方式(参见第二节),切图的方式(参见第六节)以及最后的聚类方法(参见第六节)。

最常用的相似矩阵的生成方式是基于高斯核距离的全连接方式,最常用的切图方式是Ncut。而到最后常用的聚类方法为K-Means。下面以Ncut总结谱聚类算法流程。

输入:样本集 D = ( x 1 , x 2 , . . . , x n ) D=({{x}_{1}},{{x}_{2}},...,{{x}_{n}}) D=(x1,x2,...,xn),相似矩阵的生成方式, 降维后的维度 k 1 {{k}_{1}} k1, 聚类方法,聚类后的维度 k 2 {{k}_{2}} k2

输出: 簇划分 C ( c 1 , c 2 , . . . , c k 2 ) C({{c}_{1}},{{c}_{2}},...,{{c}_{k2}}) C(c1,c2,...,ck2).

  1. 根据输入的相似矩阵的生成方式构建样本的相似矩阵 S S S

  2. 根据相似矩阵 S S S构建邻接矩阵 W W W,构建度矩阵 D D D

  3. 计算出拉普拉斯矩阵 L L L

  4. 构建标准化后的拉普拉斯矩阵 D − 1 2 L D − 1 2 {{D}^{-\frac{1}{2}}}L{{D}^{-\frac{1}{2}}} D21LD21

  5. 计算 D − 1 2 L D − 1 2 {{D}^{-\frac{1}{2}}}L{{D}^{-\frac{1}{2}}} D21LD21最小的 k 1 {{k}_{1}} k1个特征值所各自对应的特征向量 f f f

  6. 将各自对应的特征向量 f f f组成的矩阵按行标准化,最终组成 n × k 1 n×{k}_{1} n×k1维的特征矩阵 F F F

  7. F F F中的每一行作为一个 k 1 {{k}_{1}} k1维的样本,共n个样本,用输入的聚类方法进行聚类,聚类维数为 k 2 {{k}_{2}} k2

  8. 得到簇划分 C ( c 1 , c 2 , . . . , c k 2 ) C({{c}_{1}},{{c}_{2}},...,{{c}_{k2}}) C(c1,c2,...,ck2).

8. 谱聚类算法总结

谱聚类算法是一个使用起来简单,但是讲清楚却不是那么容易的算法,它需要你有一定的数学基础。如果你掌握了谱聚类,相信你会对矩阵分析,图论有更深入的理解。同时对降维里的主成分分析也会加深理解。

下面总结下谱聚类算法的优缺点。

谱聚类算法的主要优点有:

1)谱聚类只需要数据之间的相似度矩阵,因此对于处理稀疏数据的聚类很有效。这点传统聚类算法比如K-Means很难做到

2)由于使用了降维,因此在处理高维数据聚类时的复杂度比传统聚类算法好。

谱聚类算法的主要缺点有:

1)如果最终聚类的维度非常高,则由于降维的幅度不够,谱聚类的运行速度和最后的聚类效果均不好。

2) 聚类效果依赖于相似矩阵,不同的相似矩阵得到的最终聚类效果可能很不同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值