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