引入

  聚类算法一般可以分为两类:

  1. Compactness。代表的算法有  K-means,GMM 等。但这类算法只能处理凸集,为了处理非凸的样本集,必须引⼊核技巧。
  2. Connectivity。这类以  spectral clustering  为代表。

  举个例子,将下述数据采用聚类算法进行聚类,可以采用  GMM 或  K-Means  的方法:

    

   然而对于下述数据却并不能使用上述两种算法:

      

  此时可以考虑采用谱聚类(spectral clustering)的方法。

  谱聚类算法(Spectral Clustering) 

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


1 基础知识

1.1 无向带权图

  对于一个图 G ,一般用  V  代表点的集合 和用  E  来描述边的集合。则  G(V,E) 。其中, V=(v1,v2,...vn)  。对于  V  中的任意两个点,可以有边连接,也可以没有边连接。定义权重  wij  为点  vi  和点  vj  之间的权重。对于无向图,有   wij=wji

  权重:对于有边相连的两个点  vi  和  vj,有  wij>0 ,  对于没有边连接的两个点  vi  和  vj  ,wij=0

  度:对于图中的任意一个点  vi  ,它的度  di  定义为和它相连的所有边的权重之和,即 :

    di=j=1nwij

  利用节点的权重值,可以得到图的邻接矩阵  W  ,是一个  n×n  的矩阵,第  i  行的第  j  个值对应的权重为  wij

  除此之外,对于点集  V  的的一个子集  AV  ,我们定义:

    • |A|:=A 
    • vol(A):=iAdi

  利用每个节点的度,可以得到一个  n×n  的度矩阵  D,它是一个对角矩阵,只有主对角线有值,对应第  i  行的第  i  点的度数,定义如下:

    D=(d1d2dn)

1.2 相似矩阵

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

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

  构建邻接矩阵  W  的方法有三类:

    1. ϵ - 邻近法
    2. K 邻近法
    3. 全连接法

1.2.1 ϵ-邻近法

  首先,设置一个距离阈值  ϵ  ,然后用欧式距离  sij  度量任意两点  xi  和  xj  的距离。即相似矩阵的  sij=||xixj||22 ,然后根据  sij  和  ϵ  的大小关系,来定义邻接矩阵  W  如下:

    wij={0sij>ϵϵsijϵ

  从上式可见,两点间的权重要不是  ϵ,要不就是  0。显然这很难精确区分每个点之间的距离大小。所以很少使用  ϵ- 邻近法。

1.2.2 K  邻近法

  基本思想:利用  KNN  算法遍历所有的样本点,取每个样本最近的  k  个点作为近邻,只有和样本距离最近的  k  个点之间的  wij>0  。

  但是这种方法会造成重构之后的邻接矩阵  W  非对称,且后面的算法需要对称邻接矩阵。为解决这种问题,一般采取下面两种方法之一:

  Method1:第一种  K  邻近法是只要一个点在另一个点的  K 近邻中,则保留  sij

    wij=wji={0xiKNN(xj)andxjKNN(xi)exp(||xixj||222σ2)xiKNN(xj)orxjKNN(xi)

  Method2:第二种  K  邻近法是必须两个点互为  K  近邻中,才保留  sij

    wij=wji={0xiKNN(xj)orxjKNN(xi)exp(||xixj||222σ2)xiKNN(xj)andxjKNN(xi)

1.2.3 全连接法

  相比前两种方法,第三种方法所有的点之间的权重值都大于 0,因此称之为全连接法。

  基本思想:选择不同的核函数来定义边权重,常用的有多项式核函数高斯核函数和  Sigmoid  核函数

  最常用的是高斯核函数RBF,此时相似矩阵和邻接矩阵相同:

    wij=sij=exp(||xixj||222σ2)

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


2 拉普拉斯矩阵

  拉普拉斯矩阵  L=DWD  即为度矩阵,它是一个对角矩阵。而  W  即为 邻接矩阵。(参考《图神经网络基础二:谱图理论》

  举例:

    

  普拉斯矩阵的性质如下:

  1、拉普拉斯矩阵是 对称矩阵;

  2、L  的行和为零 ;

  3、L  有一个特征值为零 ;

  4、L 是半正定矩阵 ;

  5、对于任意向量  f,有:

     fTLf=12i=1Nj=1Nwij(fifj)2

  这一性质利用拉普拉斯矩阵的性质很容易可以得到:

     fTLf=fTDffTWf=i=1Ndifi2i=1Nj=1Nwijfifj=12(i=1Ndifi22i=1Nj=1Nwijfifj+j=1Ndjfj2)=12(i=1Nj=1Nwijfi22i=1Nj=1Nwijfifj+i=1Nj=1Nwijfj2)=12i=1Nj=1Nwij(fifj)2

  对于上面的性质5,如果 f 为网络中信号的值的向量,那么   fTLf   称为图信号的总变差 (Total Variation),可以刻画图信号整体的平滑度 


3 无向图切图 

  对于无向图  G  的切图,目标是将图  G(V,E)  切成相互没有连接的  k  个子图,每个子图点集合为:A1,A2,..Ak,它们满足  AiAj=,且A1A2...Ak=V

  对于任意两个子图点集合  A,BV  ,AB=,我们定义  A  和  B  之间的切图权重为:

     W(A,B)=iA,jBwij 

  那么对于  k  个子图点的集合:A1,A2,..Ak,定义切图cut为:

    cut(A1,A2,...Ak)=12i=1kW(Ai,A¯i)

  其中  A¯i  为  Ai  的补集,意为除  Ai  子集外其他  V  的子集的并集。

  每个子图就相当于聚类的一个类,找到子图内点的权重之和最高,子图间的点的权重之和最低的切图就相当于找到了最佳的聚类。实现这一点的一个很自然的想法是最小化  cut  。然而这种方法存在问题,也就是最小化的  cut  对应的切图不一定就是符合要求的最优的切图,如下图:  

    

  在上面的例子中,我们选择一个权重最小的边缘的点,比如  C  和  H  之间进行  cut,这样可以最小化  cut(A1,A2,...Ak),但是却不是最优的切图,如何避免这种切图,并且找到类似图中  "Best Cut"  这样的最优切图呢?

  接下介绍谱聚类使用的切图方法。


4 谱聚类之切图聚类

  为避免最小切图导致的切图效果不佳,需要对每个子图的规模做出限定,一般来说,有两种切图方式,

  1. 第一种是  RatioCut 
  2. 第二种是  Ncut

4.1 RatioCut 切图

  RatioCut  切图为避免上述的最小切图,对每个切图,不光考虑最小化  cut(A1,A2,...Ak)  ,还考虑最大化每个子图点的个数,即:

     RatioCut(A1,A2,...Ak)=12i=1kW(Ai,A¯i)|Ai| 

  为最小化这个  RatioCut  函数,引入指示向量  hj{h1,h2,..hk}j=1,2,...k,对于任意一个向量  hj, 它是一个  n  维向量(n 为样本数),定义  hij  为:

    hij={0viAj1|Aj|viAj

  定义  hiTLhi  为:

    hiTLhi=12m=1n=1wmn(himhin)2=12(mAi,nAiwmn(1|Ai|0)2+mAi,nAiwmn(01|Ai|)2=12(mAi,nAiwmn1|Ai|+mAi,nAiwmn1|Ai|=12(cut(Ai,A¯i)1|Ai|+cut(A¯i,Ai)1|Ai|)=cut(Ai,A¯i)|Ai|

  可以看出,对于某一个子图  i,它的  RatioCut  对应于  hiTLhi,那么  k个子图呢?对应的  RatioCut  函数表达式为:

    RatioCut(A1,A2,Ak)=i=1khiTLhi=i=1k(HTLH)ii=tr(HTLH)

  上式中  tr(HTLH)  为矩阵  HTLH  的迹,  H=(h1h2hk) ,需要注意这里 的  H  满足  HTH=I ,并且  H  的元素只能取  0  或者  1|Ai|

  所以我们需要优化以下目标函数:

    argminHtr(HTLH) s.t. HTH=I

  注意到  H  矩阵里面的每一个指示向量都是  n  维的,向量中每个变量的取值为  0  或者  1|Aj|  ,就有  2n  种取值,有  k  个子图的话就有  k  个指示向量,共有  k2n  种  H,因此找到满足上面优化目标的  H 是一个  NP  难的问题。

  观察到  tr(HTLH)  中每一个优化子目标  hiTLhi,其中  h  是单位正交基, L  为对称矩阵,此时  hiTLhi  的最大值为  L  的最大特征值,最小值是  L  的最小特征值。类比于 PCA ,我们的目标是找到协方差矩阵(对应此处的拉普拉斯矩阵  L )的最大的特征值,而在我们的谱聚类中,我们的目标是找到目标的最小的特征值,得到对应的特征向量,此时对应二分切图效果最佳。也就是说,我们这里要用到维度规约的思想来近似去解决这个NP难的问题。

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

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

    hij=hij(t=1khit2)1/2

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

4.2 Ncut 切图

  Ncut 切图和  RatioCut  切图很类似,但是把  Ratiocut  的分母  |Ai|  换成  vol(Ai)  。由于子图样本的个数多并不一定权重就大,我们切图时基于权重也更合我们的目标,因此一般来说  Ncut  切图优于  RatioCut 切图。 NCut(A1,A2,...Ak)=12i=1kW(Ai,A¯i)vol(Ai) 

  对应的,Ncut 切图对指示向量  h  做了改进。注意到  RatioCut  切图的指示向量使用的是  1|Aj|  标示样本归属,而  Ncut  切图使用了子图权重  1vol(Aj)  来标示指示向量  h,定义如下: 

    hij={0viAj1vol(Aj)viAj

  那么我们对于  hiTLhi  有:

    hiTLhi=12m=1n=1wmn(himhin)2=12(mAi,nAiwmn(1vol(Ai)0)2+mAi,nAiwmn(01vol(Ai))2=12(mAi,nAiwmn1vol(Ai)+mAi,nAiwmn1vol(Ai)=12(cut(Ai,A¯i)1vol(Ai)+cut(A¯i,Ai)1vol(Ai))=cut(Ai,A¯i)vol(Ai)

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

    NCut(A1,A2,,Ak)=i=1khiTLhi=i=1k(HTLH)ii=tr(HTLH) 

  但是此时我们的  HTHI,而是  HTDH=I。推导如下:

    HTDH=(h1Th2ThkT)(d1d2dN)(h1h2hk)=(h11d1h12d2h1NdNh21d1h22d2h2NdNhk1d1hk2d2hkNdN)(h1h2hk)=(i=1Nh1i2dii=1Nh1ih2idii=1Nh1ihkijdii=1Nh2ih1idii=1Nh2i2dii=1Nh2ihkidii=1Nhkih1idii=1Nhkih2idii=1Nhki2di)

  对于对角线元素

    hiTDhi=j=1nhij2dj=1vol(Ai)jAidj=1vol(Ai)vol(Ai)=1 

  由于  hmi  和 hni  不可能同时非零viVmandviVn ),因此对于非对角线元素有: 

    i=1Nhmihnidi=i=1N0di=0

  此时我们的优化目标最终为:

    argminHtr(HTLH)s.t.HTDH=I 

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

  我们令H=D1/2F, 则:

    HTLH=FTD1/2LD1/2F  

    HTDH=FTF=I

  此时优化目标为:

    argminFtr(FTD1/2LD1/2F) s.t. FTF=I 

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

  一般来说, D1/2LD1/2  相当于对拉普拉斯矩阵  L  做了一次标准化,即

    (D1/2LD1/2)ij=Lijdidj


5 谱聚类算法流程

5.1  Ncut 谱聚类算法流程

  下面 Ncut 谱聚类算法流程。

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

    输出: 簇划分C(c1,c2,...ck2). 

    1.   根据输入的相似矩阵的生成方式构建样本的相似矩阵  S
    2.   根据相似矩阵  S  构建邻接矩阵  W,构建度矩阵  D
    3.   计算出拉普拉斯矩阵  L
    4.   构建标准化后的拉普拉斯矩阵D1/2LD1/2
    5.   计算D1/2LD1/2最小的  k1  个特征值所各自对应的特征向量  f
    6.   将各自对应的特征向量f组成的矩阵按行标准化,最终组成  n×k1  维的特征矩阵  F
    7.   对 F 中的每一行作为一个k1维的样本,共  n 个样本,用输入的聚类方法进行聚类,聚类维数为k2  ;
    8.   得到簇划分C(c1,c2,...ck2).         

5.2 谱聚类算法的优缺点

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

    1. 谱聚类只需要数据之间的相似度矩阵,因此对于处理稀疏数据的聚类很有效。这点传统聚类算法比如K-Means很难做到
    2. 由于使用了降维,因此在处理高维数据聚类时的复杂度比传统聚类算法好。

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

    1. 如果最终聚类的维度非常高,则由于降维的幅度不够,谱聚类的运行速度和最后的聚类效果均不好。
    2. 聚类效果依赖于相似矩阵,不同的相似矩阵得到的最终聚类效果可能很不同。

 

posted @   别关注我了,私信我吧  阅读(1274)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
Live2D
点击右上角即可分享
微信分享提示