谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法。
将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远,以达到常见的聚类的目的。
"带权无向图"这个词太学术了,我们换一种叫法,即:相似度矩阵。
假设我们有一个相似度矩阵,矩阵中存的是所有对象的两两相似度。
那么这个矩阵应该有如下性质:
- 矩阵为N * N,N为对象总数
- 矩阵对角线的值为0,自己和自己相似个毛啊
- 矩阵为对称矩阵,及相似度是无向的
我们将该矩阵记为:W。
谱聚类的任务就是根据这个相似度矩阵,将这一大堆对象,分成不同的小堆,小堆内部的对象彼此都很像,小堆之间则不像。
谱聚类本身也提供了好几种不同的分割(cut)方法,每种方法对应一种优化目标。
本文只介绍其中比较常见,也是比较实用,而且实现起来也比较经济的一种:Nomarlized cut.
说白了,就是你最应该掌握和使用的一种,好了,进入正题。
当你得到一个相似度矩阵W后,即可通过以下几个步骤,来得到对应的图分割方案:
1. 计算对角矩阵D[N*N]。,公式如下:
D矩阵为对角矩阵,对角线上的值为W矩阵中对应行或列的和。
2. 计算拉普拉斯矩阵(Laplacian) L:
3. 归一化L矩阵
4. 计算归一化后L矩阵的K个最小特征值及对应的特征向量
将K个特征向量竖着并排放在一起,形成一个N*K的特征矩阵,记为Q。
5. 对特征矩阵Q做kmeans聚类,得到一个N维向量C。
分别对应相似度矩阵W中每一行所代表的对象的所属类别,这也就是最终的聚类结果。
此外:
关于第3步中,对拉普拉斯矩阵归一化时,归一化公式进行变换得到:
令:
则在第4步中,我们可以将求L的K个最小特征值及其对应的特征向量的问题,转化为求矩阵E的K个最大的特征值及其对应的特征向量。
---可以证明:L的K个最小特征值对应的特征向量,分别对应于E的K个最大的特征值对应的特征向量。
且矩阵L的最小特征值为0,对应于矩阵E最大的特征值为1.矩阵L的第K小特征值等于1-矩阵E的第K大特征值
之所以要这么做,是因为在数值计算中,求矩阵的最大特征值,往往要比求最小特征值更方便和高效。
OK,至此,谱聚类就完成了,关于谱聚类的其他问题,诸如公式的推导,以及谱聚类的物理意义等,可参考博文:谱聚类算法。
谱聚类的实现很简单,按照上述5个步骤按部就班即可,在matlab中只需寥寥数行:
function C = SpectralClustering(W, k) [n,m] = size(W) s = sum(W); D = full(sparse(1:n, 1:n, s)); E = D^(-1/2)*W*D^(-1/2); [Q, V] = eigs(E, k); C = kmeans(Q, k); end
在整个实现过程中,比较麻烦的就是E矩阵特征值的求解。
在自己实现时,可以调用已有的线性代数的包来完成这一步。
相关推荐
谱聚类算法即python实现,包括python sklearn库中关于谱聚类参数的描述,较详细地说明谱聚类算法中各个参数的含义并且给出一些调参方法。
【图像分割】基于谱聚类算法实现图像分割matlab源码.md
本资源提供了一种结合杰卡德相似性系数与距离相似度矩阵(DSM)的谱聚类算法实现。 首先,我们要理解谱聚类的基本原理。谱聚类的核心是将数据的相似性关系转化为图论中的边权重,然后通过图的拉普拉斯矩阵来寻找...
### 空间一致性约束谱聚类算法用于图像分割 #### 概述 近年来,随着计算机视觉技术的发展,图像分割作为图像处理中的一个重要环节受到了广泛关注。图像分割的主要目的是将图像分成若干个有意义的区域,这些区域...
在MATLAB环境中,实现谱聚类算法通常涉及以下几个步骤: 1. **数据预处理**:首先,需要将图像转化为像素间的相似性矩阵,这通常可以通过计算像素间的颜色、纹理或空间距离得到。 2. **构建图**:利用相似性矩阵...
使用MATLAB实现谱聚类算法,可以方便地利用其强大的数学库和可视化工具,快速实现算法并直观地观察结果。 在谱聚类算法中,主要有以下几个关键步骤: 1. **构建相似性矩阵**:根据数据点之间的距离或相似度,如欧氏...
在本案例中,我们将探讨如何使用MATLAB实现谱聚类算法对随机生成的数据点进行分类。 MATLAB是一种强大的数学计算和数据分析环境,特别适合进行数值计算和算法开发。在本案例中,MATLAB被用于生成随机数据点,并应用...
在提供的"谱聚类算法.zip"文件中,我们可以推测包含了一个谱聚类算法的实现。这个实现可能包括了数据读取、计算相似矩阵、特征向量计算(如拉普拉斯特征映射)、聚类(例如通过k-means或者直接通过特征向量分割)...
谱聚类算法可以按照不同的方法进行分类,如基于图论的谱聚类算法、基于矩阵分解的谱聚类算法、基于张成的谱聚类算法以及基于深度学习的谱聚类算法等。这些算法各有特点,应用场景也不同。基于图论的谱聚类算法利用...
谱聚类算法能在任意的样本空间上进行聚类,并且谱聚类算法比较易于实现,可以使用标准线性代数方法来实现。 知识点4:自适应模糊谱聚类算法 本文提出了一种自适应模糊谱聚类算法,通过引入自适应算法解决聚类数目...
1.Matlab实现基于谱聚类(Spectral Cluster)的聚类算法可视化(完整源码和数据) 2.多特征输入 , 并利用t SNE进行降维可视化3.附赠测试数据,直接替换Excel数据即可用,运行main一键出图;4.代码特点:参数化编程、...
MYAP:基于划分的聚类AP(Affinity Propagation Clustering Algorithm )算法的底层实现--近邻传播聚类算法 Adaptive-DBSCAN:自适应的基于密度的空间聚类(Adaptive Density-Based Spatial Clustering of ...
在“spectural_clustering_聚类_谱聚类_谱聚类算法_”这个主题中,我们将深入探讨谱聚类的基本原理、优化策略以及如何在Python中实现。 谱聚类的核心在于将数据集转化为图,每个数据点是图中的一个节点,节点间的边...
在提供的文件列表中,"kmeans1.m"很可能是一个MATLAB程序,实现了k-均值聚类算法。这个程序可能接受一个灰度图像矩阵和聚类中心的数目作为输入,然后进行聚类操作,并返回最终的聚类中心。通过查看和运行这个脚本,...
谱聚类算法广泛应用于图像分割、文本分类、社交网络分析等领域。由于其对初始条件的依赖性较弱,相比其他聚类方法如K-means,谱聚类在处理非凸形状的簇时具有更好的性能。然而,计算复杂度较高,当数据规模较大时,...
这些MATLAB文件可能包含了数据预处理、谱聚类算法的实现以及结果的可视化等内容。 总之,谱聚类算法通过电气距离这一关键指标,能够有效地对电力系统进行分区,提升系统运行的稳定性和效率。在实际应用中,我们需要...
【聚类算法】使用numpy实现的聚类算法(包括时空聚类算法)【PGJ】.zip 【聚类算法】使用numpy实现的聚类算法(包括时空聚类算法)【PGJ】.zip 【聚类算法】使用numpy实现的聚类算法(包括时空聚类算法)【PGJ】.zip...
Java实现的k-means聚类算法详解 k-means聚类算法是一种常用的无监督学习算法,用于对数据进行聚类分析。该算法的主要思想是将相似的数据点聚类到一起,形成不同的簇。Java语言是实现k-means聚类算法的不二之选。 ...