22 谱聚类——Spectral Clustering

22 谱聚类——Spectral Clustering

22.1 背景介绍

我们在一般的聚类过程中,普遍理性而言会有两种思想:

  1. 将聚集在一起的点进行聚类(离得近的为同一类数据),例如可以线性分类的一组数据。
  2. 将具有联通性的一堆点进行聚类,如环形等线性不可分的数据。(这种其实在一定情况下也可以通过Kernel+K-Mean实现——进行非线性转换)

所以我们可以将聚类方法分成两大类:

  1. compactness: K-means, GMM
  2. connectivity: Spectral Clustering

22.2 模型介绍

Spectral Clustering实际上可以表示为一个带权重的无向图。

先给这张图做一个定义:

  1. 基本数据表示为:
    G = { V , E } , V = { 1 , 2 , … , N } , W = [ w i j ] , 1 ≤ i , j ≤ N G = {\lbrace V, E \rbrace}, \quad V = {\lbrace 1, 2, \dots, N \rbrace}, \quad W = [w_{ij}], 1 \leq i, j \leq N G={V,E},V={1,2,,N},W=[wij],1i,jN

  2. 其中 W W W也被称为Simlarity Matrix或Affinity Matrix, w i j w_{ij} wij​表示为:
    w i j = { K ( x i , x j ) = exp ⁡ { − ∥ x i − x j ∥ 2 2 2 σ 2 } ( i , j ) ∈ E 0 o t h e r w i s e w_{ij} = \begin{cases} K(x_i, x_j) = \exp{\lbrace - \frac{{\lVert x_i - x_j \rVert}_2^2}{2 \sigma^2} \rbrace} & (i, j) \in E \\ 0 & otherwise \end{cases} wij={K(xi,xj)=exp{2σ2xixj22}0(i,j)Eotherwise
    代表了节点之间的相似度

  3. 再做一个定义,用于表示一个符号:若 A ⊂ V , B ⊂ V , A ∩ B = ∅ A \subset V, B \subset V, A \cap B = \empty AV,BV,AB=,则表示集合之间的相似度为
    W ( A , B ) = ∑ i ∈ A , j ∈ B w i j W(A, B) = \sum_{i \in A, j \in B} w_{ij} W(A,B)=iA,jBwij

22.3 模型导出

接下来具体导出该模型的公式:

  1. 我们可以认为每个节点用于表示一个数据,而边表示数据之间的关联,而现在的目标是将数据分成 K K K类,且每一组数据之间的相似度最低,所以我们自然要删除一些边,将图变成由 K K K个连通图组成。

  2. 为了数学化表示,我们定义一个函数 C u t ( V ) Cut(V) Cut(V)用于表示集合 V V V​删除边的权值之和:
    C u t ( V ) = C u t ( A 1 , A 2 , … , A K ) = ∑ k = 1 K W ( A k , A k ˉ ) Cut(V) = Cut(A_1, A_2, \dots, A_K) = \sum_{k=1}^K W(A_k, {\bar {A_k}}) Cut(V)=Cut(A1,A2,,AK)=k=1KW(Ak,Akˉ)

  3. 但如果通过 C u t ( V ) Cut(V) Cut(V)用于表示目标函数,未免有失偏颇。因为我们切开的每一类中的节点数都是不同的,对于他们的相似度,我们应该做一个加权平均。

  4. 一般来说我们会通过节点数求均值: ∑ k = 1 K W ( A k , A k ˉ ) ∣ A k ∣ \sum_{k=1}^K \frac{W(A_k, {\bar {A_k}})}{|A_k|} k=1KAkW(Ak,Akˉ)。但本模型是通过边表示相似度,所以我们应当用类中度数加权,将新的函数定义为 N c u t ( V ) Ncut(V) Ncut(V)
    { N c u t ( V ) = ∑ k = 1 K W ( A k , A k ˉ ) ∑ i ∈ A k d e g r e e ( i ) d e g r e e ( i ) = ∑ j = 1 N w i j \begin{cases} Ncut(V) = \sum_{k=1}^K \frac{W(A_k, {\bar {A_k}})}{\sum_{i \in A_k} degree(i)} \\ degree(i) = \sum_{j=1}^N w_{ij} \end{cases} {Ncut(V)=k=1KiAkdegree(i)W(Ak,Akˉ)degree(i)=j=1Nwij

  5. 所以我们最后的目标就是这样一个带优化问题:
    { A k ˉ } k = 1 K = a r g min ⁡ { A k ˉ } k = 1 K N c u t ( V ) {\lbrace {\bar{A_k}} \rbrace}_{k=1}^K = arg\min_{{\lbrace {\bar{A_k}} \rbrace}_{k=1}^K} Ncut(V) {Akˉ}k=1K=arg{Akˉ}k=1KminNcut(V)

由于这样的数学表示有些过于繁杂,我们自然会想通过矩阵将其表示,首先引入一个指示向量替代目标问题:

  1. 假定有指示向量(indicator vector),定义为:
    { Y = ( y 1   y 2   …   y N ) N × K T y i ∈ { 0 , 1 } K ∑ j = 1 K y i j = 1 \begin{cases} Y = {(y_1 \ y_2 \ \dots \ y_N)}_{N \times K}^T \\ y_i \in {\lbrace 0, 1 \rbrace}^K \\ \sum_{j=1}^K y_{ij} = 1 \end{cases} Y=(y1 y2  yN)N×KTyi{0,1}Kj=1Kyij=1
    所以大致可以表现为 y i = ( 0   …   1   …   0 ) T y_i = {(0 \ \dots \ 1 \ \dots \ 0)}^T yi=(0  1  0)T,用于表示第 i i i个样本属于第 j j j个类别

  2. 那么我们就可以将带优化问题表示为:
    Y ˉ = a r g min ⁡ Y N c u t ( V ) {\bar Y} = arg\min_{Y} Ncut(V) Yˉ=argYminNcut(V)

22.4 模型的矩阵形式

继目标问题之后,我们也要将优化问题化为矩阵形式:首先化简 N c u t ( V ) Ncut(V) Ncut(V)函数,下文中将 d e g r e e ( i ) degree(i) degree(i)简化为 d i d_i di

N c u t ( V ) = ∑ k = 1 K W ( A k , A k ˉ ) ∑ i ∈ A k d i = ( W ( A 1 , A 1 ˉ ) ∑ i ∈ A 1 d i … W ( A K , A K ˉ ) ∑ i ∈ A K d i ) = t r [ ( W ( A 1 , A 1 ˉ ) … W ( A K , A K ˉ ) ) ⏟ O K × K ( ∑ i ∈ A 1 d i … ∑ i ∈ A K d i ) − 1 ⏟ P K × K ] = t r ( O ⋅ P − 1 ) \begin{align} Ncut(V) &= \sum_{k=1}^K \frac{W(A_k, {\bar {A_k}})}{\sum_{i \in A_k} d_i} = \begin{pmatrix} \frac{W(A_1, {\bar {A_1}})}{\sum_{i \in A_1} d_i} & & \\ & \dots & \\ & & \frac{W(A_K, {\bar {A_K}})}{\sum_{i \in A_K} d_i} \end{pmatrix} \\ &= tr \left[ \underbrace{\begin{pmatrix} {W(A_1, {\bar {A_1}})} & & \\ & \dots & \\ & & {W(A_K, {\bar {A_K}})} \end{pmatrix}}_{O_{K \times K}} \underbrace{{\begin{pmatrix} {\sum_{i \in A_1} d_i} & & \\ & \dots & \\ & & {\sum_{i \in A_K} d_i} \end{pmatrix}}^{-1}}_{P_{K \times K}} \right] \\ &= tr(O \cdot P^{-1}) \end{align} Ncut(V)=k=1KiAkdiW(Ak,Akˉ)= iA1diW(A1,A1ˉ)iAKdiW(AK,AKˉ) =tr OK×K W(A1,A1ˉ)W(AK,AKˉ) PK×K iA1diiAKdi 1 =tr(OP1)

我们将 N c u t ( V ) Ncut(V) Ncut(V)函数拆分成了两部分,我们现在已知 W , Y W, Y W,Y,我们需要通过已知条件构造出 O , P O, P O,P。为了构造出 P P P

  1. 我们先来了解一下 Y Y Y​的性质:
    Y T Y = ( y 1   y 2   …   y N ) ( y 1 T y 2 T … y N T ) = ∑ i = 1 N y i y i T ⏟ = d i a g ( 0 , … , 1 , … , 0 ) = ( N 1 … N K ) ⏟ N = ∑ i = 1 K N i = ( ∑ i ∈ A 1 1 … ∑ i ∈ A K 1 ) \begin{align} Y^T Y &= (y_1 \ y_2 \ \dots \ y_N) \begin{pmatrix} y_1^T \\ y_2^T \\ \dots \\ y_N^T \end{pmatrix} = \sum_{i=1}^N \underbrace{y_i y_i^T}_{=diag(0, \dots, 1, \dots, 0)} \\ &= \underbrace{\begin{pmatrix} N_1 & & \\ & \dots & \\ & & N_K \end{pmatrix}}_{N = \sum_{i=1}^K N_i} = \begin{pmatrix} \sum_{i \in A_1} 1 & & \\ & \dots & \\ & & \sum_{i \in A_K} 1 \end{pmatrix} \end{align} YTY=(y1 y2  yN) y1Ty2TyNT =i=1N=diag(0,,1,,0) yiyiT=N=i=1KNi N1NK = iA11iAK1

  2. 我们发现,倘如能把矩阵中的 1 1 1换成 d i d_i di,结果就是 P P P了,所以:
    { P = ( ∑ i ∈ A 1 d i … ∑ i ∈ A K d i ) = Y T D Y D = ( d 1 … d N ) = d i a g ( W ⋅ 1 N ⏟ ( ∑ j = 1 N w 1 j   …   ∑ j = 1 N w N j ) T ) \begin{cases} P = \begin{pmatrix} {\sum_{i \in A_1} d_i} & & \\ & \dots & \\ & & {\sum_{i \in A_K} d_i} \end{pmatrix} = Y^T D Y \\ D = \begin{pmatrix} d_1 & & \\ & \dots & \\ & & d_N \end{pmatrix} = diag( \underbrace{W \cdot 1_N}_{{(\sum_{j=1}^N w_{1j} \ \dots \ \sum_{j=1}^N w_{Nj})}^T} ) \end{cases} P= iA1diiAKdi =YTDYD= d1dN =diag((j=1Nw1j  j=1NwNj)T W1N)

为了构造出 O O O

  1. 我们先对 O O O进行一些数学变换,根据 W ( A k , A k ˉ ) = W ( A k , V ) − W ( A k , A k ) W(A_k, {\bar {A_k}}) = W(A_k, V) - W(A_k, {A_k}) W(Ak,Akˉ)=W(Ak,V)W(Ak,Ak)可得:
    O = ( W ( A 1 , A 1 ˉ ) … W ( A K , A K ˉ ) ) = ( ∑ i ∈ A 1 d i … ∑ i ∈ A K d i ) − ( W ( A 1 , A 1 ) … W ( A K , A K ) ) \begin{align} O &= \begin{pmatrix} {W(A_1, {\bar {A_1}})} & & \\ & \dots & \\ & & {W(A_K, {\bar {A_K}})} \end{pmatrix} \\ &= \begin{pmatrix} {\sum_{i \in A_1} d_i} & & \\ & \dots & \\ & & {\sum_{i \in A_K} d_i} \end{pmatrix}- \begin{pmatrix} {W(A_1, {A_1})} & & \\ & \dots & \\ & & {W(A_K, {A_K})} \end{pmatrix} \end{align} O= W(A1,A1ˉ)W(AK,AKˉ) = iA1diiAKdi W(A1,A1)W(AK,AK)

  2. 为了表示 O O O,我们发现 l e f t = Y T D Y left=Y^TDY left=YTDY,这个已经求出来了。为了表示 r i g h t right right,我们模仿着看一下 Y T W Y Y^TWY YTWY是什么(我们知道 y i y j T y_i y_j^T yiyjT的矩阵只有在 ( i , j ) (i, j) (i,j)的位置上为 1 1 1,其他地方都是 0 0 0):
    Y T W Y = ∑ i = 1 N ∑ j = 1 N y i w i j y j T = ∑ i = 1 N ∑ j = 1 N y i y j T w i j = ( ∑ i ∈ A 1 ∑ j ∈ A 1 w i j … ∑ i ∈ A 1 ∑ j ∈ A K w i j … … ∑ i ∈ A K ∑ j ∈ A 1 w i j ∑ i ∈ A K ∑ j ∈ A K w i j ) \begin{align} Y^TWY &= \sum_{i=1}^N \sum_{j=1}^N y_i w_{ij} y_j^T = \sum_{i=1}^N \sum_{j=1}^N y_i y_j^T w_{ij} \\ &= \begin{pmatrix} \sum_{i \in A_1} \sum_{j \in A_1} w_{ij} & \dots & \sum_{i \in A_1} \sum_{j \in A_K} w_{ij} \\ \dots & \dots & \\ \sum_{i \in A_K} \sum_{j \in A_1} w_{ij} & & \sum_{i \in A_K} \sum_{j \in A_K} w_{ij} \end{pmatrix} \end{align} YTWY=i=1Nj=1NyiwijyjT=i=1Nj=1NyiyjTwij= iA1jA1wijiAKjA1wijiA1jAKwijiAKjAKwij

  3. 我们发现其实 Y T W Y ≠ r i g h t Y^TWY \neq right YTWY=right,但如果我们假设 O ′ = Y T D Y − Y T W Y O^{'} = Y^TDY - Y^TWY O=YTDYYTWY,我们会发现其实用 O ′ O^{'} O替代 O O O进行计算也没有问题,因为我们只需要求trace, O ′ O^{'} O的对角线与 O O O​相同即可。用数学语言表示为:
    t r ( O ⋅ P − 1 ) = t r ( O ′ ⋅ P − 1 ) tr(O \cdot P^{-1}) = tr(O^{'} \cdot P^{-1}) tr(OP1)=tr(OP1)

根据以上证明,我们可以将问题简化为:
Y ˉ = a r g min ⁡ Y t r ( Y T ( D − W ) Y ⋅ ( Y T D Y ) − 1 ) {\bar Y} = arg\min_{Y} tr\big( Y^T (D-W) Y \cdot {(Y^T D Y)}^{-1} \big) Yˉ=argYmintr(YT(DW)Y(YTDY)1)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值