【数据聚类】第八章第二节:谱聚类算法之切图聚类、算法流程及其实现 / r, \: P. K! q9 k3 k% ~) z1 T* U 2 \- [3 R9 ~: n% u) E8 p; x本文部分内容源自刘建平博客,在此基础上进行总结拓展6 t+ f ^0 ^2 J0 l6 P; V; _& b2 l# N
( x& W- g4 c# O5 w7 _/ k) M
原文链接+ P9 ^5 r' c6 m f' [5 a
文章目录 / f" A. S1 u5 t1 e5 ^% d' O5 y$ Y一:谱聚类与图划分' }# n A6 _( J: e7 }
(1)比例割: K# L8 X# N) F
(2)规范割(常用) % j7 F* K! l; F$ j, i二:谱聚类算法流程 . W2 Z# c* [6 y, U三:Python实现 * \( M" U( n5 ]4 q7 ^, X8 @四:谱聚类算法优缺点3 `; b5 ~& Z' j* K6 r( o
(1)优点- f9 O' E# T9 I. @/ F4 q% |. U) H4 H
(2)缺点 0 O) w: N% G K+ F; [0 y7 H6 i一:谱聚类与图划分 3 [% j2 y* [& Y8 u7 p无向图切图:谱聚类算法根据数据点之间的相似度将数据点划分到不同簇中,因此将数据点映射到无向图之后,可以转化为图划分的问题。对于无向图G GG,切图的目标是将图G ( V , E ) G(V,E)G(V,E)切分成互相无连接k kk个子图,其中) L# T9 f, F: w
W8 H. f2 n' j
每个子图点的集合为{ A 1 , A 2 , . . . , A k } \{A_{1},A_{2},...,A_{k}\}{A 8 o* |/ J+ l! `0 |/ D, U
1* A# F% W/ B i+ G2 @
7 Q6 R; ^# n0 |# q/ Y1 C6 w# I* ~ ,A . r: U! E' \+ f+ t0 O% [
2 % k# E" m! l- o# C8 [ . U7 Y# l' i1 z' k ,...,A ( ^; d, f0 E& l* rk% e" Q/ J1 Z3 B; B0 g: W- R( }, B! U+ ^
: N2 p7 s3 c% `% u7 u, y" f+ w
},且满足A i ∩ A j = ∅ A_{i}\cap A_{j}=\emptyA + J' D! T; r& b9 x# n4 ]i - a- b, v. W9 E1 ^! x( n; X, ^+ \, a- e; E3 N5 a0 p! F
∩A 5 o/ \4 g( ]$ U8 F" Fj 9 E/ |! C+ X6 y+ R- \4 R ' R' U5 D i; W& Y' P =∅、A 1 ∪ A 2 ∪ . . . ∪ A k = V A_{1}\cup A_{2}\cup ... \cup A_{k}=VA : y( r- X3 U% C- R4 ~1' t% B: q4 O& ]& \( n: E8 ?0 ^7 s
f1 o. H. |) ]# }, X ∪A . B- u7 G1 B" w' i! \4 H, @
2 & z* a: s( Q( }: Z4 z3 P5 U( v3 j! o M0 u
∪...∪A , e1 [% k# t2 o) N D
k ' T$ t/ z2 n& H8 P! n$ S1 Q0 ]! p: K z1 I3 X! Z l! H
=V! ?! Y3 ~6 `+ ]
对于任意两个子图点的集合A AA、B BB,我们定义A AA和B BB之间的切图权重为W ( A , B ) = ∑ i ∈ A , j ∈ B w i j W(A,B)=\sum\limits_{i\in A,j \in B} w_{ij}W(A,B)= 6 a9 C' `7 p8 T/ E. h) o, D4 W2 v2 Ji∈A,j∈B: ]. `, {2 O( y! M- H, s+ N
∑ 8 m: {- w7 |; x, s: J+ C& n* [: p! }# P
w & d( [+ Z) U5 r, `ij * d! }7 n" Y8 V% U! K W2 J 0 A2 s7 h! m" }5 I6 a) F8 @ C ]7 Q- [4 x) S0 c1 v$ b
对于k kk个子图点的集合{ A 1 , A 2 , . . . , A k } \{A_{1},A_{2},...,A_{k}\}{A * r' S" z9 \6 b$ i1. P8 \) V( S, \9 h: H, m; @( B
' V' ~6 I g; C. J& ~
,A 8 U0 b% H$ u+ t+ G
2 " k9 v- S1 s( r7 R 6 m9 J/ L% g1 m$ i& E ,...,A 7 m) S) u( x, N7 ]
k / J' a% ^; l7 k3 @# k 9 i1 W0 P4 X" y9 f5 P },定义切图c u t ( A 1 , A 2 , . . . , A k ) = 1 2 ∑ i = 1 k W ( A i , A ˉ i ) cut(A_{1},A_{2},...,A_{k})=\frac{1}{2}\sum\limits_{i=1}^{k}W(A_{i},\bar A_{i})cut(A s% r: Z+ }3 Q( u- |1 c( D
15 ?. n! p# ~8 j& M* {; s
a1 |: S) y6 t2 T+ p9 F5 I+ N* J
,A 6 ?, T4 d$ T; z
2 ; p+ M5 a- {4 R3 J3 I 9 o$ J" T$ E6 {5 Q# i" |7 L ,...,A + d9 Z: N; ?) b! h# E+ W1 J
k ! x4 t9 `& F4 A) q 5 q- K4 n! g$ \1 v3 J) m w )= , {4 y1 s! Z1 u& ^6 P* Z
28 K' Y) W1 B4 ]# L$ [8 S4 b
1 - c/ x- p; I! F c# w* r2 v, ?. n0 q1 e U7 B7 i1 ~( o! Q+ F6 h
! r, \" H, c4 q8 r
i=18 Z: @5 f9 }# _5 Y; y4 M
∑ / ~$ r/ U* m+ J6 F! ]k7 ?5 q# v0 P w1 A7 {
* D6 Y5 X! }7 {6 S5 N W(A L' j6 v6 T5 N @ }i F) l2 }; `1 [
1 S9 Y. ~1 ?) V" l , ! e- T! l( A- {0 T. RA - O" M. l) ]: F- e) _ˉ ) P$ s6 q9 f& q; G, j: x8 |4 [ Y- k2 _! H
i $ ?. ]: _" J$ i [ - y( W, Z2 z% M$ X ) (其中A ˉ i \bar A_{i} 4 F% q1 ` p, P- PA2 c0 E: _ g& d% b# a& a: `2 [
ˉ; {, h: s7 @* b6 Z7 c: x
2 {/ N; H" O- M" `! z) P7 p
i3 A% z/ v" k# L" d) w
2 x4 q6 \7 R. g2 O0 B
为A i A_{i}A % F/ }1 \2 }: b8 Y$ e
i " m$ i2 \3 K8 J9 U4 ] * g5 U# w# k( i3 b$ | 的补集)& e# e U/ n$ t
可以看出,c u t cutcut描述了子图之间的相似性,c u t cutcut越小那么子图的差异性就越大。但是c u t ( A 1 , A 2 , . . . , A k ) = 1 2 ∑ i = 1 k W ( A i , A ˉ i ) cut(A_{1},A_{2},...,A_{k})=\frac{1}{2}\sum\limits_{i=1}^{k}W(A_{i},\bar A_{i})cut(A 0 f8 n! I% L6 f& h& T( X/ ?5 A2 `
1 a, Z# N0 H( ?# G/ j8 q1 G & z. J/ u/ O* P" O' ] ,A : T! y$ b9 K7 }* W0 D) t
2 # Z, ]8 ]. a* R+ n6 T/ \0 b" X0 M, `$ X( J6 e2 X6 z8 h( R
,...,A 5 P' }) u4 T9 O- N, ]7 m7 q
k/ `4 Z1 G- \+ h* q
1 n9 g0 Z/ S' S ] )= & C: e+ M' o4 {2* x& R# x. n9 W) K# @
11 b: ]; R- I: E5 j, s F; `6 I
- g g7 N7 L. a f" c" D & {" o. d: c9 n1 Ji=1 $ L0 b' x9 `- j3 Z8 u9 _∑; i1 V& K2 i9 B
k ! g5 ?8 J& g j+ L: c8 l: Q+ ]$ O4 N
W(A - _. S W! g- @* p: z+ c8 _
i - G$ m9 I5 @* ]( n2 D# a7 ~- P$ M& Y9 Q
, 9 s+ X7 v& p; a2 BA / Q1 ^0 s+ y9 X$ j/ rˉ : F' U. O1 [( O- n( O; W) c6 {% c. l" s1 h9 J+ [- @- l# ] H
i6 s$ |6 t3 O. H
@5 L6 Q8 q6 S2 F
)在划分子图时并没有考虑每个子图中节点的个数。所以在某些情况下,最小化c u t ( A 1 , A 2 , . . . , A k ) cut(A_{1},A_{2},...,A_{k})cut(A . w7 M3 g, {( f. D% k% J S2 X11 E" H9 i6 q: W
" d4 W) Z% R# Z* _4 ^* L: Y
,A . g0 A8 F0 T: t7 o
2 % J7 g2 d1 j# }3 A% P/ h2 N+ F* _8 S 9 x/ Z7 X5 h9 r) j/ E) D+ i* t ,...,A * h2 | V9 Z2 Z8 |4 H6 R
k - q7 c p2 K8 C3 H0 R# h3 A! H5 G# A) u- C7 ]" O# K* p
)可能会把一个数据点或是很少数据点看做一个子图,导致子图划分结果不平衡& E1 p, P9 j z) G
' _7 T& }; p. q3 ]6 }7 j& k' R
例如下图,选择一个权重最小的边缘的点,比如C CC和H HH之间进行c u t cutcut,这样可以最小化c u t ( A 1 , A 2 , . . . , A k ) cut(A_{1},A_{2},...,A_{k})cut(A * I* U" y+ ^1 m
1 % D: \6 ~! T( {, m* F& T/ s/ c2 k # J4 B- i+ y' O* G& ~3 J J3 l ,A ! M1 M3 H: R$ F1 s6 K
2* p! e j' Q8 d' ?+ y" Z1 y5 y, ^; s' q
# l& f6 T% H$ y1 B8 S! L ,...,A & W& R; H, v" x# Z% d$ Y
k3 S' R% k! c7 A
0 O f7 X' K W6 z8 n! [
)但是却不是最优的切图; f( ]4 @, m8 D* ?: U7 Z# k% O
3 P$ Y* Z6 ?+ E) @) l
为了解决这个问题,会引入一些正则化方法。最常用的两种方法为比例割和规范割 / t* X/ F: T* X6 e; m- [$ L 3 ^- F5 [) o0 s0 Z* h. c7 g比例割:R a t i o c u t ( A 1 , A 2 , . . . , A k ) = 1 2 ∑ i = 1 k W ( A i , A ˉ i ) ∣ A i ∣ Ratiocut(A_{1},A_{2},...,A_{k})=\frac{1}{2}\sum\limits_{i=1}^{k}\frac{W(A_{i},\bar A_{i})}{|A_{i}|}Ratiocut(A 7 N" b6 l3 [' b& {1- ]* Z* C5 Z7 Y" H
: T3 k4 X) k& E' n% {! y
,A : l% b; z& A. Q$ |
21 }! @7 p1 B* f; _' ^1 {6 R
, d5 h/ u1 b! ?2 W) \
,...,A + W+ _3 W# P" n* y1 uk" I- [! d( \0 p' L8 o
3 a6 r/ i' s2 G )= * s1 A- D& m3 I! Q) k2 * D: x& \! V" |& @/ h1 D& t7 r. b u1 + N. q$ }3 a' v4 t1 n7 E ]- j' U: s0 H) x* r. }7 ?9 e
% n* _+ L3 L9 Y5 B" Ai=1 # I6 R" _& g2 Z∑$ v) h- x* B' \# c, }
k G" A5 [# \4 `1 W- x9 m2 e+ r
4 G4 O/ B: S& e* W* r
$ u/ O0 p( s6 O) h& @0 Y: F F( `
∣A % _1 i, ~$ Y6 D0 Q; j9 e
i% ?* K* Q9 m: E7 B! t
, |% [" `6 J$ _+ ` ∣ 1 H$ b0 ?# {) j/ RW(A % l+ h% _) M. h9 e4 [
i5 x) Q& S+ m! P& X0 s. \8 O
& y6 m5 q" f' h2 P* q* k. e
, 6 j6 }# [, }( h! m# @- q/ |% M4 XA - n& E1 d8 S) R. x \2 h4 F% lˉ 4 v2 S. M, q2 ^0 ~! j( P) K$ P! T. r" ^- W$ P4 K x; q u! b
i 1 ^6 A! Y: E) U0 P. g% \3 ]* r7 Q/ t
) 5 R! V9 v& R4 }$ F1 ^) Q7 O 6 y, Z* J# |1 |6 D4 Q) S, k, h
规范割:N C u t ( A 1 , A 2 , . . . , A k ) = 1 2 ∑ i = 1 k W ( A i , A ˉ i ) v o l ( A i ) NCut(A_{1},A_{2},...,A_{k})=\frac{1}{2}\sum\limits_{i=1}^{k}\frac{W(A_{i},\bar A_{i})}{vol(A _{i})}NCut(A . a# u( H7 L d$ h+ O1 ! G) G: ~6 V3 y! ^8 X9 m7 e2 s- F; Z& M# w( R- p, Z
,A - X1 l3 g. u2 f o/ T* K9 x/ [
22 h1 l( ~! U5 ^ S' ]4 U/ b- r
: A, ~2 v- M" N/ U, S7 V ,...,A / n# m. S% P4 ^9 H) c
k; h& p2 C1 i" V8 a: b
$ @: K6 e/ A2 v6 x, X: Q% @7 H )= 3 {+ p% o) Z1 w- e5 _" E2 a& v" y5 S! h6 W% N( N, P+ X, K1 ' s* c* g: b/ i' q& b6 S ; S2 l( a1 V/ a9 @2 G; J. Z8 s; N& h/ g7 u, _; l
i=1' `' L% B! m1 T+ `; m8 K
∑' `( ^2 U: _6 T& B9 X( v
k9 S7 I) y1 B7 @* k3 n; U
0 y4 J" O" ~/ o4 e 0 P* b, P# r, B. ]* @9 Zvol(A ' l/ f, o( j6 O8 Z1 d. { bi" n& e* }2 t3 B8 k2 ^0 ]6 ?- y7 B
7 {! ^6 v/ K$ e6 g1 n9 S1 R1 ?
)- U9 `& C2 ]" E" q" Y6 d1 L
W(A $ J6 x; I" D" d# @" V* |. f5 Vi6 Q* X. M, ^* J) m( v
+ g9 L4 j* C w1 y J9 ]; }" F: v , ' p9 D% z! D4 ^8 [/ m t2 ~A Y/ c* \- l8 V3 [ˉ * W( a+ W" I2 W/ ]' e, W( Z- x) s9 x' {: o" l
i* J% G- W" C c' \* `8 O
: w- O2 K" W- t* t' w' V
) 9 S# l& l( R0 T* A F- d6 d) \- T8 C: j( ^1 f" @2 {( e) c2 ]1 T$ w
$ R; V& d7 |* y4 ~; s! f+ Q(1)比例割 " h) [0 y. w' ^6 O引入指示向量(点击可查看指示向量定义)h j ∈ { h 1 , h 2 , . . . , h k } h_{j}\in\{h_{1},h_{2},...,h_{k}\}h 2 e8 S; b' a- ~" r% L
j4 Y- W. f7 N3 v! C4 x2 m
1 V, B7 C$ {7 m ∈{h 5 j8 z& n& V! e* I0 j5 u0 ] F
1$ P7 e# _5 {% u. o* ?4 g
! y- E+ Y3 ^ O
,h * w T$ M+ q0 Q y* e
23 {5 V5 c8 F8 F# `- X
7 D+ v" }/ Y( T- X$ t& u- ` ,...,h , Y6 C1 j* [( {5 T. j& \. V
k% u* i& G# g( m7 Q% c l$ `
7 L2 N9 ]: b2 e) x0 M9 W+ Y8 Q },j = 1 , 2 , . . . , k j=1,2,...,kj=1,2,...,k。对于任意一个向量h j h_{j}h 6 l/ c& x5 ?* s* I! N) u2 a" g
j , R! n( h9 D" o0 B" M8 Z/ ]- g1 Q6 `) r& ]* P, n& ]$ Y
,它是一个n nn维向量(n nn表示样本数),定义h i j h_{ij}h / E$ x M. p6 J/ {* T( p( eij6 Z( e; X! \4 C- D% ?. W2 H
% Q# Y# n. j4 U7 S& R( Z L 如下 ! k7 X1 O- i6 Q4 p* i% Z( w/ b/ a9 G; M
h i j = { 0 , v i ∉ A j ∣ A j ∣ , v i ∈ A j h_{ij}= 8 y( ^# w* }$ T o8 d{0,vi∉Aj|Aj|−−−√,vi∈Aj - D4 G9 l9 q K- m# {6 m{0,vi∉Aj|Aj|,vi∈Aj6 e; {- k3 U, p1 e; q h
h ; @3 b6 K0 Y8 J% ^( vij ; x* c0 R. x8 `3 S* V [ e7 ^ - A- s" _5 x- L6 E) g ={ 4 y# D0 R- M( n, O
0,v $ C% B* c2 f- c1 K8 u" Q# L# Yi8 p$ }8 ?1 ]2 {& C- d, e# g% ]
. U" x8 H! i/ P$ Z* s
∈ / r' D6 o3 ^ Y6 ~1 C8 Z( S M/0 j2 Z, H* X4 \/ M( C4 w$ c9 d) D
A 2 w8 w W5 T% A6 m
j8 y, E. L0 f) F6 j0 ?3 z+ Y
; Y2 D: I8 e0 C4 \! f! f
4 b$ f6 E, c5 n# C! W, z! X* s5 }( K& j
∣A ! e/ M. g; Y D8 K! a5 r
j N% J) m. B2 ~% p
# n2 v4 ~3 G. w* Z$ v$ H/ X4 W
∣# ^' r' W! Y* a( D% O7 l! o
2 y" d6 o' |9 j
,v 1 n1 D' E; t; W& y/ w. k
i . \) x! | e5 N8 A' Y, V" n& `4 m% \% j1 w3 [) j
∈A & q9 j' j' J7 Y* r, B9 G
j0 @0 A! t3 ]$ A- }: T6 w$ c9 \
' d$ @& |* \4 C: M, \" C }+ {1 V, v
& {, T( g% O0 N0 ]' n# C 8 t, ]( \, R* K4 |3 [0 W- z# C# r% [% G/ o, p( b3 I
于是,对于h i T L h i h_{i}^{T}Lh_{i}h $ m) p' v6 B' M
i 4 I$ d2 g8 n6 AT ' \, ?# C) M) [ l1 l* r1 U" D; J7 [8 l$ O# ?+ L
Lh ; V& \% `, ?+ J7 n! C
i 5 `/ @; k: l7 B4 g9 s ; h+ T% l( v7 P+ i$ i6 r4 j1 ^ ,根据拉普拉斯矩阵性质可知8 P( ~: q- D5 A
5 ]" ~* X. K7 q
对于任意向量f = ( f 1 , . . . , f n ) T ∈ R n f=(f_{1},...,f_{n})^{T} \in R^{n}f=(f * l9 N/ H) C" d5 Z% T
1$ v0 ^- J _4 A5 ^+ A
' \- ?- P( ~5 @! c3 q& R
,...,f . ?2 l, \% M. ^9 m: I& }
n% m# l. t4 R2 ?
" ?$ o: S5 F: b8 S ) 5 b% A% D( ]) ], k% Y* bT 9 r& M j, j, h$ e% _& k! d ∈R 3 d S' x/ B/ d5 Y8 Tn * k: M9 ?% {- f& W) ~0 T7 D ,有f T L f = 1 2 ∑ i , j = 1 n w i j ( f i − f j ) 2 f^{T}Lf=\frac{1}{2}\sum\limits_{i,j=1}^{n}w_{ij}(f_{i}-f_{j})^{2}f 8 B, s/ a# k" C$ ]# ~) {6 _. L }. [$ AT + J, @- ?- F0 _" R/ v Lf= ! h3 ~8 V+ Z: M8 o2 " C' C$ N! {: @. l1' S7 `! s8 [3 n
2 M ?6 a. y7 ]7 O6 ]2 }* k v
) U Y# _- O+ S: G5 c6 y
i,j=1 - x9 s* }7 p9 f; \∑6 T+ A' n5 ~2 T/ R: v' \( a* }
n & D7 c& }/ R2 v8 Q% B% b7 G; W9 ~9 r# V7 A" C$ g
w ( @+ Y+ Z8 c. V0 B" V3 O
ij7 O' i/ w d @. f6 A2 o& j
% ?3 K( g2 y7 X3 C6 j! ^# j (f # R. z) e6 x* L" qi , V6 D3 d* j* p: z2 M8 U6 Y! p( P8 A5 S) C" p! D
−f ) U) H1 a/ {' ?
j ( T1 D: x- G& P8 ~ ; g& Z" P+ m4 t0 @9 B. c4 D ) 5 F. }3 R h* g8 Z) g; U+ W" j+ e2/ e! R: u& r$ `- ?
9 y; d. a" Q& g. Q
h i T L h i = 1 2 ∑ m = 1 ∑ n = 1 w m n ( h i m − h i n ) 2 = c u t ( A i , A ˉ i ) ∣ A i ∣ h_{i}^{T}Lh_{i}=\frac{1}{2}\sum\limits_{m=1}\sum\limits_{n=1}w_{mn}(h_{im}-h_{in})^{2}=\frac{cut(A_{i},\bar A_{i})}{|A_{i}|}; A3 ]+ q! c% {/ }/ w- V
h % w- U' T: t J/ _4 bi 2 m. X- E/ L( RT # {% q' A* e( _ _7 y) Q9 b* V; ^' @6 j( M' B4 y0 I
Lh $ s. `* X1 L# I
i& y* O \4 P* i2 f
* ]6 }* t2 J1 z" s5 U0 q = 0 b# x4 f4 P- l& N
2- M& v; B' {& [4 m
1! M7 h1 M- D- P6 d% W* A: c7 H Q
2 H& _" G: _" i' j) z
0 X0 g% l, p2 i% x7 k$ @" Am=1 ! i% m( h/ `" L% Y) @" e∑ $ [6 }( s3 l j3 r ; n6 H$ H( A) N5 v0 v$ p + w! B2 P* ?; Hn=1- ?: L3 f, c, `
∑ 0 l5 W& B* J2 S$ S/ ~ ( j; y1 j1 E$ L4 y3 ^* R w g4 m$ T6 R- Z- S6 l) M8 S
mn& c8 k2 D3 L0 [; ^0 I
3 Y q! H. I; `/ ] (h : L( u/ w4 W9 u$ ?$ z% x9 \; B
im; j( \7 h3 n* E" r
9 [8 E+ |$ _, ]# F
−h # S2 V8 C. M, f5 d
in! j: i5 T' s- t) ]
: W. I. M2 L: f( X0 C' a8 H3 B ) * P% Q; }4 M7 r# p+ W28 h `. m8 x0 I( S
= : k3 t& y7 h. R% ^3 M+ I; K
∣A # i4 \% m+ G z. G$ Zi O. V$ f# Z G; o' I# C $ ]$ h# k4 A' ~. a$ r+ ^ ∣ + i2 A" k( H, L3 V& f2 T* [* ^cut(A ) T* j" V c" x6 X; d0 N2 Wi 7 ~) S6 C. F1 X7 f* h' T: L 3 b; Z- A& c) f& @8 R" z , 0 F( L7 d& w) {
A! B2 @0 t* l) l% T5 G; r% u% J H
ˉ6 ?1 ~9 V! H; _" L
- E+ k9 Q) D2 e9 e7 n! e
i # a8 e+ L" G- N( O1 w% b) t 2 I" W0 ?' s: _% `$ M ) ) B. q. L8 R9 j4 f2 x; W- M) a3 F# y8 s/ l
) `' T6 g) L# v$ |1 k2 i% v/ o7 n- X
严格证明过程请看刘建平博客:链接 * ^& Q5 g5 H* w" R* I可以看到,对于某一个子图i ii,R a t i o n C u t RationCutRationCut就对应于h i T L h i h_{i}^{T}Lh_{i}h 2 {1 f0 ]! l4 Z2 ]# |4 ui. M! R; l) \! H8 r/ L5 }4 ?9 Y
T4 p7 [; a& I: x# p7 M
$ z4 g3 F3 ^- X0 @* J! z8 e9 `% x4 i/ z9 { Lh + M$ L. v& D' R+ B6 }
i J8 K/ s1 ~2 d, i; v) Q* l
" X8 M1 M3 G4 J8 A9 N4 Z8 I
,那么对于k kk个子图5 t8 [4 M/ G9 I
1 d# K! P5 q! b2 v% ?6 QR a t i o C u t ( A 1 , A 2 , . . . , A k ) = ∑ i = 1 k h i T L h i = ∑ i = 1 k ( H T L H ) i i = t r ( H T L H ) RatioCut(A_{1},A_{2},...,A_{k})=\sum\limits_{i=1}^{k}h_{i}^{T}Lh_{i}=\sum\limits_{i=1}^{k}(H^{T}LH)_{ii}=tr(H^{T}LH)# u1 Z/ r# P$ `( O' H$ m
RatioCut(A . m% j8 |" }, C- h1 9 b K8 `, O8 j/ J+ U! Q. s& y
,A 0 j1 @; z. s" t% c& E5 b29 e7 V5 J: m- p" L
+ |- z9 d; o; v8 @. y- M$ @/ K
,...,A 3 G- @) e9 b, T9 s7 e6 ]
k& z, z% t9 J7 V! Y
9 d0 g9 X" O; R; e+ ?( p )= . y! E& W v1 Q" l
i=1 8 X+ {9 }- @6 T3 ~% n, L∑- n# E' }3 I' z4 h. k5 \5 V
k + u8 {- ?4 T: L' d; B% c/ V8 _# B% b. u/ x
h * I' x3 L% Q5 L! p& Ki , s0 J) Z, K( W, M/ |) V! X% I, A2 n$ KT4 K1 n( K' x7 t3 A" [. [2 i
2 y" _6 N! O7 ?; ^9 X; ?$ a/ q Lh 3 B2 N W" t7 W4 K8 S. E; Oi' \1 e9 j6 u0 _4 b. y& P# f
( `+ T8 q1 e$ h% V& Q4 n
= + \& u4 i! K" ~% n% F# ]' q
i=10 Q$ f C! H$ j
∑, z. j7 [" e& s; e1 y
k% Q, R8 ~( x9 b5 P( h
6 m- r+ T- x; y- G& D2 q
(H # _! S2 X0 A6 n) q
T 6 o$ h2 T) a: \, @* N6 H3 k LH) , w; X% I7 C; F& d
ii 9 S) D- D Z$ I p& m) L ( h1 q* M. o# [# A$ z =tr(H `" C$ H ]1 C4 ~- c- i- ` z
T $ A: |- F: Y4 d! V2 U LH)! g; |6 L+ \5 d$ E3 G" M% A
! Q U/ }2 l: t+ @. A因此,R a t i o n C u t RationCutRationCut切图本质就是最小化t r ( H T L H ) tr(H^{T}LH)tr(H ; ]7 O0 U3 H2 z9 D0 k5 L$ MT 8 w( @' t& T7 k5 T$ x) @ LH)。又因为H T H = I H^{T}H=IH , n- T2 t9 x! a+ d% ~2 O4 o+ i0 p( vT ' O+ |: A" E# B* K H=I(单位矩阵),则切图优化目标为 8 o0 R0 a3 Z0 M7 O1 L. U7 [$ W: |. P/ n" h( L6 K) ?6 s
a r g m i n ⏟ H t r ( H T L H ) s . t . H T H = I \underbrace{argmin}_{H} tr(H^{T}LH) s.t.H^{T}H=I$ |% y) [1 R3 Y; {" N" b: p0 `! O
H - i- F' p- R- @+ }% C- xargmin% U1 b+ V7 t7 O; D& B' N, _
: ?* `+ z5 X7 R: R" Z4 d0 @4 i
/ n( C6 d1 K( C2 t# W5 {7 Z
: R8 r# d# a7 f# u% Q4 j, O7 l5 K tr(H ; H3 N$ `% [3 A# M9 I! x: W, bT, V/ e. D% u: q. ~4 U% ^. _7 n
LH)s.t.H ) T9 c! ] Z# h( _0 O8 h, W; M
T $ _/ P+ ~& {6 P7 ^3 b! C4 i H=I! e7 v5 _+ f- Y3 {0 t0 l
5 V$ I7 }: d: O+ H4 O2 H" K
对于优化目标t r ( H t L H ) tr(H^{t}LH)tr(H 4 ~4 n6 x' G6 ^- @: N$ k+ j \/ Zt Z! n9 M. ~6 W* P( S, O+ c/ G( q
LH)中的每一个优化子目标h i T L h i h_{i}^{T}Lh_{i}h " f' g, }6 D2 M' V8 B. I
i5 F7 G6 y/ l, v: a
T , ^9 t) k/ D% U& f9 r/ [8 S3 U0 O, \& m5 e
Lh 3 L ^* S& O* a! K) {" Y6 g$ P, ti0 Q, C9 S* _/ f
, u# C5 s5 j; z2 |$ M ,其中的h hh是单位正交基,L LL为对称矩阵,所以此时h i T L h i h_{i}^{T}Lh_{i}h 4 U$ O) | l* k7 Q" U+ ^; @i' N9 t7 S& \" E+ W. T
T3 h, O0 N2 F4 n! y" {6 L$ [8 K
3 Z; Y, S/ g7 D# q' E9 s* w$ j
Lh ! E9 C* a) G! Y: p: Pi ( d8 @- y* h: z' a& Q* s) a& j( R% _ [6 |0 C' g- {
的最大值即为L LL的最大特征值、最小值即为L LL的最小特征值。而在谱聚类中,我们的目标就是要找到目标的最小特征值,得到对应特征值向量,此时切图效果最佳。所以对于h i T L h i h_{i}^{T}Lh_{i}h ; u- r: a9 j/ F# {% {8 n
i7 T8 {& E* |4 I. k
T* c5 [% G5 v7 e9 H5 g
9 y# K# d$ M9 C. ?/ J9 D
Lh , u* k" b! W1 d- f- Z5 li: j/ K) [7 { V& ~4 G1 U) p9 C5 a
8 V$ b- h* c$ R/ A$ ?' z ,目标就是找到L LL的最小特征值,而对于t r ( H t L H ) = ∑ i = 1 k h i T L h i tr(H^{t}LH)=\sum\limits_{i=1}^{k}h_{i}^{T}Lh_{i}tr(H - w4 d \3 q O: V
t# R6 D9 Q$ T. g% ^2 q% }
LH)= ' r' t1 B& E5 W0 X. D7 V8 c, K7 K+ Bi=1 " O& o0 `4 e( W- p/ I( m$ n∑9 G8 e& F! v5 G, d+ ^' M( I
k# ?& ]) d4 W, ^, B: p5 v9 P, \
' F6 o& R" R3 p' k4 M
h * k# n* T- T. L: d! X
i2 q, C/ }5 N% t* |
T$ D4 O1 y- P0 r7 j1 m' D
# W% G8 E( ~; t. u2 P# E q- N
Lh " o7 j/ n5 B' A: @1 {& K) ?* v) ?
i $ v9 s% {6 P5 R" z: k9 i; M' s% ]' a7 {) [
,则目标就是要找到k kk个最小的特征值2 y( q9 q% a2 \& F# G# y
- M( V0 X* H& T: Z( a4 {
因此,通过找到L LL的最小的k kk个特征值,可以得到对应的k kk个特征向量,这k kk特特征向量组成一个n nn×k kk维矩阵,也即H HH。一般需要对矩阵H HH按行做标准化,如下 , p7 d m; L( E% U' _ U( G9 v0 B & C" A0 D: j/ T9 W& } b& m& }一般来说,k kk远小于n nn,也就说进行了降维8 M% f+ O0 F' O7 u5 Z' a, S* {8 a
h i j ∗ = h i j ( ∑ t = 1 k h i t 2 ) 1 2 h_{ij}^{*}=\frac{h_{ij}}{(\sum\limits_{t=1}^{k}h_{it}^2)^{\frac{1}{2}}} 1 X! b; N/ n% y) ^h & _5 ?+ S# n& oij 7 W/ m$ k& t2 }0 C: ]∗$ g, ]3 S6 q1 P
# z E) w% O6 Z5 h. |) Q = 3 G8 z, g" A# V- Z
( ' h6 J- m8 p% Z8 {4 M: W
t=1/ a8 K" O# [/ j; u; `. U- k
∑* s4 V; [3 z w7 D% ^
k) t* p; u) d- a" y! l+ n
" t t: ^4 F2 @; q- k% C5 w6 s: z
h - h9 K/ V' p/ n4 ]' i2 }* x) V# u
it 1 p* _" `! G8 I0 C5 w26 V# w( F9 ?6 Q% m/ o0 h/ ~* q
: G0 ^# C( X1 p" C8 M6 i, C: m- z" V0 u5 b
) & @6 y( i3 {4 f, s$ z
2' K! `% l2 W" b, t/ ~* S2 ~6 X' L
1 ' C: y- `. I- \$ K" E& t( S2 ~" e& ]% @. f- u: M8 b3 k. F
; \; H4 U& s9 p* z( z5 e 2 ]$ n8 I# M: z. p' c( D这里需要注意,降维后导致得到的指示向量h hh对应的H HH现在并不能完全指示各样本的归属,因此一般在得到n × k n×kn×k维的矩阵H HH后还需要对每一行进行一次传统的聚类,比如使用K-Means聚类" b7 {+ G5 ^3 W
& }" Z' x8 R) Z6 X9 D
(2)规范割(常用)! h8 K0 ?( X1 V+ M( ?- G- B
规范割和比例割类似,只是把比例割的分母∣ A i ∣ |A_{i}|∣A 4 D& j) V1 m1 g% _$ t
i; ^. Q2 O+ g9 t5 v
+ ?3 M! F7 D2 ^: j! K$ p4 M9 Z" w ∣换成了v o l ( A i ) vol(A_{i})vol(A ( O; g( R( t; Oi 0 j* f4 Q! V" F0 ~! R+ k$ H, ^5 Q) h4 k; l
),定义指示向量h i j h_{ij}h 8 g8 s2 P0 j+ [( P# _: Y
ij7 j ?8 A7 ]- s( N! z: ^
' q8 t5 W, C4 g/ z9 h' g
如下 5 X; l( n2 p4 E: B& t 5 g: F4 H. S9 ?# Xh i j = { 0 , v i ∉ A j v o l ( A i ) , v i ∈ A j h_{ij}= E3 v$ h$ O& y' l) o
{0,vi∉Ajvol(Ai)−−−−−−√,vi∈Aj ( E. B7 p& F4 D6 L/ x1 B{0,vi∉Ajvol(Ai),vi∈Aj, o3 i+ F& T5 U9 J* h8 a, n1 e% j
h 0 @. V2 Q" W* q) ]
ij7 J( `( ^% E! Y& R
8 g* \6 G0 n. `- p% p2 m
={ 7 |' c5 e3 K% B' m6 v$ H
0,v % f, Z0 ^; r% z9 S3 Vi ( A) H* _, C. y3 D- f) B' p; @; c7 d4 Z: f3 r1 D4 ~& [
∈ / {* ^6 _; a [+ l) J/9 A* d6 ~( j1 k
A 0 e! h* l% d* z0 D# E* P! g; tj, C9 P& |% F, `: i% ?0 J* w
- Z4 O4 w4 n2 @3 z0 n A* p4 V % _5 P' d; Q$ }- _6 Avol(A $ L/ T$ P7 J5 ]8 C
i % \: O/ B( w5 M2 H ; Q) z! U9 e" n ) ) _6 q7 ^1 M6 L; p4 a ! @* [: u4 H" O. ] ,v " [. J+ [8 h' }" }1 a0 ]
i/ U7 R. U& |1 z' g! @
& w1 y& u' j0 H2 ? ?# G' G ∈A : M i! ]" R* V1 ]0 U/ ?. q2 V3 ]j ! D) [5 G0 h. d5 a$ b( \; i: C 1 `- `; x) h6 v: ]% x& B0 Q% X- l, d! X; _
/ i% G% q# d3 L" @' ?! j
3 {8 X/ A- |' c( A6 l9 N 4 t9 G1 X- h) S% o& ?4 c9 e9 h于是,对于h i T L h i h_{i}^{T}Lh_{i}h : t1 W! W, x1 O% @% b( Bi 1 D$ i5 B* h! }/ w- OT 0 t8 g- \ c. ^& u 9 [- E% Y4 d6 c. x Lh - g+ r: Q! P9 C5 P% c
i 5 [, m+ v% E2 i0 I: u- N2 U8 Q4 i3 d/ t: E! ]2 m
,根据拉普拉斯矩阵性质可知0 H7 F8 I% n# ~ G; s+ z! I' ~
6 ?0 k0 ]/ k$ f1 o
对于任意向量f = ( f 1 , . . . , f n ) T ∈ R n f=(f_{1},...,f_{n})^{T} \in R^{n}f=(f 0 T) \& t4 T2 J" `1 + V! L& P, u7 Z 3 j1 M l: C4 ^" D. H+ V6 u ,...,f 4 Z: P' K9 a( f) T
n - e' r7 R( z' h* n0 n7 ~/ M2 N( ?* x & c. K N0 l3 N, F/ s! H4 r ) 8 R1 T; q& S7 Y' I2 u" ]1 X
T : @3 f2 k, Q5 w ∈R 4 H# O+ C; v# i+ A) f: }) ^n 0 j; z& a; A2 N" C `5 ]1 s ,有f T L f = 1 2 ∑ i , j = 1 n w i j ( f i − f j ) 2 f^{T}Lf=\frac{1}{2}\sum\limits_{i,j=1}^{n}w_{ij}(f_{i}-f_{j})^{2}f # G+ G1 ~3 P& [
T8 a2 W$ a0 X! o( p3 R/ J" z9 ~
Lf= , G8 y4 O+ K* j3 n# d, {- J1 L2 . M& l+ Y. D$ G N# h ?1 . k' S* G" Q2 T; p0 b' h% S D2 v 1 m N; @4 U% Z7 z. y! w: V5 B ?# k* ~# E: | @
i,j=1; |6 c ~0 |1 {/ L0 y# x
∑0 q. e) _4 [) l. @) n4 W
n& E u4 C. O1 D
! k7 O& k/ Z' c7 e6 F w / q5 J7 [! S! U: O1 yij0 ~0 Y& w/ x% X9 n0 E
6 O6 }" |1 C; F (f : B) i0 g) R+ a% v {i% p* P3 M% j+ K6 }' ?: X: _
( r0 |& n. [8 ?, K5 @. Q" d −f * L$ ^% b' q' Z0 t0 U% Q
j * C& i3 J5 V: F1 f- y3 j ) t! g( N, b" U7 D ) 0 |3 u4 X9 h3 n9 P% m
2 1 g" P& I, \& v Q* I9 a- o8 x " s6 v3 g8 h" Jh i T L h i = 1 2 ∑ m = 1 ∑ n = 1 w m n ( h i m − h i n ) 2 = c u t ( A i , A ˉ i ) v o l ( A i ) h_{i}^{T}Lh_{i}=\frac{1}{2}\sum\limits_{m=1}\sum\limits_{n=1}w_{mn}(h_{im}-h_{in})^{2}=\frac{cut(A_{i},\bar A_{i})}{vol(A_{i})}) ?" P1 \6 Z( F! F T1 M
h . F. p3 ]+ [; g& p( C* L- wi 2 K9 s( x5 U$ j! O+ k2 F5 MT / J q, \# k8 v: d g7 X0 n. y/ ?5 a Lh + H1 X" w4 B, h! J A' d3 Q K6 a0 [
i: k8 I! J; \: P$ @9 ^* t
/ h2 a/ J2 z! }( O
= 8 [- n* c( |% |+ |
20 }; W% V0 W0 B! f+ t2 q
1" k9 k$ U) ]+ Y: `3 q, [$ r
- {# Z6 |+ ~2 J$ S! A& M7 D* D
5 I `2 R9 n) u; E2 Pm=1# h. w3 @5 I8 X7 T! _
∑ 7 E) ~/ X; B: i2 ^8 R7 j. r9 g* S) Z, d5 w; T, S1 A6 o
9 p: \. H7 n4 w" ?. E
n=1 3 A/ i. t2 d" X! |3 h: K∑9 v7 d1 h* O! n# Z7 `7 t
9 _$ x: j" Z1 \* U
w ' d# K8 P" X9 ^: q4 i) i+ ?0 X) }mn; f E* Q# w% w
8 @9 H, L' h9 h) f4 D6 r (h 4 M+ |0 y% [/ f# R! l0 @% L x- j
im4 w1 L6 t+ h4 l) Z
?0 Q" T9 q2 @: o
−h * d1 F/ O" i- [1 G" ?
in 1 ?) W% f2 w. d* g9 F0 e/ I9 B" m- }3 j& Z
) 3 T; j) \% a; A* @9 p. a5 u
2 " w' o2 {# F! C5 p, {) W = 9 P, j. Q9 q) T" q8 Q# ?1 o8 N
vol(A ; V+ l( m% B1 |" m# u9 k6 f8 { x2 [
i $ m: f4 B3 `4 c8 f- L* f4 C* P 2 G2 r% p: _- A! D. l% N ) * ~6 \; o" e7 R! M' D% D' Icut(A 4 R: V0 s4 [0 X6 P" ^
i% y0 j% x& G' J
' C% t4 s% F9 C) ?2 k, }; e# L , 8 P3 _( H4 W. u$ x6 v% J: @A8 L( M! q2 N: E4 y. u
ˉ! e% H- P( ?7 D6 W* W V
; [: O5 M$ N6 l* [i ( Y4 m) V7 ?: x( Y2 ~8 N |0 s: ~1 L I2 e
)0 p; w4 _! M' r* O% c
- g$ ]0 q+ T: J8 f8 n" R% S- d: N8 l8 j& X4 Y
+ Q4 p3 r7 [0 {) J+ f
严格证明过程请看刘建平博客:链接 4 U. H# r9 \& G' Q/ W' A可以看到,对于某一个子图i ii,R a t i o n C u t RationCutRationCut就对应于h i T L h i h_{i}^{T}Lh_{i}h : n5 @) `+ E! W& k: h( R& |2 D
i , y! T, ~' A2 R9 |T + ~; b" w K( V% V) e ( y* d- v. l# F. U2 b; D9 q Lh 9 l3 h+ B3 ]5 y1 V3 F( @2 oi 1 d7 i" F" r5 Q4 g* P" l( U6 q 7 w( ^, h P0 N0 o' z ,那么对于k kk个子图- l9 Z: x. u1 `# p
0 J3 }8 B4 `4 _" S0 l. ^8 O7 w. J
N C u t ( A 1 , A 2 , . . . , A k ) = ∑ i = 1 k h i T L h i = ∑ i = 1 k ( H T L H ) i i = t r ( H T L H ) NCut(A_{1},A_{2},...,A_{k})=\sum\limits_{i=1}^{k}h_{i}^{T}Lh_{i}=\sum\limits_{i=1}^{k}(H^{T}LH)_{ii}=tr(H^{T}LH) % x" |5 L. ]" H. W$ p d) ] |NCut(A w; w5 Z/ C+ J
12 t# x$ I4 j( J4 y( o- e1 G
. u4 Y9 D+ f d, f" p: i0 @$ G$ i ,A 2 g& A r# ^' i; A+ k, B. F2 ) |: h+ b: \% `1 @ / K6 ]7 Q. u9 U& I2 ` ,...,A # h) E6 y3 _$ }/ T. F# ok 5 k% y6 I. s* v! T: v: C& G. L5 ?3 d' `4 u2 v5 X
)= . x9 Y- ^8 T- w1 \6 O, ?" s
i=1+ e! i. [4 X4 j. v
∑0 R' B) r9 G* ?( u( d6 J2 _9 P; j
k, O3 b- L; W1 \+ Z9 u
& y8 ~+ k) w- S6 |5 t& |! e( G h * R$ ^1 O1 s% D+ U
i ' |: B2 Q+ T3 g$ g7 N( aT 6 m2 ?; m8 G+ J" c2 P: V6 Z1 i4 Q- P4 X+ F
Lh , k! l) `$ O; b* R
i - D8 I; c' y6 C7 [ & ~5 ?8 q& C: h8 s9 x# b. }! L = 1 P4 s8 m! i- f: z
i=1 9 h4 Q( y: V, X∑8 W& s& D* }; V) o+ A( i/ s
k * z- P! U" h1 M/ H8 d4 E% D3 T 5 Q: N* X5 q9 A/ Q2 a V. U (H , l$ R# \0 Y/ |1 l; }+ vT$ u' M# t1 @; a; X9 c+ q6 m C- X
LH) 4 H: i9 n5 H2 G; Jii9 H" @' [/ h1 K/ J* q9 X
2 i* V0 v @' }* b8 ]3 d
=tr(H 6 |& [, z9 y' |: F' ET # p! G u' F0 D) b8 w/ N& M: W LH)* N6 R- W) Y8 n3 ]' s- ^3 M2 ]0 k4 Z
1 L! U/ D; H& c6 X' K但此时H T H ≠ I H^{T}H \not=IH 0 u, B- ~# W) D9 J7 o$ x
T2 E, Q/ D( y8 h* \' ]2 z: P
H" i8 s% b3 |( m& m. Z8 {
$ x: k/ v* Q2 {& b+ `( Z' E5 F7 G=I,而是H T D H = I H^{T}DH =IH 1 N- X4 Q" O/ R% ST% ?* V1 d+ K0 p- `' L% H$ c5 C
DH=I3 h9 P! @1 f6 X! _
/ D( O% o- k; |# g9 @+ a
这是因为h i T D h i = ∑ j = 1 n h i j 2 d j = 1 v o l ( A i ) ∑ j ∈ A i d j = 1 v o l ( A i ) v o l ( A i ) = 1 h_{i}^{T}Dh_{i}=\sum\limits_{j=1}^{n}h_{ij}^{2}d_{j}=\frac{1}{vol(A_{i})}\sum\limits_{j\in A_{i}}d_{j}=\frac{1}{vol(A_{i})}vol(A_{i})=1h " t( }0 e/ m [% K, L
i. _( D* v. ^' l9 E
T - o; k0 M+ {# w; c9 ~# A' g1 C3 W7 k$ G
Dh 9 @4 q4 [) X% ]; u6 Mi% ^$ T! C3 ]) p3 |' i
0 c: O; m5 b% o7 L: t = 9 T: G& V: v& J" q9 W. L. H+ O
j=1 0 ]8 ~3 i/ X5 H. p$ `∑ 6 u! v/ A* _5 T+ Tn1 z: ]9 ^+ m$ p Q' V0 M( `
/ E4 e2 g+ I @2 V: D h / Y& ~/ A; x$ u4 k) {9 x
ij / } p' c, n, D" B, C- \8 ]: l, y2 ' k3 n$ ~. Y% d2 s! k( d, P1 s5 T1 w: J" z
d : v0 m* I8 f4 x& A$ A6 z
j ! s& Q. n! q' L7 h/ |1 ? c+ h% H9 B8 Q$ t% Z5 o
= + w- r$ E [7 c0 f0 D- L% D2 o; ~
vol(A + s+ {! G5 h/ S5 L# u& N8 c& k
i $ t2 \% V7 j; F% ]0 g4 O; x! | Y( |7 C
) 2 o# t+ q3 x$ h/ X3 L1, ]( z5 Y! N3 |# n- d3 r
: G2 A4 ?4 V- N) j
2 F, }& l0 \9 K8 @
j∈A K' v1 E+ B& t! vi0 x% U2 w* ~& s$ b" c; v6 v
) o5 i* Z3 r) v; x* J' E: s0 m 9 D0 k u* ^9 v" C3 n5 \∑+ Q2 j$ Z/ m# |& r! t1 `" \# E
* W) U) `1 G% j% T, F1 k
d 2 ] o. l$ T5 \
j # @5 G' L' o6 G " V" i% ^0 E/ t3 W2 ~ = 4 i) O! T% _* ~8 D0 O
vol(A ) X+ M% q. i1 g- Hi : |1 X" B( [! m / d/ G: K. i7 g )- {7 w7 F4 [0 A9 a
1( R4 d# i4 J7 C
) W4 D7 j$ O2 ]9 c. b vol(A 9 T- M1 g' v/ P7 p/ M6 h3 Ui0 w! R1 X# p, e6 J
$ d# p. w3 [& i. `; r h7 V )=1 . E4 L* W5 v9 }- b" } E+ c; H因此,此时切图优化目标为. x# Q K: l, y9 I
. I- T2 V& L4 d4 l0 }; W; S/ m0 ?0 l
a r g m i n ⏟ H t r ( H T L H ) s . t . H T D H = I \underbrace{argmin}_{H} tr(H^{T}LH) s.t.H^{T}DH=I 2 Y- c: ^0 V" ^0 nH " u9 R/ b) E0 _# P! l9 D+ e: g& rargmin" f1 S( d z q7 n: _. @+ n
, K- `9 B* i( M: h" l e7 g# z# b
; ?4 W# y% E( p2 c% z
: t$ S, b3 ?0 G: R2 O tr(H 4 l3 p+ P- m6 W0 n0 T) K/ lT. g! k/ Y, u: @4 x0 v: F, m, a
LH)s.t.H , |9 V) D2 t- O
T 4 V z& _) _. P3 X+ ^. v& ~ DH=I 3 x% A0 w/ @: ^( O; ?! H7 l" Y& C5 ]) |3 n3 T y* z1 O: `, M
但是现在矩阵H HH中的指示向量h hh并不是标准正交基,所以需要对H HH做一定转换。令H = D − 1 2 F H=D^{-\frac{1}{2}}FH=D 9 J1 o9 a, k- o, b, v− ) j+ Q" X0 r7 ]8 t- k8 h3 I) b( s2 : h0 Y* u( |/ L4 R# c& T& ?1 ) ^" q. t3 ?$ S. k , ^" j( u$ Z# ? ` " Q: k. f" E! x H% _; }2 l8 Z F,则H T L H = F T D − 1 2 L D − 1 2 F H^{T}LH=F^{T}D^{-\frac{1}{2}}LD^{-\frac{1}{2}}FH : o- I( b4 @+ R! z& rT) A8 k5 s1 m9 H8 z9 G( J. y; L
LH=F . K1 U$ m B7 u9 K$ T' q/ E$ xT! q9 G5 }2 Z0 @
D % k1 c3 d9 c, w/ z8 I− # z, K0 X! D/ k- G! \
2 % {! q D9 R# {. c& W2 m1 . h2 ~3 a8 u+ |& j) l) u% N) o _6 l' h6 R5 Z4 ~4 T
, d5 k* T& ?$ t; l+ i& L
LD ) i2 d* N, ?! j, A! z
− 6 p% h* Z$ L9 |: G0 t: ]2 9 {+ r0 z% x, T' L+ g1* `* F. {3 l# }: e" B8 r
2 R& A, Y+ {2 r1 i, Z3 Z1 M( s; P7 N. c& z; v, g3 L- k, D
F、H T D H = F T F = I H^{T}DH=F^{T}F=IH ; b6 n# e/ U, L$ L$ g
T , Z4 F7 Z' s- l$ u* Z) n2 m DH=F 5 U5 N5 x) W0 f* YT; b. O, p) I% Y; P
F=I,于是优化目标变更为 ! L8 S, P% n5 V2 C* u. [9 \a r g m i n ⏟ F t r ( F T D − 1 2 L D − 1 2 F ) s . t . F T F = I \underbrace{argmin}_{F} tr(F^{T}D^{-\frac{1}{2}}LD^{-\frac{1}{2}}F) s.t.F^{T}F=I. K* D+ J5 g7 ?3 C" [
F& h c( Z0 M. ~- D2 [( q
argmin / K, b( Y8 @! j$ p B( R4 U1 s0 R ; y) e( e: L) E. Y# k/ M6 `: U 4 \" P% M1 g) k& O$ ^# K7 V/ l g P+ P8 ^- G# V f tr(F ! ~8 M: ?$ \" T
T! o& F/ ?3 Z& a+ O. v
D & {: k' r5 B, }' Z5 f! C4 }( I− : ~4 E: q* R2 D+ Q/ _+ W
2" E0 T- z8 a. s9 N) T( p7 t
1/ @/ v4 a7 e; E$ T7 b/ Z' F6 u
2 ]! U+ U4 C9 |: T
, A6 y t6 g- f. U. v2 L
LD & A6 ?% \; ?6 I( p! a2 N
− % p2 w8 U0 B4 z! S+ |2 3 A7 j/ e) |! |( z/ l10 X' [6 o$ t1 m( f9 r
5 g7 L9 _3 j" X5 _: F4 N P, Y& g n
- m6 q. _1 t& t9 O F)s.t.F : j8 }# a; H& RT * g2 E u$ V3 ]* ~4 o F=I / c. i0 a h! ~' t+ J ! J& W& t- L+ X% h现在,和比例割一样,通过找到D − 1 2 L D − 1 2 D^{-\frac{1}{2}}LD^{-\frac{1}{2}}D ; c$ F* J; a4 K− ' ~- Q; y( U! s% v4 y0 k
2 3 V4 s+ j' D3 W9 ~6 A14 }7 d" u( }$ e3 c) [! R
! `7 K8 i+ l6 x. j& k% o
5 u+ i2 n% M# s3 e% S LD - ~" ~+ O$ F# C, T$ R− % i9 L3 c; B5 Q! y; H5 r2 K& f
2 $ i' h3 ^! H$ a9 b9 h1/ h' \( a/ @2 d( M2 @1 F
1 o" z0 I8 G4 F% I6 K % L. O5 ] K% j7 v (就是之前的L LL)的最小的k kk个特征值,可以得到对应的k kk个特征向量,这k kk特征向量组成一个n nn×k kk维矩阵,也即F FF,最后对F FF进行传统聚类 + D6 R' {/ K+ i. W. Q* k4 M9 x# N; s* }9 ?7 a, u
一般来说,D − 1 2 L D − 1 2 D^{-\frac{1}{2}}LD^{-\frac{1}{2}}D , Z9 [: q% w3 H$ n8 z1 f
− 7 N: W! n. g! k0 g
2 ) s% N: `, m: l1% |" E7 S9 {8 P4 E9 `" Z* w. p
% z6 e" i% V! Y. M( J+ }* j0 n: v8 w2 \" C4 Z, y) U+ I% J
LD ) Y8 B) i, e( D; [5 x9 j F: m
− & r8 x8 e8 W& n9 A, ]
2 & N8 t* Z' i* l6 d& e13 F. k2 J- U7 K! k
) F+ r4 h2 \, |1 v; A7 a6 \3 A8 }6 ~5 v, }5 f3 c [ w1 \
相当于对L LL做了一次标准化,也即L i j d i ∗ d j \frac{L_{ij}}{\sqrt{d_{i}*d_{j}}} ' J; t+ c# n& W9 I
d : P; V) l5 b, i5 o
i ( g' v- _8 Z) j- E 4 z* v& ]1 n2 U- Y ∗d 1 C, k4 f# j/ l6 h8 F- M4 }j / _: Y% n) q' _7 a2 V( k% o+ X* X* P# Z2 D" o: ^/ E
7 ?7 b, r2 m, F! _, h8 w
5 U+ j3 z2 W r5 X% [. t) c
( w: h" P* P+ Y- g/ n" gL 1 T3 g3 N' y7 G% R7 B; y. J' r' ]
ij0 F6 s. \3 _5 }# y
* W0 K) w& d5 Z% z; T0 ? 2 p- O& E9 X1 w% C3 K& k9 w" b# L j% e; b" r
0 r$ B* i8 E' Q7 D7 K9 ]; }- ^* v二:谱聚类算法流程 9 D: ~* w7 L Q# Y) D给定数据集D = { x 1 , x 2 , . . . , x n } D=\{x_{1}, x_{2}, ... , x_{n}\}D={x $ F" Z- H# P' k5 ^# A
1 $ c. \! l2 { o8 i$ X" T7 x: W; \: D* L/ z8 L' t
,x 9 w" j8 ^8 k+ c& n4 `21 u# n$ [) f5 M. M
" a5 C: m; l9 a0 A+ Q% O
,...,x ( s: {% Q% U9 n. Z3 e' S7 D* c# _
n E' c) J5 z2 C6 \ & d. M' F$ L1 {! j. | } # b0 K1 ^/ N6 }. Z, U* a9 K6 y2 n * o, o* o- K! g根据输入的相似矩阵生成方式(一般为高斯核函数)构建相似矩阵S SS(AffinityMatrix)$ f! @$ H1 W! a0 Z
根据相似矩阵S SS构建邻接矩阵W WW,再构建度矩阵D DD : ^- W8 q' J/ f计算拉普拉斯矩阵L = D − W L=D-WL=D−W % g; r) `$ Y7 i5 U, J得到标准化后的拉普拉斯矩阵D − 1 2 L D − 1 2 D^{-\frac{1}{2}}LD^{-\frac{1}{2}}D ) G$ w# y" I. e3 P2 v
− $ s& g: j. ?/ d& d
2% e/ u' E- x+ O J3 _
1, D; B/ ~) v2 {6 A$ I( D% V- t
, u# Z! e0 F& O( b8 S8 D# O+ o ( |! x8 t/ l3 a, Z LD ' {% B& C3 v4 n
− 4 C, p$ U. g9 X% B# B8 f- P/ e
2 8 W+ k3 E# C; A0 H [# @0 R1 4 e4 f; M; {: f1 R4 I4 v, E 6 Z+ h! H1 G4 Y% B3 Y5 w2 n/ g+ Y [; B: \ U
. p. F9 {) S! A* t9 ]计算D − 1 2 L D − 1 2 D^{-\frac{1}{2}}LD^{-\frac{1}{2}}D , w& d* N- o2 Y. f: `− 9 d# ~1 ]: U$ d8 q
2! ~# [4 g4 Y* O! g3 B, r5 h+ g
1' ]" z0 {; X) ~
! p8 ^- p+ C" |6 Y" E# n8 O* b k
7 I; M' k, v1 z6 { LD - V9 y, k& @! g; z0 v− 8 k& c) v! d* ^0 Q' t2/ l8 p9 c: N. l+ J7 g+ O
17 _/ C* z- f6 ]3 Y; B7 x& I
, z8 p- A# ?0 o 4 a8 w# j, P: i3 X- G1 L' P- C 最小的k kk个特征值对应的特征向量f ff( b, t a, K, | _: s
将特征向量f ff组成矩阵并按行标准化,最终组成n nn×k kk维的特征矩阵F FF _7 @9 Y5 e, A) y6 h! y9 v
F FF中每一行作为一个k kk维的样本,共n nn个样本,采用某种聚类方法进行聚类,假设聚类维数为k 、 k^{、}k / p, N* W; L2 ]$ g、; q- m7 ^9 Z0 R. c/ H
6 ?7 ?1 K, F `, e2 }' Y. U( B. v
得到簇划分C( c 1 , c 2 , . . . , c k 、 ) (c_{1}, c_{2}, ... , c_{k^{、}})(c $ K1 r9 F% i% [1 0 ]5 c& U& D8 h2 h: B- ^/ |& \1 J. E. X$ ~ / Q o4 }( A" i/ j ,c , ?2 R- }5 _2 \, }1 E
2 4 `$ T" y) }! A& s % O* O: I+ y; p5 l1 [& e0 M ,...,c 2 e9 j- R0 F4 |# K* E: E$ m
k ( O# u$ A' E) a$ n5 C, V3 v$ }7 S
、 ' Q3 r" V, N3 q7 d: r& V* a6 m+ Z0 X
6 w0 t! z) F1 X' _
)2 e. c, l0 C& `, f* v5 s6 X
三:Python实现$ E. |% ~' f! g$ i! l0 l7 q
import matplotlib.pyplot as plt * u+ Z# w; S" M+ G1 c2 [: ^4 X$ j$ aimport numpy as np + [. O( B1 T+ O, j2 k5 b$ {import pandas as pd: B- o) N' p" d) ~+ z E4 [ t: i
from sklearn.cluster import KMeans % ?# ?! @4 _, ~' i- ~from sklearn.metrics.pairwise import rbf_kernel" Y7 S8 ?+ }0 H; k
from sklearn.datasets import make_blobs2 s2 I4 {$ ]* @! U/ _2 ?3 _
from sklearn.preprocessing import normalize, b( V" ^+ d Q4 d
, @( }7 W& w" ?9 m
def get_affinity_matrix(data_set): 0 ]; M A/ V7 P3 C" u% ~ # 利用高斯核函数计算相似矩阵(全连接) / x5 o* I6 [ [+ s0 ` rbf = rbf_kernel(data_set) . M, j$ l7 C, W7 l6 e for i in range(len(rbf)): 2 S& V/ t( q+ _5 F* F rbf[i, i] = 0 ) H0 u' U3 y' E; M! d6 j return rbf ( \8 B8 {# s+ h i+ S4 I& a( ` 9 J& y' g6 _% M7 Z1 [% C- N4 l% P% P# `5 \
def distance(x1, x2):7 Y! y- e3 ?& R
""" , W; v3 t- w6 m 获得两个样本点之间的距离 ! l: n5 \* M. S& n1 F7 a. D :param x1: 样本点14 L- `1 X6 B% h: t& }
:param x2: 样本点2# ]/ _. O/ D( ~, f
:return: - o! g+ q- u& l) C2 q* i """ ; x! L$ R3 [0 a+ p. k- ]3 S dist = np.sqrt(np.power(x1-x2,2).sum()) , c- V" `- Q1 U: J return dist * O1 G& L6 B# H. X6 v1 ~8 d 6 E. M: _& u; C- i; c9 cdef get_dist_matrix(data):% x& D; {' b8 i0 Y2 O$ M
""" % I" {- Z( r0 X+ { 获取距离矩阵 # j& M7 b, \% z4 u :param data: 样本集合1 c* q9 T' B) t9 X
:return: 距离矩阵' l$ V% ^# [& q3 f
"""4 q- U# X" Y2 Z4 ]$ x' {3 q
n = len(data) #样本总数- w+ n0 c! `' I2 q* L% s, B
dist_matrix = np.zeros((n, n)) # 初始化邻接矩阵为n×n的全0矩阵. _) a# D: i/ O. [# H/ R" t7 X
for i in range(n):0 P0 {3 o- V% _( D6 q0 |
for j in range(i+1, n):5 U0 v5 m3 v, }* ]! I) p, @
dist_matrix[j] = dist_matrix[j] = distance(data, data[j]) - E9 T! @* `9 p$ S return dist_matrix3 N$ d' u. Z/ k) x6 D
6 i8 `! Z4 d" O- f% u* X% y- |def get_W(data, k):" V; ~( n* }3 G1 c" @) G
# 获取邻接矩阵(K邻近法)8 F% W1 P: O3 H8 j& W% \0 T
n = len(data) $ G a+ L1 Y) d! O5 u, c dist_matrix = get_dist_matrix(data) / f& d: Y: |" s9 B W = np.zeros((n, n))0 j- Z0 ^9 H1 y# ]
for idx, item in enumerate(dist_matrix):. P# s% i1 [# z, Q. W$ p$ Y
idx_array = np.argsort(item) # 每一行距离列表进行排序,得到对应的索引列表 r9 Z) Y* S- @. N) F' w( i' O# I2 R W[idx][idx_array[1:k+1]] = 1: a' y0 o2 _) _. G
transpW =np.transpose(W) & O$ {# f' V4 @ K4 I return (W+transpW)/2 8 x" h7 A- j& b3 F9 G, V; E3 y7 H; H4 R+ i6 ]
def spectral_clustering(data_set, k): 6 C, J2 s3 `& u* o# E o # 利用相似矩阵S得到邻接矩阵W# q# ^% o( `& r
W = get_affinity_matrix(data_set) #高斯核函数(全连接法)! m5 Z s- S- H! P+ w: g6 f' ]5 L7 M
# W = get_W(data_set, k) # K邻近法 ' b2 W; N+ |$ p1 M" b. r 6 z8 ` }; S/ v # 计算度矩阵D,并得到矩阵D的1/2次方的逆矩阵(便于计算拉普拉斯矩阵) ' k2 V% u4 I9 J! k, s- c2 B D_inv = np.diag(np.power(np.sum(W, axis=1), -0.5)) ( w J6 ]& Z1 _0 e3 s% G- v0 W . T$ Q0 d( {$ Q7 N! h9 f # 计算拉普拉斯矩阵L=D-W 6 G% F) @1 _8 ^1 x# S8 d! H q- ? # 标准化拉普拉斯矩阵l = D_inv*L*D_inv=I-D_inv*W*D_inv Y, A' s) Y& L1 h L = np.eye(len(data_set)) - np.dot(np.dot(D_inv, W), D_inv)0 y/ g, A; B; _% q
" O4 q- t) H2 h # 得到特征值和特征向量 8 ~/ w! ?$ W0 I5 s eigvals, eigvecs = np.linalg.eig(L)9 s B4 P a2 e: N8 Q
/ u! d/ I- ^9 Q+ H3 _, s
# 找到前k个最小的特征值(索引) & M/ o4 A, D; w# I8 i4 D: F2 q k_smallest_eigvals_index = np.argsort(eigvals)[:k] . {8 N6 n- W$ F 3 H' b( r( h$ K0 T/ ]$ K4 k # 取出这k小特征值对应的特征向量,并正则化) C: ~- k3 v0 w. P2 n3 a+ K
k_smallest_eigvecs = normalize(eigvecs[:, k_smallest_eigvals_index]) # ]. @7 p# j8 v2 S8 i' A0 L 3 T ?/ O3 f; }+ I2 _ # 使用K_Means聚类# X2 V5 j2 V' d/ a4 }+ ]7 B0 G$ P' G
return KMeans(n_clusters=k).fit_predict(k_smallest_eigvecs)( W$ i5 O% H! m0 R5 X
$ @: j# Q1 b" a' J2 {
" J0 R6 t K/ P! i! h3 X$ Z
raw_data = pd.read_csv(r'E:\Postgraduate\Dataset\jain.csv', header=None) % H' r4 X* R, M3 d* z6 N3 X& _- ~raw_data.columns = ['X', 'Y'] 0 E+ A( C" E, K) o+ o1 o0 lx_axis = 'X' ! l% U, O6 a* s6 Z* gy_axis = 'Y' % f8 _5 A8 d4 M. R & X/ W0 W, y+ _examples_num = raw_data.shape[0]9 d/ Q9 m: j% I
train_data = raw_data[[x_axis, y_axis]].values.reshape(examples_num, 2)' s1 j% J9 b: y+ x" k3 T9 Z
) {' h2 v6 S! ~' H$ k% K