谱聚类的复杂说明

谱聚类做的是在某个距离函数的作用下,提取目标的二阶微分特征,根据特征进行聚类。

步骤:

  1. 有N个样本。
  2. 根据径向基函数(一种距离度量函数)获得点与点之间的距离关系。它们可以构成一个N×N的相似度对称矩阵W。
  3. 将S的每一行元素相加,并将结果放在对角上,获得对角的度矩阵D,尺寸依然是N×N。
  4. 获得拉普拉斯矩阵L = D - W。这个做法虽然看起来不像二阶微分,但确实是图的二阶微分,详情看这里拉普拉斯矩阵的含义
  5. 计算L的前K个特征值,并获得特征向量。K是你想聚类的类别数。将K个特征向量拼成N×K的特征矩阵S。这一步可以看作是对每个点相较于其他点的特征提取,即第i行就代表第i个点在全局中的特征。
  6. 以行为向量,进行 K-means聚类。

谱聚类

类似于混合高斯分布GMM,K-means等聚类方法,在遇到以下这一类数据的时候都会望洋兴叹。
在这里插入图片描述

简单来说,数据不是个凸集。

谱聚类就能很好地解决这类聚类问题。(当然,DBSCAN也能)

原理

谱聚类的思想发源于图。在图中,我们可以很轻易地用cut(切割)的方式(即切割边),使图一分为二,然后说这两部分就是两类数据。而图中的边代表两个节点之间的相似度。
在这里插入图片描述
这是我随便画的一个图。
可以看到我用绿线将这6个节点分为了两派,A和B。
我令 i , j i,j i,j为边连接的两个点的序号,可以知道相似度
w i , j = { K ( x i , x j ) ( i , j ) ∈ E 0 o t h e r w i s e w_{i,j}=\left\{ \begin{aligned} K(x_i, x_j) && (i,j)∈E\\ 0 &&otherwise \\ \end{aligned} \right. wi,j={K(xi,xj)0(i,j)Eotherwise
其中, K ( x i , x j ) K(x_i,x_j) K(xi,xj)是计算相似度的函数,一般用高斯核函数。E代表边的集合,(i,j)所在的边在E中.

接下来,我假设我将一个图 V V V切割成了 k k k份,计算这个图的cut分数:
c u t ( V ) = c u t ( A 1 , A 2 , . . . , A k ) = ∑ i = 1 k W ( A i , A ‾ i ) = ∑ i = 1 k W ( A i , V ) − W ( A i , A i ) cut(V) = cut(A_1, A_2, ..., A_k) = \sum_{i=1}^{k}W(A_i, \overline A_i) \\ = \sum_{i=1}^{k} W(A_i, V) - W(A_i,A_i) cut(V)=cut(A1,A2,...,Ak)=i=1kW(Ai,Ai)=i=1kW(Ai,V)W(Ai,Ai)

c u t ( V ) cut(V) cut(V)计算的是各个子图之间的相似度分数,所以很显然,我们的目标是:
m i n c u t ( V ) min cut(V) mincut(V)
或者说是
arg min ⁡ A i . . . A k c u t ( V ) \argmin_{A_i...A_k} cut(V) Ai...Akargmincut(V)
也就是说, c u t ( V ) cut(V) cut(V)就是我们切割图的 l o s s loss loss;最小化子图之间的相关度,就是我们的目标。

Ncut

由于子图节点数的差异,点多的和点少的子图的 W ( A i , A ‾ i ) W(A_i, \overline A_i) W(Ai,Ai)直接比较是没有意义的,所以最好做个平均,即,将子图的 W ( A i , A ‾ i ) W(A_i, \overline A_i) W(Ai,Ai)平均到子图内的每个点上。用平均值代表该子图对其他子图的相似度。
但武断地用平均值作为子图的相似度,缺少道理。

我们不如做个normalization。加了normalization的cut被叫做Ncut。

N c u t Ncut Ncut具体做法是:
N c u t ( V ) = ∑ i = 1 k W ( A i , A ‾ i ) ∑ i ∈ A i ∑ j = 1 N w i , j Ncut(V) = \sum_{i=1}^{k} \frac {W(A_i, \overline A_i)}{\sum _{i∈A_i}\sum_{j=1}^{N}w_{i,j}} Ncut(V)=i=1kiAij=1Nwi,jW(Ai,Ai)

增加了一个分母,它是将 A i A_i Ai内的所有点相对于其他所有点的相似度加和,代表了 A i A_i Ai对其他所有点的相似度。而分子是 A i A_i Ai内的所有点相对于除了 A i A_i Ai的点的相似度。所以为了压低 N c u t ( V ) Ncut(V) Ncut(V),必须要求 A i A_i Ai自己的内聚性要高,同时对其他子图又有低相似度。

转换

N c u t ( V ) Ncut(V) Ncut(V)套了很多的 ∑ \sum 符号。这很恼人。
我们想方设法将它变成矩阵计算的形式,最终想到,计算对角矩阵的trace(迹)正是连加的另一种形式。
所以如下变换:
t r ( [ W ( A 1 , A ‾ 1 ) . . . 0 0 W ( A 2 , A ‾ 2 ) . . . . . . . . . . . . . . . 0 0 . . . W ( A k , A ‾ k ) ] [ ∑ i ∈ A 1 ∑ j = 1 N w i , j . . . . . . 0 0 ∑ i ∈ A 2 ∑ j = 1 N w i , j . . . . . . . . . . . . . . . 0 0 . . . . . . ∑ i ∈ A k ∑ j = 1 N w i , j ] − 1 ) tr\begin{pmatrix}\\ \begin {bmatrix} \\ W(A_1, \overline A_1) & ...& &0 \\ 0 & W(A_2,\overline A_2)&...&... \\ ... & ... & ...&0\\ 0 & ...&&W(A_k,\overline A_k) \end{bmatrix} \begin{bmatrix} \\ \sum _{i∈A_1}\sum_{j=1}^{N}w_{i,j}& ...&...&0 \\ 0 & \sum _{i∈A_2}\sum_{j=1}^{N}w_{i,j}&...&... \\ ... & ...&...&0 \\ 0&...&...&\sum _{i∈A_k}\sum_{j=1}^{N}w_{i,j} \\ \end{bmatrix}^{-1} \end{pmatrix} trW(A1,A1)0...0...W(A2,A2)............0...0W(Ak,Ak)iA1j=1Nwi,j0...0...iA2j=1Nwi,j..................0...0iAkj=1Nwi,j1

请自己看懂上面的式子,至关重要。
我们将变换简写为 t r ( O P − 1 ) tr(OP^{-1}) tr(OP1)
暂时搁置 O O O矩阵, P P P矩阵的化简比较简单。

P的转换

首先新建一个值 Y = [ y 1 , y 2 , . . . , y n ] Y=[y_1,y_2,...,y_n] Y=[y1,y2,...,yn]Y的尺寸是(k×n), k是类别数量,n是样本数量。
所以有 Y Y T = [ y 1 , y 2 , . . . , y n ] [ y 1 y 2 . . . y n ] YY^T=\begin {bmatrix} y_1,y_2,...,y_n\\ \end{bmatrix} \begin {bmatrix} y_1\\ y_2\\ ...\\ y_n\\ \end{bmatrix} YYT=[y1,y2,...,yn]y1y2...yn Y Y T YY^T YYT尺寸为(k×k)。它的计算结果是个对角矩阵,每个在(i,i)上的对角元素都代表着n个样本中属于i类的有几个。写成矩阵形式,就是 Y Y T = [ ∑ i ∈ A 1 1 . . . 0 0 ∑ i ∈ A 2 1 . . . . . . . . . . . . . . . 0 0 . . . ∑ i ∈ A k 1 ) ] YY^T=\begin {bmatrix} \\ \sum_{i∈A_1} 1 & ...& &0 \\ 0 & \sum_{i∈A_2} 1&...&... \\ ... & ... & ...&0\\ 0 & ...&&\sum_{i∈A_k} 1) \end{bmatrix} YYT=iA110...0...iA21............0...0iAk1)这个形式和矩阵 P P P太像了,只是缺少了 d i d_i di,但不要紧,接下来这个 Y D Y T = P YDY^T=P YDYT=P D = [ d 1 d 2 . . . d n ] = d i a g ( [ w 11 . . . . . . w 1 n . . . . . . . . . . . . . . . . . . . . . . . . w n 1 . . . . . . w n n ] [ 1 1 . . . 1 ] ) D=\begin{bmatrix} d_1&&&&\\ &d_2&&\\ &&...\\ &&&d_n\\ \end{bmatrix}=diag\begin{pmatrix}\begin{bmatrix} w_{11}&...&...&w_{1n}&\\ ...&...&...&...\\ ...&...&...&...\\ w_{n1}&...&...&w_{nn}\\ \end{bmatrix}\begin{bmatrix}1\\ 1\\ ...\\ 1\\ \end{bmatrix}\end{pmatrix} D=d1d2...dn=diagw11......wn1........................w1n......wnn11...1就完全成立了。

O的转换

W ( A i , A ‾ i ) = W ( A i , V ) − W ( A i , A i ) W(A_i, \overline A_i)=W(A_i, V)-W(A_i, A_i) W(Ai,Ai)=W(Ai,V)W(Ai,Ai)
W ( A i , V ) = Y D Y T W(A_i, V)=YDY^T W(Ai,V)=YDYT,这是已经有的了。
对于后者,我们可以近似地把它写成:
W ( A i , A i ) ≈ Y W Y T W(A_i, A_i) ≈ YWY^T W(Ai,Ai)YWYT注意注意,这里需要仔细理解。 W ( A i , A i ) W(A_i, A_i) W(Ai,Ai)是个对角矩阵;由于 W W W不是对角矩阵, Y W Y T YWY^T YWYT不是对角矩阵。为什么可以用后者替代前者?
因为 W ( A i , V ) W(A_i, V) W(Ai,V)是对角矩阵,两者相减,会保留 W ( A i , A i ) W(A_i, A_i) W(Ai,Ai)的非对角数据。但这些数据在求 t r a c e trace trace时没有任何用处, t r a c e trace trace只计算对角数值的和。所以如此替换也不会对结果产生影响。
所以现在有 W ( A i , A ‾ i ) = W ( A i , V ) − W ( A i , A i ) = Y D Y T − Y W Y T = Y L Y T W(A_i, \overline A_i)=W(A_i, V)-W(A_i, A_i)=YDY^T-YWY^T=YLY^T W(Ai,Ai)=W(Ai,V)W(Ai,Ai)=YDYTYWYT=YLYT这才是拉普拉斯矩阵L产生的原因。

目标函数

Y = arg min ⁡ Y t r ( Y L Y T ⋅ ( Y D Y T ) − 1 ) Y = \argmin_Y tr(YLY^T·(YDY^T)^{-1}) Y=Yargmintr(YLYT(YDYT)1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值