`

谱聚类算法实现

阅读更多

谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法。

将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远,以达到常见的聚类的目的。

"带权无向图"这个词太学术了,我们换一种叫法,即:相似度矩阵。

假设我们有一个相似度矩阵,矩阵中存的是所有对象的两两相似度。

 

那么这个矩阵应该有如下性质:

  1. 矩阵为N * N,N为对象总数
  2. 矩阵对角线的值为0,自己和自己相似个毛啊
  3. 矩阵为对称矩阵,及相似度是无向的

我们将该矩阵记为: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矩阵特征值的求解。

在自己实现时,可以调用已有的线性代数的包来完成这一步。

 

 

 

  • 大小: 3.5 KB
  • 大小: 1.9 KB
  • 大小: 2.9 KB
  • 大小: 2.2 KB
  • 大小: 21 KB
  • 大小: 3 KB
分享到:
评论

相关推荐

    谱聚类算法实现.ipynb

    谱聚类算法即python实现,包括python sklearn库中关于谱聚类参数的描述,较详细地说明谱聚类算法中各个参数的含义并且给出一些调参方法。

    【图像分割】基于谱聚类算法实现图像分割matlab源码.md

    【图像分割】基于谱聚类算法实现图像分割matlab源码.md

    谱聚类算法MATLAB

    本资源提供了一种结合杰卡德相似性系数与距离相似度矩阵(DSM)的谱聚类算法实现。 首先,我们要理解谱聚类的基本原理。谱聚类的核心是将数据的相似性关系转化为图论中的边权重,然后通过图的拉普拉斯矩阵来寻找...

    空间一致性约束谱聚类算法用于图像分割

    ### 空间一致性约束谱聚类算法用于图像分割 #### 概述 近年来,随着计算机视觉技术的发展,图像分割作为图像处理中的一个重要环节受到了广泛关注。图像分割的主要目的是将图像分成若干个有意义的区域,这些区域...

    谱聚类算法对图像进行分割

    在MATLAB环境中,实现谱聚类算法通常涉及以下几个步骤: 1. **数据预处理**:首先,需要将图像转化为像素间的相似性矩阵,这通常可以通过计算像素间的颜色、纹理或空间距离得到。 2. **构建图**:利用相似性矩阵...

    归一化谱聚类算法

    使用MATLAB实现谱聚类算法,可以方便地利用其强大的数学库和可视化工具,快速实现算法并直观地观察结果。 在谱聚类算法中,主要有以下几个关键步骤: 1. **构建相似性矩阵**:根据数据点之间的距离或相似度,如欧氏...

    谱聚类算法对数据点进行分类

    在本案例中,我们将探讨如何使用MATLAB实现谱聚类算法对随机生成的数据点进行分类。 MATLAB是一种强大的数学计算和数据分析环境,特别适合进行数值计算和算法开发。在本案例中,MATLAB被用于生成随机数据点,并应用...

    谱聚类算法.zip

    在提供的"谱聚类算法.zip"文件中,我们可以推测包含了一个谱聚类算法的实现。这个实现可能包括了数据读取、计算相似矩阵、特征向量计算(如拉普拉斯特征映射)、聚类(例如通过k-means或者直接通过特征向量分割)...

    谱聚类算法综述.docx

    谱聚类算法可以按照不同的方法进行分类,如基于图论的谱聚类算法、基于矩阵分解的谱聚类算法、基于张成的谱聚类算法以及基于深度学习的谱聚类算法等。这些算法各有特点,应用场景也不同。基于图论的谱聚类算法利用...

    自适应的模糊谱聚类算法在文本聚类中的应用.docx

    谱聚类算法能在任意的样本空间上进行聚类,并且谱聚类算法比较易于实现,可以使用标准线性代数方法来实现。 知识点4:自适应模糊谱聚类算法 本文提出了一种自适应模糊谱聚类算法,通过引入自适应算法解决聚类数目...

    Matlab实现基于谱聚类(Spectral Cluster)的聚类算法可视化(完整源码和数据)

    1.Matlab实现基于谱聚类(Spectral Cluster)的聚类算法可视化(完整源码和数据) 2.多特征输入 , 并利用t SNE进行降维可视化3.附赠测试数据,直接替换Excel数据即可用,运行main一键出图;4.代码特点:参数化编程、...

    使用numpy实现的聚类算法(包括时空聚类算法)

    MYAP:基于划分的聚类AP(Affinity Propagation Clustering Algorithm )算法的底层实现--近邻传播聚类算法 Adaptive-DBSCAN:自适应的基于密度的空间聚类(Adaptive Density-Based Spatial Clustering of ...

    spectural_clustering_聚类_谱聚类_谱聚类算法_

    在“spectural_clustering_聚类_谱聚类_谱聚类算法_”这个主题中,我们将深入探讨谱聚类的基本原理、优化策略以及如何在Python中实现。 谱聚类的核心在于将数据集转化为图,每个数据点是图中的一个节点,节点间的边...

    k-均值聚类算法实现灰度图像分割_K均值算法_K._图像聚类_图像聚类_图像分割_

    在提供的文件列表中,"kmeans1.m"很可能是一个MATLAB程序,实现了k-均值聚类算法。这个程序可能接受一个灰度图像矩阵和聚类中心的数目作为输入,然后进行聚类操作,并返回最终的聚类中心。通过查看和运行这个脚本,...

    Ncut_9.zip_ncut_ncut算法_谱聚类_谱聚类MATLAB_谱聚类算法

    谱聚类算法广泛应用于图像分割、文本分类、社交网络分析等领域。由于其对初始条件的依赖性较弱,相比其他聚类方法如K-means,谱聚类在处理非凸形状的簇时具有更好的性能。然而,计算复杂度较高,当数据规模较大时,...

    mohujulei_电力系统分区_分区_谱聚类算法_谱聚类分区_电气距离

    这些MATLAB文件可能包含了数据预处理、谱聚类算法的实现以及结果的可视化等内容。 总之,谱聚类算法通过电气距离这一关键指标,能够有效地对电力系统进行分区,提升系统运行的稳定性和效率。在实际应用中,我们需要...

    聚类算法使用numpy实现的聚类算法(包括时空聚类算法)PGJ.zip

    【聚类算法】使用numpy实现的聚类算法(包括时空聚类算法)【PGJ】.zip 【聚类算法】使用numpy实现的聚类算法(包括时空聚类算法)【PGJ】.zip 【聚类算法】使用numpy实现的聚类算法(包括时空聚类算法)【PGJ】.zip...

    详解Java实现的k-means聚类算法

    Java实现的k-means聚类算法详解 k-means聚类算法是一种常用的无监督学习算法,用于对数据进行聚类分析。该算法的主要思想是将相似的数据点聚类到一起,形成不同的簇。Java语言是实现k-means聚类算法的不二之选。 ...

Global site tag (gtag.js) - Google Analytics