19. 元々の Spectral clustering
”On Spectral Clustering: Analysis and an algorithm”, A. Ng, M. Jordan, Y. Weiss, NIPS 2001
1. n × n の類似度行列 A がある
• Ai,j (i ̸= j) はデータ i とデータ j の類似度
• Ai,i = 0
2. Di,i が A の i 行の合計であるような対角行列 D を考える
3. L = D−1/2
AD−1/2
を計算する
4. L の固有値・固有ベクトルのうち、固有値が大きい k 個のベクトルから n × k 行列の X を作る
5. Yi,j = Xi,j/ j X
1/2
i,j
2
と、X を正規化した n × k 行列 Y を作る
6. Y を使って k-Means する
21.
22.
25. ”Multiclass Spectral Clustering”, S. Yu, J. Shi, IEEE Computer Vision 2003
V 頂点(データ)の集合
W 類似度行列(非負&対称行列)
Γk
V {V1, · · · , Vk}:データの k 個クラスタリング
V = ∪k
i=1Vi Vi ∩ Vj = ∅ (i ̸= j)
links(A, B) = i∈A,j∈B W(i, j) A から B への類似度和
degree(A) = links(A, V) A の類似度和(度数)
linkratio(A, B) = links(A,B)
degree(A) 正規化した links
knassoc(Γk
V ) = 1
k
k
i=1 linkratio(Vi, Vi) アソシエーション
kncuts(Γk
V ) = 1
k
k
i=1 linkratio(Vi, VVi) カット
knassoc(Γk
V ) + kncuts(Γk
V ) = 1 kncats の最小化 ⇒ knassoc の最大化
Xl = (X(1, l), · · · , X(n, l)) X(i, l) は、データ i がクラスタ l に含まれてたら 1、含まれてなかったら 0
X = [X1, · · · , Xk] n × k 分割行列
1d 全部の値が 1 である d 次元ベクトル
Diag(a) ベクトル a から対角行列を作る関数
D = Diag(W1n) 度数行列(対角成分は、各データへの類似度の和)
links(Vl, Vl) = XT
l WXl links を行列の計算に変換
degree(Vl) = XT
l DXl degree を行列の計算に変換
26. ってことは、この問題は以下になる(PNCX)。
maximize ε(X) =
1
k
k
l=1
XT
l WXl
XT
l DXl
subject to X ∈ {0, 1}
n×k
X1k = 1n
今、Z = f(X) = X(XT
DX)−1/2
という行列を考える。
この行列は以下の特徴を持つ。(D が対角行列なので)
ZT
DZ = (XT
DX)−1/2
XT
DX(XT
DX)−1/2
= Ik
すると、PNCX は以下の PNCZ に変形できる。
maximize ε(Z) =
1
k
tr(ZT
WZ)
subject to ZT
DZ = Ik
このトレースへの変換が非常に重要だと思うのだが、こ
れが載っていると思われる論文(P. Chan, D. Schlag, Y.
Zien. ”Spectral k-way ratio-cut partitioning and cluster-
ing”. IEEE Computer-aided Design of Integrated Circuits
and Systems, 1994)が有料で読めない。
グラフ理論の教科書とかには書いてあるのかなぁ。
P = D−1
W となる正規化重み行列 P を考える。P は正規
化された実対称行列(確率行列)なので、すべて正の実数で
ある固有値を持ち、その最大値は 1 である。
対角成分に P の固有値を置いた行列を S、固有ベクトルを並
べた行列を V とする。固有値固有ベクトルの定義 PV = V S
から、式を変形していくと、以下が得られる。( ¯V = D1/2
V )
D−1/2
WD−1/2
= ¯V S ¯V −T ¯V T ¯V = In
PNCX に V を代入した場合が、最も ε(V ) が大きくなるの
は明らか。ってことは、P の固有値の大きい順に k 個足した
ものが PNCX の最大値である。
となると、以下の手順で最適な分割 ˜X∗
が求められる。
Z∗
= [V1, · · · , Vk]
X = f−1
(Z) = Diag(diag−1/2
(ZZT
))Z
˜X∗
= f−1
(Z∗
)R
1. P = D−1
W を固有値分解して、固有値が大きい top k
個のベクトルで Z∗
(n × k 行列)を作る
2. X から Z を作った変換の逆変換 f−1
を考える(diag
は対角成分だけ強引に足し合わせる関数)
3. RT
R = Ik となる任意の行列 R をとって、Z∗
に f−1
かます