我们在一般的聚类过程中,普遍理性而言会有两种思想:
所以我们可以将聚类方法分成两大类:
Spectral Clustering实际上可以表示为一个带权重的无向图。
先给这张图做一个定义:
基本数据表示为:
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],1≤i,j≤N
其中 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σ2∥xi−xj∥22}0(i,j)∈Eotherwise
代表了节点之间的相似度
再做一个定义,用于表示一个符号:若 A ⊂ V , B ⊂ V , A ∩ B = ∅ A \subset V, B \subset V, A \cap B = \empty A⊂V,B⊂V,A∩B=∅,则表示集合之间的相似度为
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)=i∈A,j∈B∑wij
接下来具体导出该模型的公式:
我们可以认为每个节点用于表示一个数据,而边表示数据之间的关联,而现在的目标是将数据分成 K K K类,且每一组数据之间的相似度最低,所以我们自然要删除一些边,将图变成由 K K K个连通图组成。
为了数学化表示,我们定义一个函数 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=1∑KW(Ak,Akˉ)
但如果通过 C u t ( V ) Cut(V) Cut(V)用于表示目标函数,未免有失偏颇。因为我们切开的每一类中的节点数都是不同的,对于他们的相似度,我们应该做一个加权平均。
一般来说我们会通过节点数求均值: ∑ k = 1 K W ( A k , A k ˉ ) ∣ A k ∣ \sum_{k=1}^K \frac{W(A_k, {\bar {A_k}})}{|A_k|} ∑k=1K∣Ak∣W(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=1K∑i∈Akdegree(i)W(Ak,Akˉ)degree(i)=∑j=1Nwij
所以我们最后的目标就是这样一个带优化问题:
{ 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)
由于这样的数学表示有些过于繁杂,我们自然会想通过矩阵将其表示,首先引入一个指示向量替代目标问题:
假定有指示向量(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}K∑j=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个类别
那么我们就可以将带优化问题表示为:
Y ˉ = a r g min Y N c u t ( V ) {\bar Y} = arg\min_{Y} Ncut(V) Yˉ=argYminNcut(V)
继目标问题之后,我们也要将优化问题化为矩阵形式:首先化简 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=1∑K∑i∈AkdiW(Ak,Akˉ)= ∑i∈A1diW(A1,A1ˉ)…∑i∈AKdiW(AK,AKˉ) =tr OK×K W(A1,A1ˉ)…W(AK,AKˉ) PK×K ∑i∈A1di…∑i∈AKdi −1 =tr(O⋅P−1)
我们将 N c u t ( V ) Ncut(V) Ncut(V)函数拆分成了两部分,我们现在已知 W , Y W, Y W,Y,我们需要通过已知条件构造出 O , P O, P O,P。为了构造出 P P P:
我们先来了解一下 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) y1Ty2T…yNT =i=1∑N=diag(0,…,1,…,0) yiyiT=N=∑i=1KNi N1…NK = ∑i∈A11…∑i∈AK1
我们发现,倘如能把矩阵中的 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= ∑i∈A1di…∑i∈AKdi =YTDYD= d1…dN =diag((∑j=1Nw1j … ∑j=1NwNj)T W⋅1N)
为了构造出 O O O:
我们先对 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ˉ) = ∑i∈A1di…∑i∈AKdi − W(A1,A1)…W(AK,AK)
为了表示 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=1∑Nj=1∑NyiwijyjT=i=1∑Nj=1∑NyiyjTwij= ∑i∈A1∑j∈A1wij…∑i∈AK∑j∈A1wij……∑i∈A1∑j∈AKwij∑i∈AK∑j∈AKwij
我们发现其实 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′=YTDY−YTWY,我们会发现其实用 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(O⋅P−1)=tr(O′⋅P−1)
根据以上证明,我们可以将问题简化为:
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(D−W)Y⋅(YTDY)−1)