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