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