谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也不复杂。

>>>>

在处理实际的聚类问题时,个人认为谱聚类是应该首先考虑的几种算法之一。下面我们就对谱聚类的算法原理做一个总结。

 1.1 谱聚类概述 

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

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

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

由于谱聚类是基于图论的,因此我们首先温习下图的概念。对于一个图  ,一般用点的集合  和边的集合  来描述。即为  。其中  即为我们数据集里面所有的点  。对于  中的任意两个点,可以有边连接,也可以没有边连接。我们定义权重  为点  和点  之间的权重。由于我们是无向图,所以  。

对于有边连接的两个点  和  ,  ,对于没有边连接的两个点  和  ,  .对于图中的任意一个点  ,它的度  定义为和它相连的所有边的权重之和,即

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

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

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

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

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

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

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

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

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

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

可以选择不同的核函数来定义边权重,常用的有多项式核函数,高斯核函数和Sigmoid核函数。最常用的是高斯核函数RBF,此时相似矩阵和邻接矩阵相同:

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

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

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

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

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

对于无向图G的切图,我们的目标是将图G(V,E)切成相互没有连接的k个子图,每个子图点的集合为:

那么如何切图可以让子图内的点权重和高,子图间的点权重和低呢?

一个自然的想法就是最小化  ,但是可以发现,这种极小化的切图存在问题,如下图:

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

1.6 谱聚类之切图聚类

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

1.6.1 RatioCut切图

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

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

注意到  矩阵里面的每一个指示向量都是n维的,向量中每个变量的取值为0或者  ,就有  种取值,有k个子图的话就有k个指示向量,共有  种  ,因此找到满足上面优化目标的H是一个NP难的问题。那么是不是就没有办法了呢?

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

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

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

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

1.6.2 Ncut切图

Ncut切图和RatioCut切图很类似,但是把Ratiocut的分母  换成  。由于子图样本的个数多并不一定权重就大,我们切图时基于权重也更合我们的目标,因此一般来说Ncut切图优于RatioCut切图。

那么对于  有:

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

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

1.7 谱聚类算法流程

一般来说,谱聚类主要的注意点为相似矩阵的生成方式(参见第二节),切图的方式(参见第六节)以及最后的聚类方法(参见第六节)。

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

1.8 谱聚类算法总结

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

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

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

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

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

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

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

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

—THE END—

编辑 ∑Gemini

来源:刘建平Pinard-博客园的学习笔记

文章推荐

☞最全数学各个分支简介

☞十大中国数学之最

☞数学和编程

☞机器学习中需要了解的 5 种采样方法

☞北大读博手记:怎样完成自己的博士生涯?非常具有指导性!

☞施一公:为什么要独立思考、为什么要尊重科学?

谱聚类(spectral clustering)原理总结相关推荐

  1. 谱聚类(Spectral Clustering)详解

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

  2. 谱聚类 Spectral Clustering

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

  3. 22 谱聚类 Spectral Clustering

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

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

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

  5. 谱聚类(spectral clustering)

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

  6. python谱聚类算法_谱聚类(spectral clustering)原理总结

    谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也 ...

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

    转自:https://www.cnblogs.com/pinard/p/6221564.html 谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱 ...

  8. 谱聚类算法(Spectral Clustering)优化与扩展

    谱聚类算法(Spectral Clustering)优化与扩展 谱聚类(Spectral Clustering, SC)在前面的博文中已经详述,是一种基于图论的聚类方法,简单形象且理论基础充分,在社交 ...

  9. 谱聚类算法(Spectral Clustering)

    谱聚类算法(Spectral Clustering) 谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法--将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似 ...

  10. 谱聚类算法原理及实现

    谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法. 将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远,以达到常见的聚类的目的. ...

最新文章

  1. 青少年编程竞赛交流群第050次活动录播
  2. 一次线上 JVM 调优实践,FullGC 40 次/天到 10 天一次的优化过程
  3. 【正则表达式】值匹配汉字的正字表达式
  4. 《JS权威指南学习总结--第八章 函数》
  5. Python教程:os 与 sys 模块详细用法
  6. HTTP状态码一览表(HTTP Status Code)
  7. python中调用万年历_python 打印万年历
  8. sed tr 去除PATH中的重复项
  9. 不要等到离职,才明白这些道理
  10. 河南科技学院去年对口计算机分数线,河南科技学院录取分数线2021是多少分(附历年录取分数线)...
  11. java根据父类找子类_在java中实现多态时,可以通过父类变量引用子类的对象。_学小易找答案...
  12. 英文字符串过长,QLabel显示不全的问题
  13. C++基础::为什么不能cout一个string?
  14. 2019牛客多校第八场 BBeauty Values dp
  15. 威斯康星大学硕士计算机科学,2020年威斯康星大学密尔沃基分校排名TFE Times美国最佳计算机科学硕士专业排名第90...
  16. Linux系统1.md
  17. 2018阿里巴巴基础平台研发工程师实习生笔试题:一.十进制数转换成的二进制数中有几个1. 二.输出IP所在的网段
  18. 卡内基沟通与人际关系
  19. 亚马逊国际站获取商品列表
  20. DF-GAN: A Simple and Effective Baseline for Text-to-Image Synthesis论文解读

热门文章

  1. OFD文件结构--Signature.xml
  2. Java技术回顾之JNDI--实例
  3. @requestparam @param @pathvariable @requestbody的区别
  4. mysql创建约束时的约束名称,MySQL唯一键约束
  5. html用转义字符画菱形,JavaScript生成字符画(ASCII Art)
  6. STM32基于SPI和AD7192的数据采集
  7. java apktoo_apktool.jar
  8. java复制一个对象_Java中对象的复制
  9. mysql索引背后的数据结构_图解Mysql索引的数据结构!看不懂你来找我
  10. php ckeditor 配置,Laravel5.6框架使用CKEditor5相关配置详解