小白入门谱聚类算法原理与实现

    • 小白入门谱聚类算法原理与实现
  • 1. 谱聚类是什么?
  • 2.谱聚类步骤
    • 2.1 谱聚类构图
    • 2.2 谱聚类切图
      • 2.2.1RatioCut
      • 2.2.2Ncut
  • 3谱聚类实现

小白入门谱聚类算法原理与实现

文章结构主要分为下面三个部分
①谱聚类是什么
②谱聚类怎么进行聚类
③谱聚类应用例子

1. 谱聚类是什么?

首先回顾一下聚类的概念:

  1. 聚类:对大量未知标注的数据集,按数据的内在相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小

  2. 谱聚类:是一种基于图论的聚类方法,通过对样本数据的拉普拉斯矩阵的特征向量进行聚类,从而达到对样本数据聚类的目的。

直观的解释就是将聚类问题转化为一个无向图的多路划分问题,数据点看成无向图G(V,E)中的顶点V,加权边的集合E={Sij}表示基于某一点相似性度量的两点间的相似度,用S表示待聚类数据点之间的相似性矩阵,图G中把聚类问题转变为在图G上的图划分问题,即将图G(V,E)划分为K个互不相交的子集V1,V2,...Vk,划分后每个子集Vi和Vj之间的相似程度较低,每个子集内部相似度较高。
    所以谱聚类的思想就是要转化为图分割的问题,因此下面从图的概念进行引入。
简单回顾一下图的基本概念

    上图是一个无向图,且边上带有权重,所以是一个带权重的无向图G(V,E),V就是上图中的顶点,E就是点与点之间的边,由于无向图,可得点Vi和点Vj的权重关系为:Wij = Wji。
    另外,度矩阵:根据每个顶点度的定义,得到一个对角矩阵D(6X6),在这里可得度矩阵D如下

邻接矩阵:任意两点之间的权重值Wij组成的矩阵。此时,Wij = Wji
在这里定义邻接矩阵W如下

拉普拉斯矩阵的定义很简单:L = D - W ,从前面可得,D是度矩阵、W是邻接矩阵。不过拉普拉斯有一些性质我们需要了解一下:
1.拉普拉斯是对称矩阵,(D和W也是对称矩阵)
2.由于拉普拉斯矩阵是对称矩阵,则它的所有特征值都是实数。
3.对于任意的向量f,都有
4.拉普拉斯矩阵是半正定的,且对应的n个实数特征值都大于等于0,且最小的特征值是0。

2.谱聚类步骤

有了图的概念之后,下面进入谱聚类的步骤。
下面以简单的6个样本为例,如下图所示

    现在有6个样本(6个顶点),需要对这些样本进行聚类的话,我们应该怎么进行聚类呢?哪些样本应该聚在一起呢?哪些样本聚在一起的结果是最合理的呢?

2.1 谱聚类构图

首先,当我们拿到样本之后,我们必须思考的是怎么把顶点连接起来呢?
在谱聚类构图中,一般有三种构图方式:
1.ε-neighborhood
2. k-nearest neighborhood
3. fully connected
前两种可以构造出系数矩阵,适合大样本的项目,第三种则相反,在大样本中其迭代速度会受到影响制约。

ε -neighborhood 方法一般使用欧式距离:
来构造矩阵S,称为相似矩阵。而邻接矩阵也就是Sij ≤ ε的顶点之间的Sij值,则邻接矩阵W:
可以看出,样本之间的权重没有包含更多的信息了,所以一般不采用这种方法。

k-nearest neighborhood方法是利用KNN算法,但是这种方法会造成重构之后的邻接矩阵W非对称,所以一般采用两种方法之一:

  • 只要点xi在xj的K个近邻中或者xj在xi的K个近邻中,则保留si,j,并对其做进一步处理W,此时 为:
  • 是必须满足点 在 的K个近邻中且 在 的K个近邻中,才会保留si,j并做进一步变换,此时W为:

fully connected是第三种方法,一般使用的是高斯距离公式计算:

重构后的矩阵W与相似矩阵相同,即:Wi,j=Si,j。一般来说,第一第二种构图方式是基于欧式距离,而第三种构图方式是基于高斯距离,我们可以看到高斯距离计算中,对于∥xi−xj∥^2比较大的样本点,其得到的高斯距离反而值是比较小的,而这也正是S可以直接作为W的原因,主要是为了将距离近的点的边赋予高权重。

此时,得到邻接矩阵W后,需要计算度矩阵D:
其中Wij为邻接矩阵W元素,在这里度矩阵每个顶点的值为该顶点所连接其他顶点的边的权重之和,可以知道,D为对角矩阵。
    因此计算拉普拉斯矩阵L:L= D - W,到这里构图步骤完成,然后我们需要对构成的图进行子图划分。

2.2 谱聚类切图

谱聚类切图存在两种主流的方式:RatioCut和Ncut,下面对于切图步骤进行讲解。
    对于无向图G的切图,目的是切成相互没有连接的k个子图,每个子图的集合是A1,A2,…,Ak,子图间没有交集且各子图之和为所有顶点。那么对于子集与子集之间连边的权重和为:
公式的意思是对于每个点Ai,求得Ai与其他所有子集的连边(权重)的和,该和越小,说明子图与子图之间的联系越小,所以我们的目标函数表述为:
看起来似乎可行,但是这种切图方式存在问题,

如上图所示,用这种方法且会造成将V切成很多歌单点离散的图,显然这样是最快且最能满足最小化操作的,但是明显不是想要的结果,所以下面引出了RatioCut和Ncut两种优化的切图方式。

2.2.1RatioCut

Ratio切图考虑了子图的大小,避免了单个样本点作为一个簇的情况发生,平衡了各子图的大小,即

其中|Ai|是Ai子集中顶点的个数,对上述极小化问题做一下转化,引入{A1,A2,…,Ak}的指示向量,hj={h1,h2,⋯,hi,⋯,hk},j=1,2,⋯,k. 其中i表示样本下标,j表示子集下标, 表示样本i对子集j的指示,具体为:可以理解为,每个子集Aj对应一个指示向量hj,而每个hj里有N个元素,分别代表N个样本点的指示结果,如果在原始数据中第i个样本被分割到子集Aj里,则hj的第i个元素为1除以第j个子集样本个数再开根号,否则为0。
然后经过转化(此处数学推导)把求解目标转化为:
对于上式中,由于L矩阵是容易得到的,所以目标是求满足条件的H矩阵。要求条件下的H,首先需要得到组成H的每个指示向量hi,而每个hi是Nx1的向量,但找到满足上面优化目标的H是一个NP难的问题。这时候,根据论文(A short theory of the Rayleigh-Ritz method)推导,我们求解这个优化目标H只需要求得L矩阵的K个最小特征值对应的特征向量即可组成目标H。
    这时候H矩阵也求得,接下来就是对样本进行聚类,我们将H中每一行作为输入进行kmeans聚类,最后输出各个簇类。

2.2.2Ncut

Ncut切图方式和RatioCut切图非常相似,但Ncut的分母是vol(Ai),由于子图样本的个数多,并不一定权重就大,我们切图时基于权重更符合我们的目标,因此一般来说采用Ncut方式比较多。

下面先引入{A1,A2,…,Ak}的指示变量hj={h1,h2,⋯,hi,⋯,hk},j=1,2,⋯,k,同样,其中i表示样本下标,j表示子集下标,hj,i表示样本i对子集j的指示,不同的是,其具体为:

如果在原始数据中第i个样本被分割到子集Aj里,则hj的第i个元素为1/Ai子集中每个顶点权重之和开根,否则为0。
然后经过转化(此处数学推导)把求解目标转化为:
同理,F矩阵的求解可通过求D−1/2LD−1/2的前K个特征向量组成,最后对F的行进行kmeans聚类。
   总体流程而言,谱聚类算法的步骤如下:

3谱聚类实现

本次代码实现使用的是Python,谱聚类方法是调用sklearn机器学习函数库,数据样本为:

#数据集
datasets.make_circles(n_samples, factor=0.5, noise=0.05)
#调用模型
model = SpectralClustering(n_clusters=2, gamma)

最终实现结果为:

    聚类如上图所示,左边为谱聚类,右边是Kmeans聚类,显然谱聚类效果更好。
    从理解而言,整体来说,谱聚类算法要做的就是先求出相似性矩阵,然后对该矩阵归一化运算,之后求前个特征向量,最后运用K-means算法分类。 实际上,谱聚类要做的事情其实就是将高维度的数据,以特征向量的形式简洁表达,属于一种降维的过程。本来高维度用k-means不好分的点,在经过线性变换以及降维之后,十分容易求解。

  • 谱聚类优点:
    ①对数据结构并没有太多的假设要求,如kmeans则要求数据为凸集。
    ②可以构造稀疏similarity graph,使得对于更大的数据集相对来说也能有较好的计算速度
    ③由于谱聚类是对图切割处理,不会像kmesns聚类时将离散的小簇聚合在一起的情况。
  • 缺点:
    ①对于选择不同的构图方式比较敏感
    ②求解过程主要时间在与矩阵的转换上,同时也需要较大的内存空间

参考资料
【论文】A Short Theory of the Rayleigh–Ritz Method
【博客】https://blog.csdn.net/yc_1993/article/details/52997074
【博客】https://blog.csdn.net/songbinxu/article/details/80838865
【博客】https://blog.csdn.net/pr310762957/article/details/53103709
【博客】https://www.cnblogs.com/pinard/p/6221564.html
【博客】https://www.cnblogs.com/pinard/p/6235920.html

小白入门谱聚类算法原理与实现相关推荐

  1. 干货 | 非常全面的谱聚类算法原理总结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 谱聚类算法是目前最流行的聚类算法之一,其性能及适用场景优于传统的聚 ...

  2. 非常全面的谱聚类算法原理总结

    谱聚类算法是目前最流行的聚类算法之一,其性能及适用场景优于传统的聚类算法如k-均值算法,本文对谱聚类算法进行了详细总结,内容主要参考论文<A Tutorial on Spectral Clust ...

  3. 谱聚类算法原理(二)python实现

    谱聚类算法是目前最流行的聚类算法之一,其性能及适用场景优于传统的聚类算法如k-均值算法,本文对谱聚类算法进行了详细总结,内容主要参考论文<A Tutorial on Spectral Clust ...

  4. 谱聚类算法原理(一)

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

  5. 【机器学习】5:谱聚类算法原理介绍

    前言:学习谱聚类,最好有一些图论.矩阵分解(SVD)方面的知识,这样会更加有利于谱聚类的学习.当然,谱聚类理解起来并不困难,实际操作也大多是谱聚类+K-means聚类联合使用的. –--------- ...

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

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

  7. 谱聚类算法入门教程(一)——Introduction

    该教程记录了我从一个聚类算法小白学习谱聚类算法的过程,在开始学习之前,请确保你了解下面的知识: 线性代数矩阵的相关性质 导数的相关知识 欧式距离 图的基本知识 如果你学过上面的知识但是忘记了也没关系, ...

  8. 到底什么是谱聚类算法?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:视学算法 谱聚类算法是目前最流行的聚类算法之一,其性能及 ...

  9. 谱聚类python代码_Python 谱聚类算法从零开始

    谱聚类算法是一种常用的无监督机器学习算法,其性能优于其他聚类方法. 此外,谱聚类实现起来非常简单,并且可以通过标准线性代数方法有效地求解. 在谱聚类算法中,根据数据点之间的相似性而不是k-均值中的绝对 ...

最新文章

  1. ServiceStack.OrmLite使用
  2. 低功耗蓝牙系统结构流程图
  3. 双曲线和直线联立公式_高中圆锥曲线解题技巧之齐次化联立(四)
  4. 推荐一套开源通用后台管理系统(附源码)
  5. PHP设置页面显示编码
  6. 15个月纪念,开心!
  7. 第十七章 特殊类成员
  8. html5数组删除相同数据,js数组相减简单示例【删除a数组所有与b数组相同元素】...
  9. Wannafly挑战赛9: D. 造一造(组合数)
  10. C语言从入门到精通保姆级教程(2021版上)
  11. 导论 计算机组成 ppt,《计算机导论》说课稿PPT课件.ppt
  12. 【C系列】结构体数组初始化方法
  13. 建立数学模型论文写作
  14. 企业信用等级重不重要?看看各地招标文件就知道了。
  15. 常见的肾囊肿症状有哪些?
  16. 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
  17. 挖财基于大数据的信贷审批系统实践
  18. 计算机数值模拟仿真技术的优点,数值模拟的优缺点优点.ppt
  19. “五彩大棚”蔬菜大棚-国稻种芯:创新植物光合功能各不同
  20. C++核心准则​T.46:要求模板参数最少是正规或半正规的

热门文章

  1. gx xboot.c32 :not a COM32R Image.
  2. 医学图像分割的深度学习:综述
  3. iOS15.4 正式版更新,信号增强,“戴口罩解锁”正式推出
  4. JS重写函数valueOf方法实现连续调用求和
  5. 自动生成文件夹目录结构文档
  6. 人大李崇轩:我的生成模型修炼之路丨智源大会嘉宾风采
  7. c语言中怎么表示多次方?
  8. 颜值与实力齐飞,魔戒Scroll可独立切换AR功能
  9. python3 实现rc4算法
  10. gmapping 算法流程整理