谱聚类原理总结

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475

引入

聚类算法一般可以分为两类:

  1. Compactness。代表的算法有  K-means,GMM 等。但这类算法只能处理凸集,为了处理非凸的样本集,必须引⼊核技巧。
  2. Connectivity。这类以  spectral clustering  为代表。

举个例子,将下述数据采用聚类算法进行聚类,可以采用  GMM 或  K-Means  的方法:

然而对于下述数据却并不能使用上述两种算法:

此时可以考虑采用谱聚类(spectral clustering)的方法。

谱聚类算法(Spectral Clustering)

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


1 基础知识

1.1 无向带权图

对于一个图 GGG ,一般用  VVV  代表点的集合 和用  EEE  来描述边的集合。则  G(V,E)G(V,E)G(V,E) 。其中, V=(v1,v2,…vn)V=(v1,v2,…vn)V=(v_1, v_2,…v_n)  。对于  VVV  中的任意两个点,可以有边连接,也可以没有边连接。定义权重  wijwijw_{ij}  为点  viviv_i  和点  vjvjv_j  之间的权重。对于无向图,有   wij=wjiwij=wjiw_{ij} = w_{ji}。

权重:对于有边相连的两个点  viviv_i  和  vjvjv_j,有  wij>0wij>0w_{ij} > 0 ,  对于没有边连接的两个点  viviv_i  和  vjvjv_j  ,wij=0wij=0w_{ij} = 0。

度:对于图中的任意一个点  viviv_i  ,它的度  didid_i  定义为和它相连的所有边的权重之和,即 :

di=∑j=1nwijdi=∑j=1nwijd_i = \sum\limits_{j=1}^{n}w_{ij}

利用节点的权重值,可以得到图的邻接矩阵  WWW  ,是一个  n×nn×nn \times n  的矩阵,第  iii  行的第  jjj  个值对应的权重为  wijwijw_{ij}。

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

    • |A|:=子集A中点的个数|A|:=子集A中点的个数|A|: = 子集A中点的个数
      • vol(A):=∑i∈Adivol(A):=∑i∈Adi vol(A): = \sum\limits_{i \in A}d_i

利用每个节点的度,可以得到一个  n×nn×nn \times n  的度矩阵  DDD,它是一个对角矩阵,只有主对角线有值,对应第  iii  行的第  i个i个i个  点的度数,定义如下:

D=⎛⎝⎜⎜⎜⎜⎜d1…⋮……d2⋮………⋱dn⎞⎠⎟⎟⎟⎟⎟D=(d1………d2…⋮⋮⋱……dn)\mathbf{D} =\left( \begin{array}{ccc}d_1 & \ldots & \ldots \ \ldots & d_2 & \ldots \  \vdots & \vdots & \ddots \  \ldots & \ldots & d_n \end{array} \right)

1.2 相似矩阵

一般情况下,邻接矩阵  WWW,通常可以自己输入权重,但在谱聚类中,我们只有数据点的定义,并没有直接给出这个邻接矩阵,那么怎么得到这个邻接矩阵呢?

基本思想:距离较远的两个点之间的边权重值较低,而距离较近的两个点之间的边权重值较高。一般来说,可以通过样本点距离度量的相似矩阵  SSS  来获得邻接矩阵  WWW。

构建邻接矩阵  WWW  的方法有三类:

    1. ϵϵ\epsilon - 邻近法
    2. KKK 邻近法
    3. 全连接法

1.2.1 ϵϵ\epsilon-邻近法

首先,设置一个距离阈值  ϵϵ\epsilon  ,然后用欧式距离  sijsijs_{ij}  度量任意两点  xixix_i  和  xjxjx_j  的距离。即相似矩阵的  sij=||xi−xj||22sij=||xi−xj||22s_{ij} = ||x_i-x_j||_2^2 ,然后根据  sijsijs_{ij}  和  ϵϵ\epsilon  的大小关系,来定义邻接矩阵  WWW  如下:

wij={0ϵsij>ϵsij≤ϵwij={0sij>ϵϵsij≤ϵw_{ij}=\begin{cases}0& {s_{ij} > \epsilon}\\epsilon& { {s_{ij} \leq \epsilon}}\end{cases}

从上式可见,两点间的权重要不是  ϵϵ\epsilon,要不就是  000。显然这很难精确区分每个点之间的距离大小。所以很少使用  ϵϵ\epsilon- 邻近法。

1.2.2 KKK  邻近法

基本思想:利用  KNN  算法遍历所有的样本点,取每个样本最近的  kkk  个点作为近邻,只有和样本距离最近的  kkk  个点之间的  wij>0wij>0w_{ij} > 0  。

但是这种方法会造成重构之后的邻接矩阵  WWW  非对称,且后面的算法需要对称邻接矩阵。为解决这种问题,一般采取下面两种方法之一:

**Method1:**第一种  KKK  邻近法是只要一个点在另一个点的  KKK 近邻中,则保留  sijsijs_{ij}:

wij=wji={0exp(−||xi−xj||222σ2)xi∉KNN(xj)andxj∉KNN(xi)xi∈KNN(xj)orxj∈KNN(xi)wij=wji={0xi∉KNN(xj)andxj∉KNN(xi)exp(−||xi−xj||222σ2)xi∈KNN(xj)orxj∈KNN(xi)w_{ij}=w_{ji}=\begin{cases}0& {x_i \notin KNN(x_j) ;and ;x_j \notin KNN(x_i)}\exp(-\frac{||x_i-x_j||_22}{2\sigma2})& {x_i \in KNN(x_j); or; x_j \in KNN(x_i})\end{cases}

**Method2:**第二种  KKK  邻近法是必须两个点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值