转自:https://www.cnblogs.com/pinard/p/6221564.html

谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也不复杂。在处理实际的聚类问题时,个人认为谱聚类是应该首先考虑的几种算法之一。下面我们就对谱聚类的算法原理做一个总结。

1. 谱聚类概述

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

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

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

由于谱聚类是基于图论的,因此我们首先温习下图的概念。对于一个图GG,我们一般用点的集合VV和边的集合EE来描述。即为G(V,E)G(V,E)。其中VV即为我们数据集里面所有的点(v1,v2,...vn)(v1,v2,...vn)。对于VV中的任意两个点,可以有边连接,也可以没有边连接。我们定义权重wijwij为点vivi和点vjvj之间的权重。由于我们是无向图,所以wij=wjiwij=wji。

对于有边连接的两个点vivi和vjvj,wij>0wij>0,对于没有边连接的两个点vivi和vjvj,wij=0wij=0。对于图中的任意一个点vivi,它的度didi定义为和它相连的所有边的权重之和,即

di=∑j=1nwijdi=∑j=1nwij

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

D=⎛⎝⎜⎜⎜⎜⎜d1…⋮……d2⋮………⋱dn⎞⎠⎟⎟⎟⎟⎟D=(d1………d2…⋮⋮⋱……dn)

利用所有点之间的权重值,我们可以得到图的邻接矩阵WW,它也是一个nxn的矩阵,第i行的第j个值对应我们的权重wijwij。

除此之外,对于点集VV的的一个子集A⊂VA⊂V,我们定义:

|A|:=子集A中点的个数|A|:=子集A中点的个数

vol(A):=∑i∈Adivol(A):=∑i∈Adi

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

在上一节我们讲到了邻接矩阵WW,它是由任意两点之间的权重值wijwij组成的矩阵。通常我们可以自己输入权重,但是在谱聚类中,我们只有数据点的定义,并没有直接给出这个邻接矩阵,那么怎么得到这个邻接矩阵呢?

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

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

对于ϵϵ-邻近法,它设置了一个距离阈值ϵϵ,然后用欧式距离sijsij度量任意两点xixi和xjxj的距离。即相似矩阵的sij=||xi−xj||22sij=||xi−xj||22,  然后根据sijsij和ϵϵ的大小关系,来定义邻接矩阵WW如下:

Wij={0ϵsij>ϵsij≤ϵWij={0sij>ϵϵsij≤ϵ

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

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

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

Wij=Wji={0exp(−||xi−xj||222σ2)xi∉KNN(xj)andxj∉KNN(xi)xi∈KNN(xj)orxj∈KNN(xi)Wij=Wji={0xi∉KNN(xj)andxj∉KNN(xi)exp(−||xi−xj||222σ2)xi∈KNN(xj)orxj∈KNN(xi)

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

Wij=Wji={0exp(−||xi−xj||222σ2)xi∉KNN(xj)orxj∉KNN(xi)xi∈KNN(xj)andxj∈KNN(xi)Wij=Wji={0xi∉KNN(xj)orxj∉KNN(xi)exp(−||xi−xj||222σ2)xi∈KNN(xj)andxj∈KNN(xi)

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

Wij=Sij=exp(−||xi−xj||222σ2)Wij=Sij=exp(−||xi−xj||222σ2)

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

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

单独把拉普拉斯矩阵(Graph Laplacians)拿出来介绍是因为后面的算法和这个矩阵的性质息息相关。它的定义很简单,拉普拉斯矩阵L=D−WL=D−W。DD即为我们第二节讲的度矩阵,它是一个对角矩阵。而WW即为我们第二节讲的邻接矩阵,它可以由我们第三节的方法构建出。

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

1)拉普拉斯矩阵是对称矩阵,这可以由DD和WW都是对称矩阵而得。

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

3)对于任意的向量ff,我们有

fTLf=12∑i,j=1nwij(fi−fj)2fTLf=12∑i,j=1nwij(fi−fj)2

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

fTLf=fTDf−fTWf=∑i=1ndif2i−∑i,j=1nwijfifjfTLf=fTDf−fTWf=∑i=1ndifi2−∑i,j=1nwijfifj

=12(∑i=1ndif2i−2∑i,j=1nwijfifj+∑j=1ndjf2j)=12∑i,j=1nwij(fi−fj)2=12(∑i=1ndifi2−2∑i,j=1nwijfifj+∑j=1ndjfj2)=12∑i,j=1nwij(fi−fj)2

4) 拉普拉斯矩阵是半正定的,且对应的n个实数特征值都大于等于0,即0=λ1≤λ2≤...≤λn0=λ1≤λ2≤...≤λn, 且最小的特征值为0,这个由性质3很容易得出。

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

对于无向图GG的切图,我们的目标是将图G(V,E)G(V,E)切成相互没有连接的k个子图,每个子图点的集合为:A1,A2,..AkA1,A2,..Ak,它们满足Ai∩Aj=∅Ai∩Aj=∅,且A1∪A2∪...∪Ak=VA1∪A2∪...∪Ak=V.

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

W(A,B)=∑i∈A,j∈BwijW(A,B)=∑i∈A,j∈Bwij

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

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

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

那么如何切图可以让子图内的点权重和高,子图间的点权重和低呢?一个自然的想法就是最小化cut(A1,A2,...Ak)cut(A1,A2,...Ak), 但是可以发现,这种极小化的切图存在问题,如下图:

我们选择一个权重最小的边缘的点,比如C和H之间进行cut,这样可以最小化cut(A1,A2,...Ak)cut(A1,A2,...Ak), 但是却不是最优的切图,如何避免这种切图,并且找到类似图中"Best Cut"这样的最优切图呢?我们下一节就来看看谱聚类使用的切图方法。

6. 谱聚类之切图聚类

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

6.1 RatioCut切图

RatioCut切图为了避免第五节的最小切图,对每个切图,不光考虑最小化cut(A1,A2,...Ak)cut(A1,A2,...Ak),它还同时考虑最大化每个子图点的个数,即:

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

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

我们引入指示向量hj={h1,h2,..hk}j=1,2,...khj={h1,h2,..hk}j=1,2,...k,对于任意一个向量hjhj, 它是一个n维向量(n为样本数),我们定义hjihji为:

hji=⎧⎩⎨01|Aj|√vi∉Ajvi∈Ajhji={0vi∉Aj1|Aj|vi∈Aj

那么我们对于hTiLhihiTLhi,有:

hTiLhi=12∑m=1∑n=1wmn(him−hin)2=12(∑m∈Ai,n∉Aiwmn(1|Ai|−−−√−0)2+∑m∉Ai,n∈Aiwmn(0−1|Ai|−−−√)2=12(∑m∈Ai,n∉Aiwmn1|Ai|+∑m∉Ai,n∈Aiwmn1|Ai|=12(

高斯核函数初始化邻接矩阵_转:谱聚类(spectral clustering)原理总结相关推荐

  1. 高斯核函数初始化邻接矩阵_基于均值漂移和双层群结构模型的群目标GMPHD滤波...

    0 引言 群目标(如机群编队和弹道导弹群目标), 是由一些具有相似运动特性且在很长一段时间内都处于相互邻近状态的目标组成.同时, 这些目标又会随着时间不断地分裂融合, 构成复杂的运动模式, 给群目标的 ...

  2. 22 谱聚类 Spectral Clustering

    1 Background 本章节主要是描述的一种聚类算法,谱聚类(Spectral Clustering).对机器学习有点了解的同学对聚类算法肯定是很熟悉的,那么谱聚类和之前普通的聚类算法有什么不一样 ...

  3. 谱聚类(Spectral Clustering)详解

    原文地址为: 谱聚类(Spectral Clustering)详解 谱聚类(Spectral Clustering)详解 谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方 ...

  4. 谱聚类 Spectral Clustering

    谱聚类 Spectral Clustering sklearn.cluster.SpectralClustering 谱聚类(Spectral Clustering, SC), 是一种基于图论的聚类方 ...

  5. python谱聚类算法_谱聚类Spectral clustering(SC)

    在之前的文章里,介绍了比较传统的K-Means聚类.Affinity Propagation(AP)聚类.比K-Means更快的Mini Batch K-Means聚类以及混合高斯模型Gaussian ...

  6. 谱聚类(spectral clustering)

    谱聚类概述 谱聚类是从图论中演化出来的算法,后来在聚类中得到了广泛的应用.它的主要思想是把所有的数据看做空间中的点,这些点之间可以用边连接起来.距离较远的两个点之间的边权重值较低,而距离较近的两个点之 ...

  7. 聚类算法 距离矩阵_理解谱聚类

    原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不能用于商业目的. 其它机器学习.深度学习算法的全面系统讲解可以阅读<机器学习-原理.算法与应用>,清华大学出版社,雷明 ...

  8. 高斯核函数python代码_单类SVM:SVDD

    话接上文(SVM的简单推导),这篇文章我们来看单类SVM:SVDD.可能大家会觉得很奇怪,我们为什么需要单分类呢?有篇博客举了一个很有意思的例子. 花果山上的老猴子,一生阅猴无数,但是从来没有见过其它 ...

  9. 高斯核函数参数确定_高斯过程

    之前看过高斯过程(GP),不过当时也没太看懂,最近花时间认真研究了一下,感觉总算是明白咋回事了,本文基于回归问题解释GP模型的思想和方法.文中的想法是自己思考总结得来,并不一定准确,也可能存在错误性. ...

最新文章

  1. 如何把PB程序的数据库从ASA迁移到ASE?
  2. 机器学习的大局:用神经网络和TensorFlow分类文本
  3. 模式识别与智能系统和计算机视觉,天津大学模式识别与智能系统
  4. div不能控制tr和td的隐藏
  5. Python爬虫实践: 获取百度贴吧内容
  6. 汇编 一星题目字符串合集:输入字符,操作,在屏幕上显示
  7. 2007年7月23日旅游
  8. 虚拟机中Linux安装可视化界面
  9. java excel checkbox,使用Apache POI(Java)在XLSX中创建复选框
  10. python Calendar日历模块函数介绍
  11. Tomcat配置https 访问http跳转https 配置域名
  12. 华为--三层交换实验(原理与实验详情)
  13. 有容乃大:楚庄王(第二篇
  14. linux三剑客试题,Linux三剑客(grep、sed、awk)详解
  15. 凯文·米特尼克的建议
  16. Qt +百度地图+获取返回位置点
  17. 基于simulink的无刷直流电动机性能仿真
  18. 《暮光之城●破晓(下)》
  19. 【建站指南】解决个人网站图片加载缓慢的问题
  20. java 大圣账号和github地址

热门文章

  1. 思迈特软件Smartbi:企业HR面对大量的人力资源如何做数据分析
  2. DeepGCNs-Can GCNs Go as Deep as CNNs? ICCV 2019
  3. R语言中Sweave是用来做什么的?
  4. 怎么发送电子邮件营销?关键在于这4点!
  5. 龙讯LT6911系列C/UXC/UXB/GXC/GXB芯片功能区别阐述
  6. 如何使用Photoshop创建绘画照片效果
  7. [经验教程]为什么淘宝显示定位失败怎么重新开启淘宝定位?
  8. Node.js 的下载与安装记录
  9. 转慎重推荐十个优秀的网络硬盘(网盘)
  10. PyCharm - Column Selection Mode (列选择模式 / 列复制粘贴)