项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

1.谱聚类概述

谱聚类(Spectral clustering)是利用矩阵的特征向量进行聚类的一种方法,其本质上是矩阵特征分解进行降维的一种方法。它一般由两部分组成,第一部分是对数据进行变换,第二部分再使用传统的kmeans等方法对变换以后的数据进行聚类。
谱聚类是从图论中演化出来的算法,后来在聚类中得到了广泛的应用。它的主要思想是把所有的数据看做空间中的点,这些点之间可以用边连接起来。距离较远的两个点之间的边权重值较低,而距离较近的两个点之间的边权重值较高,通过对所有数据点组成的图进行切图,让切图后不同的子图间边权重和尽可能的低,而子图内的边权重和尽可能的高,从而达到聚类的目的。(这一段内容来自刘建平老师的描述,具体见参考文献1)

2.谱聚类的基本步骤

在具体的内容展开之前,可以看一下谱聚类的基本步骤
1.先确定参数,包括一个描述相似性图的邻接矩阵W,与聚类的目标类书目k。
2.计算度(次数)矩阵D与拉普拉斯矩阵L。
3.计算标准化以后的拉普拉斯矩阵D−1/2LD1/2D^{-1/2}LD^{1/2}D−1/2LD1/2。
4.求D−1/2LD1/2D^{-1/2}LD^{1/2}D−1/2LD1/2最小k_1个特征值所对应的的特征向量fkf_kfk​。
5.将上述的特征向量fkf_kfk​构成的矩阵行标准化,得到n∗kn*kn∗k矩阵。
6.对上述的n个样本用诸如kmeans等方法进行聚类,聚类维数为k2k_2k2​。
7.得到簇的划分C(c1,c2,⋯,ck2)C(c_1, c_2, \cdots, c_{k2})C(c1​,c2​,⋯,ck2​)

3.图的基本概念

图是数据结构中的概念。图是由顶点与边构成,任意两个节点之间可能都有边进行连接,如果边带有值的信息,称为权重。比如下面的一个图。


图一般用字母G表示,边一般用E表示,点用V表示。如果两个点之间有连接,则有一条边。如果边是单向的,则边是有向的,该图为有向图。否则为无向图。

顶点的度定义为该顶点所关联的边的数量,对于有向图它还分为出度和入度,出度是指从一个顶点射出的边的数量,入度是连入一个节点的边的数量。无向图可以用三元组形式化的表示:
(V,E,ω)(V, E, \omega)(V,E,ω)

其中,V是顶点集合,E是边的集合,ω\omegaω是边的权重。假设i和j为图的顶点,WijW_{ij}Wij​为边(i,j)的权重,由它构成的矩阵W称为邻接矩阵。那么对于无向图来说,其邻接矩阵为对称矩阵。

对于图中的任意一个点viv_ivi​,定义他的度did_idi​为和他连接的所有边的权重之和
di=∑j=1nwijd_i = \sum \limits_{j=1}^{n}w_{ij}di​=j=1∑n​wij​

利用每个点度的定义,可以得到一个n*n的度矩阵D,其为对角矩阵,只有局对角线有值,对应第i个点的度。
$$D=[d1⋯⋯⋯d2⋯⋯⋯⋯⋯⋯dn](3)D = \left[ \begin{matrix} d_1 & \cdots & \cdots \\ \cdots & d_2 & \cdots \\ \cdots & \cdots & \cdots \\ \cdots & \cdots & d_n \\ \end{matrix} \right] \tag{3} D=⎣⎢⎢⎡​d1​⋯⋯⋯​⋯d2​⋯⋯​⋯⋯⋯dn​​⎦⎥⎥⎤​(3)$$

4.相似矩阵与拉普拉斯矩阵

上面提到了邻接矩阵,那么怎样得到邻接矩阵?常见的构建方法是对第i个数据点,离该点最近的p个数据点使用它们之间的欧几里得距离作为相似性的度量,其他较远的点相似性程度都为0。一旦构建好了相似性图G,我们就可以写下用来描述这个图的临接矩阵W。
一般由三种方式构建邻接矩阵,ϵ\epsilonϵ邻近,K邻近与全链接。

ϵ\epsilonϵ邻近是设置一个阈值ϵ\epsilonϵ,然后计算任意两点ij之间的距离sij=∣∣xi−xj∣∣22s_{}ij = || x_i - x_j || _2 ^ 2s​ij=∣∣xi​−xj​∣∣22​ 。
P(x∣Pax)={0,sij>ϵϵ,sij≤ϵP(x|Pa_x)=\begin{cases} 0, & s_{ij} > \epsilon\\ \epsilon, & s_{ij} \leq \epsilon \end{cases}P(x∣Pax​)={0,ϵ,​sij​>ϵsij​≤ϵ​

第二种方式是K邻近法,找到每个样本最近的k个点作为近邻,只有和样本距离最近的k个点之间的ωij>0\omega_{ij} > 0ωij​>0
全连接法相比较前两种,所有的点之间的权重值都大于0,因此称之为全连接法。可以选择不同的核函数来定义边权重,常用的有多项式核函数,高斯核函数和Sigmoid核函数。最常用的是高斯核函数RBF,此时相似矩阵和邻接矩阵相同:

wij=sij=exp(−∣∣xi−xj∣∣222σ2)w_{ij} = s_{ij} = exp(- \frac{||x_i - x_j||_2^2}{2\sigma ^ 2})wij​=sij​=exp(−2σ2∣∣xi​−xj​∣∣22​​)
其中,σ\sigmaσ控制邻域的宽度,是人工设置的超参数。

然后我们可以定义拉普拉斯矩阵L = D - W,其中D为上面讲到的度矩阵,是一个对角矩阵。W为邻接矩阵,可以由上面提到的方法构造出来。因为D是对角矩阵,而W为对称矩阵,很明显L也为对称矩阵。

5.图的切割

对于无向图G,我们的目标是将G(V, E)切成相互没有连接的k个子图,每个子图点的集合为:
A1,A2,⋯,AkA_1, A_2, \cdots, A_kA1​,A2​,⋯,Ak​。
对于任意两个子图点的集合A, B,定义AB之间的切图权重为
W(A,B)=∑i∈A,j∈BwijW(A, B) = \sum \limits _{i \in A, j \in B} w_{ij}W(A,B)=i∈A,j∈B∑​wij​
那么对于k个子图的集合A1,A2,⋯,AkA_1, A_2, \cdots, A_kA1​,A2​,⋯,Ak​,定义图的cut
cut(A1,A2,⋯,Ak)=12∑i=1kW(Ai,Ai‾)cut(A_1, A_2, \cdots, A_k) = \frac{1}{2}\sum \limits _{i=1}^k W(A_i, \overline {A_i})cut(A1​,A2​,⋯,Ak​)=21​i=1∑k​W(Ai​,Ai​​)
那么切图的要求自然就是高内聚,低耦合了,就是说每个子图内的点权重高,而每个子图之间的点权重和低。一个自然的想法就是最小化cut(A1,A2,⋯,Ak)cut(A_1, A_2, \cdots, A_k)cut(A1​,A2​,⋯,Ak​),但是这样会存在问题。

上图可以看出smallest cut跟best cut差别很大。

6.不同的切图方式

6.1 RatioCut

为了避免上面的最小切图,除了考虑cut(A1,A2,⋯,Ak)cut(A_1, A_2, \cdots, A_k)cut(A1​,A2​,⋯,Ak​),我们还考虑最大化每个子图点的个数,即

Ratiocut(A1,A2,⋯,Ak)=12∑i=1kW(Ai,Ai‾)∣Ai∣Ratiocut(A_1, A_2, \cdots, A_k) = \frac{1}{2} \sum \limits _{i=1}^k \frac{W(A_i, \overline {A_i})}{|A_i|}Ratiocut(A1​,A2​,⋯,Ak​)=21​i=1∑k​∣Ai​∣W(Ai​,Ai​​)​

6.2 Ncut

Ncut与RatioCut不一样的地方在于,将分母∣Ai∣|A_i|∣Ai​∣换成了vol(Ai)vol(A_i)vol(Ai​)。其中,我们将vol(Ai)vol(A_i)vol(Ai​)定义为:
vol(Ai)=∑i∈Adivol(A_i) = \sum \limits _{i \in A} d_ivol(Ai​)=i∈A∑​di​

7.谱聚类的优缺点

优点:
1.算法过程中只用到数据点之间的相似矩阵,所以处理稀疏数据毫无压力。
2.因为在矩阵分解的过程中,会有降维,因此处理高维数据的时候复杂度比kmeans等算法低。
缺点:
1.最终的效果依赖相似矩阵,不同的相似矩阵结果差别比较大。
2.如果聚类的维度很高,可能因为降维幅度不够,谱聚类的运行速度和最后的聚类效果均不好。

8.总结

综上所述,谱聚类是一种基于图的算法。先把样本数据看成图的顶点,根据数据点之间的距离构造边,形成带权重的图,然后通过对图进行处理来完成算法所需的功能。对于聚类问题,通过图的切割实现聚类,即将图切分成多个子图,这些子图就是对应的簇。

参考文献

1.https://www.cnblogs.com/pinard/p/6221564.html

小白都能了解的聚类算法之四(谱聚类)相关推荐

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

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

  2. 聚类算法实践——谱聚类、Chameleon聚类

    转载自:http://www.itongji.cn/article/0R52D42013.html 上一篇文章里说到的层次聚类和K-means聚类,可以说是聚类算法里面最基本的两种方法(wiki的cl ...

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

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

  4. python谱聚类算法_谱聚类 - python挖掘 - 博客园

    谱聚类(Spectral Clustering,SC)是一种基于图论的聚类方法,将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量远.能够识别任意形状的样本空间且收敛于全 ...

  5. python谱聚类算法_Python机器学习高级算法!谱聚类(Spectal Clustering)算法分析和实例详解...

    谱聚类(Spectal Clustering)算法是聚类算法的一种,比起传统的K-Means聚类算法,谱聚类算法的效果更优秀,其计算量也小很多,除了谱聚类和K-Means聚类算法,另外还有密度聚类和层 ...

  6. 机器学习(聚类十)——谱聚类及代码实现

    谱聚类是基于谱图理论基础上的一种聚类方法,与传统的聚类方法相比:具有在任意形状的样本空间上聚类并且收敛于全局最优解的优点.(但效率不高,实际工作中用的比较少) 谱聚类 通过对样本数据的拉普拉斯矩阵的特 ...

  7. 【聚类算法】常见聚类算法总结

    转自:https://blog.csdn.net/u010062386/article/details/82499777 感谢博主 1.常见算法 1.原型聚类 "原型"是指样本空间 ...

  8. 模式识别:C-means(K-means)聚类算法与分级聚类(层次聚类)算法

    C均值聚类算法与分级聚类算法的聚类分析 一.实验目的 理解聚类的整体思想,了解聚类的一般方法: 掌握 C-means与分级聚类算法算法思想及原理,并能够熟练运用这些算法进行聚类分析: 能够分析二者的优 ...

  9. 聚类算法之层次聚类算法和应用举例

    聚类算法之层次聚类算法和应用举例 1.假设有N个待聚类的样本,对于层次聚类来说,步骤: 1.(初始化)把每个样本归为一类,计算每两个类之间的距离,也就是样本与样本之间的相似度: 2.寻找各个类之间最近 ...

  10. Python基于聚类算法实现密度聚类(DBSCAN)计算

    本文实例讲述了Python基于聚类算法实现密度聚类(DBSCAN)计算.分享给大家供大家参考,具体如下: 算法思想 基于密度的聚类算法从样本密度的角度考察样本之间的可连接性,并基于可连接样本不断扩展聚 ...

最新文章

  1. LeetCode 59 _ Sprial Matrix II 旋转矩阵2
  2. 如何更好的与人沟通?[图]
  3. LeetCode Algorithm 876. 链表的中间结点
  4. SasSHRM中基于shiro的认证授权:需求分析
  5. php非,通过非数字和字符的方式实现PHP WebShell
  6. linux xlib函数手册,Xlib 学习笔记
  7. PostgreSQL Huge Page 使用建议 - 大内存主机、实例注意
  8. opencv 平面法向量_在OpenCV中绘制平面的法向量
  9. java执行python返回null_[转]java调用python脚本以及通过Process.waitFor()直接调用python模块返回错误代码1的一种解决办法...
  10. 颠覆与重构——戴尔助力徐工集团等行业客户实现业务转型
  11. 操作失败10秒内未完成启动服务mysql_01-MySQL 命令行-cmd用法-未完成
  12. DAM的内涵正在改变
  13. 计算机VFP输出方式有哪几种,VFP导出数据的方法大全
  14. 只需三种手段,将传统的网站的性能提高 24%!
  15. win11资源管理器历史搜索记录如何删除 Windows11禁用资源管理器历史搜索记录的设置方法
  16. django、tornado、flask对比
  17. 价格穿越,跟 普通的大于 小于是有差别的
  18. Ubuntu下常用软件介绍
  19. c语言点分十进制转化成长整形,点分十进制IP和长整型转换
  20. chm打开秒退_无法打开chm文件

热门文章

  1. 网络安全联盟推进威胁情报共享的扩张
  2. 今天我来炫炫富(r11笔记第45天)
  3. 关于autoconf
  4. Spring Mvc前台访问报404
  5. NFS客户端在/etc/fstab设置开机挂载后,开机时无法进入系统
  6. 多个线程交替打印ABC,打印10次
  7. Warning: Binary output can mess up your terminal. Use “--output -“ to tell
  8. mysql慢查询优化
  9. [SPLEB]CodeSmith原理剖析(2)
  10. 大数据技术将是传统企业创新的原点