从拉普拉斯矩阵说到谱聚类

2 拉普拉斯矩阵

2.1 Laplacian matrix的定义

    拉普拉斯矩阵(Laplacian matrix)),也称为基尔霍夫矩阵, 是表示图的一种矩阵。给定一个有n个顶点的图,其拉普拉斯矩阵被定义为:

    其中为图的度矩阵,为图的邻接矩阵。

    举个例子。给定一个简单的图,如下:

    把此“图”转换为邻接矩阵的形式,记为

    把的每一列元素加起来得到个数,然后把它们放在对角线上(其它地方都是零),组成一个的对角矩阵,记为度矩阵,如下图所示:

    根据拉普拉斯矩阵的定义,可得拉普拉斯矩阵 为:

2.2 拉普拉斯矩阵的性质  

    介绍 拉普拉斯矩阵的性质之前,首先定义两个概念,如下:

    ①对于邻接矩阵,定义图中A子图与B子图之间所有边的权值之和如下:

    其中,定义为节点到节点的权值,如果两个节点不是相连的,权值为零。
    ②与某结点邻接的所有边的权值和定义为该顶点的度d,多个d 形成一个度矩阵 (对角阵)

 

    拉普拉斯矩阵 具有如下性质:

  •  是对称半正定矩阵;
  •  ,即 的最小特征值是0,相应的特征向量是 。证明: *  = ( - ) *  = 0 = 0 * 。(此外,别忘了,之前特征值和特征向量的定义:若数字和非零向量满足,则的一个特征向量是其对应的特征值)。
  •   有n个非负实特征值
  • 且对于任何一个属于实向量,有以下式子成立

    其中,

    下面,来证明下上述结论,如下:

 

3 谱聚类

    所谓聚类(Clustering),就是要把一堆样本合理地分成两份或者K份。从图论的角度来说,聚类的问题就相当于一个图的分割问题。即给定一个图G = (V, E),顶点集V表示各个样本,带权的边表示各个样本之间的相似度,谱聚类的目的便是要找到一种合理的分割图的方法,使得分割后形成若干个子图,连接不同子图的边的权重(相似度)尽可能低,同子图内的边的权重(相似度)尽可能高。物以类聚,人以群分,相似的在一块儿,不相似的彼此远离。

    至于如何把图的顶点集分割/切割为不相交的子图有多种办法,如

  1. cut/Ratio Cut
  2. Normalized Cut
  3. 不基于图,而是转换成SVD能解的问题

    目的是为了要让被割掉各边的权值和最小,因为被砍掉的边的权值和越小,代表被它们连接的子图之间的相似度越小,隔得越远,而相似度低的子图正好可以从中一刀切断。

    本文重点阐述上述的第一种方法,简单提一下第二种,第三种本文不做解释,有兴趣的可以参考文末的参考文献条目13。

3.1 相关定义

    为了更好的把谱聚类问题转换为图论问题,定义如下概念(有些概念之前已定义,权当回顾下):

  • 无向图,顶点集V表示各个样本,带权的边表示各个样本之间的相似度
  • 与某结点邻接的所有边的权值和定义为该顶点的度d,多个d 形成一个度矩阵(对角阵)

  • 邻接矩阵,A子图与B子图之间所有边的权值之和定义如下:

    其中,定义为节点到节点的权值,如果两个节点不是相连的,权值为零。

  • 相似度矩阵的定义。相似度矩阵由权值矩阵得到,实践中一般用高斯核函数(也称径向基函数核)计算相似度,距离越大,代表其相似度越小。

  • 子图A的指示向量如下:

 

3.2 目标函数

    因此,如何切割图则成为问题的关键。换言之,如何切割才能得到最优的结果呢?

   举个例子,如果用一张图片中的所有像素来组成一个图 ,并把(比如,颜色和位置上)相似的节点连接起来,边上的权值表示相似程度,现在要把图片分割为几个区域(或若干个组),要求是分割所得的 Cut 值最小,相当于那些被切断的边的权值之和最小,而权重比较大的边没有被切断。因为只有这样,才能让比较相似的点被保留在了同一个子图中,而彼此之间联系不大的点则被分割了开来。

   

    设为图的几个子集(它们没有交集) ,为了让分割的Cut 值最小,谱聚类便是要最小化下述目标函数: 

    其中k表示分成k个组, 表示第i个组,表示 的补集,表示第 组与第组之间的所有边的权重之和(换言之,如果要分成K个组,那么其代价就是进行分割时去掉的边的权值的总和)。

    为了让被切断边的权值之和最小,便是要让上述目标函数最小化。但很多时候,最小化cut 通常会导致不好的分割。以分成2类为例,这个式子通常会将图分成了一个点和其余的n-1个点。如下图所示,很明显,最小化的smallest cut不是最好的cut,反而把{A、B、C、H}分为一边,{D、E、F、G}分为一边很可能就是最好的cut

    为了让每个类都有合理的大小,目标函数尽量让A1,A2...Ak 足够大。改进后的目标函数为:

    其中|A|表示A组中包含的顶点数目。

   或:

    其中,

3.3 最小化RatioCut  与最小化等价

    下面,咱们来重点研究下RatioCut 函数。

    目标函数:
    定义向量,且:

    根据之前得到的拉普拉斯矩阵矩阵的性质,已知

    现在把的定义式代入上式,我们将得到一个非常有趣的结论!推导过程如下:

    是的,我们竟然从推出了RatioCut,换句话说,拉普拉斯矩阵和我们要优化的目标函数RatioCut 有着密切的联系。更进一步说,因为是一个常量,所以最小化RatioCut,等价于最小化

    同时,因单位向量的各个元素全为1,所以直接展开可得到约束条件:,具体推导过程如下:

    最终我们新的目标函数可以由之前的,写成:

    其中,,且因,所以有:f'f = n(注:f是列向量的前提下,f'f是一个值,实数值,ff'是一个N*N的矩阵)。

    继续推导前,再次提醒特征向量和特征值的定义:

  • 若数字和非零向量满足,则的一个特征向量,是其对应的特征值。

    假定  =  ,此刻,是特征值, 是 的特征向量。两边同时左乘,得到 = ,而f'f=n,其中n为图中顶点的数量之和,因此 = n,因n是个定值,所以要最小化,相当于就是要最小化。因此,接下来,我们只要找到 的最小特征值及其对应的特征向量即可。

    但到了这关键的最后一步,咱们却遇到了一个比较棘手的问题,即由之前得到的拉普拉斯矩阵的性质最小的特征值为零,并且对应的特征向量正好为可知:其不满足的条件,因此,怎么办呢?根据论文A Tutorial on Spectral Clustering中所说的Rayleigh-Ritz 理论,我们可以取第2小的特征值,以及对应的特征向量。 

    更进一步,由于实际中,特征向量 里的元素是连续的任意实数,所以可以根据 是大于0,还是小于0对应到离散情况下的,决定 是取,还是取。而如果能求取 的前K个特征向量,进行K-means聚类,得到K个簇,便从二聚类扩展到了K 聚类的问题。

    而所要求的这前K个特征向量就是拉普拉斯矩阵的特征向量(计算拉普拉斯矩阵的特征值,特征值按照从小到大顺序排序,特征值对应的特征向量也按照特征值递增的顺序排列,取前K个特征向量,便是我们所要求的前K个特征向量)!

    所以,问题就转换成了:求拉普拉斯矩阵的前K个特征值,再对前K个特征值对应的特征向量进行 K-means 聚类。而两类的问题也很容易推广到 k 类的问题,即求特征值并取前 K 个最小的,将对应的特征向量排列起来,再进行 K-means聚类。两类分类和多类分类的问题,如出一辙。

    就这样,因为离散求解很困难,但RatioCut 巧妙地把一个NP难度的问题转换成拉普拉斯矩阵特征值(向量)的问题,将离散的聚类问题松弛为连续的特征向量,最小的系列特征向量对应着图最优的系列划分方法。剩下的仅是将松弛化的问题再离散化,即将特征向量再划分开,便可以得到相应的类别。不能不说妙哉!

3.4 谱聚类算法过程

    综上可得谱聚类的算法过程如下:

  1. 根据数据构造一个Graph,Graph的每一个节点对应一个数据点,将各个点连接起来(随后将那些已经被连接起来但并不怎么相似的点,通过cut/RatioCut/NCut 的方式剪开),并且边的权重用于表示数据之间的相似度。把这个Graph用邻接矩阵的形式表示出来,记为 

  2. 的每一列元素加起来得到个数,把它们放在对角线上(其他地方都是零),组成一个的对角矩阵,记为度矩阵,并把 - 的结果记为拉普拉斯矩阵

  3. 求出的前个特征值(前个指按照特征值的大小从小到大排序得到),以及对应的特征向量

  4. 把这个特征(列)向量排列在一起组成一个的矩阵,将其中每一行看作维空间中的一个向量,并使用 K-means 算法进行聚类。聚类的结果中每一行所属的类别就是原来 Graph 中的节点亦即最初的个数据点分别所属的类别。

    或许你已经看出来,谱聚类的基本思想便是利用样本数据之间的相似矩阵(拉普拉斯矩阵)进行特征分解( 通过Laplacian Eigenmap 的降维方式降维),然后将得到的特征向量进行 K-means聚类。

    此外,谱聚类和传统的聚类方法(例如 K-means)相比,谱聚类只需要数据之间的相似度矩阵就可以了,而不必像K-means那样要求数据必须是 N 维欧氏空间中的向量。

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
近邻传播聚类算法是一种基于图论的聚类算法,它可以根据相似度矩阵将数据点划分为不同的类别,并且可以自动确定聚类中心。下面是使用近邻传播聚类算法进行聚类分析并返回聚类结果和聚类中心索引的步骤: 1. 构建相似度图:根据相似度矩阵构建一个无向图,每个数据点对应一个节点,相似度矩阵中的相似度值作为边的权重。 2. 初始化传播权重:对于每个节点,初始化一个传播权重向量,向量中的每个元素代表该节点与其他节点之间的传播权重,初始值可以设置为相似度矩阵中的相似度值。 3. 进行信息传播:按照一定的传播规则,将节点之间的信息进行传播,更新每个节点的传播权重向量。 4. 确定聚类中心:根据传播权重向量中的值,确定每个节点所属的聚类中心。 5. 返回聚类结果和聚类中心索引:将每个节点划分到对应的聚类中心中,并返回聚类结果和聚类中心索引。 具体的实现过程可以参考以下代码示例(使用Python语言和scikit-learn库): ```python from sklearn.cluster import AffinityPropagation # 构建相似度矩阵similarity_matrix # 初始化传播权重,设置damping参数控制信息传播的收敛速度 af = AffinityPropagation(damping=0.5) af.fit(similarity_matrix) # 获取聚类结果和聚类中心索引 cluster_labels = af.labels_ cluster_centers_indices = af.cluster_centers_indices_ ``` 其中,`cluster_labels`是一个长度为n的数组,表示每个数据点所属的聚类标签(类别从0到k-1,共k个类别),`cluster_centers_indices`是一个长度为k的数组,表示k个聚类中心所对应的数据点在原始数据集中的索引。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值