\qquad 谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也不复杂。在处理实际的聚类问题时,个人认为谱聚类是应该首先考虑的几种算法之一。下面我们就对谱聚类的算法原理做一个总结。
1. 谱聚类概述
\qquad 谱聚类是从图论中演化出来的算法,后来在聚类中得到了广泛的应用。它的主要思想是把所有的数据看做空间中的点,这些点之间可以用边连接起来。距离较远的两个点之间的边权重值较低,而距离较近的两个点之间的边权重值较高,通过对所有数据点组成的图进行切图,让切图后不同的子图间边权重和尽可能的低,而子图内的边权重和尽可能的高,从而达到聚类的目的。
2. 谱聚类基础之一:无向权重图
\qquad 对于一个图 G G G,我们一般用点的集合 V V V和边的集合 E E E来描述。即 G ( V , E ) G(V,E) G(V,E),其中 V V V即为我们数据集里面所有的点 ( v 1 , v 2 , … , v n ) (v_1,v_2,\dots,v_n) (v1,v2,…,vn),对于 V V V中的任意两个点,可以有边连接,也可以没有边连接。我们定义权重 w i j w_{ij} wij为点 v i v_i vi和 v j v_j vj之间的权重,由于我们是无向图,所以 w i j = w j i w_{ij}=w_{ji} wij=wji。
\qquad
对于有边连接的两个点
v
i
v_i
vi和
v
j
v_j
vj,
w
i
j
>
0
w_{ij} > 0
wij>0,对于没有边连接的两个点
v
i
v_i
vi和
v
j
v_j
vj,
w
i
j
=
0
w_{ij} = 0
wij=0,对于图中的任意一个点
v
i
v_i
vi,它的度
d
i
d_i
di定义为和它相连的所有边的权重之和,即
d
i
=
∑
j
=
1
n
w
i
j
d_i = \sum_{j=1}^n w_{ij}
di=j=1∑nwij
\qquad
利用每个点度的定义,我们可以得到一个
n
∗
n
n*n
n∗n的度矩阵
D
D
D,它是一个对角矩阵,只有主对角线有值,对应第
i
i
i行的第
i
i
i个点的度数,定义如下:
D
=
(
d
1
…
…
…
…
d
2
…
…
⋮
⋮
⋱
⋮
…
…
…
d
n
)
D=\left(\begin{array}{} d_1&\dots&\dots&\dots \\ \dots&d_2&\dots&\dots \\ \vdots&\vdots&\ddots&\vdots \\ \dots&\dots&\dots&d_n \end{array}\right)
D=⎝⎜⎜⎜⎛d1…⋮……d2⋮………⋱………⋮dn⎠⎟⎟⎟⎞
\qquad 利用所有点之间的权重值,我们可以得到图的邻接矩阵 W W W,它也是一个 n ∗ n n*n n∗n的矩阵,第 i i i行的第 j j j个值对应我们的权重 w i j w_{ij} wij。
\qquad
除此之外,对于点集
V
V
V的的一个子集
A
⊂
V
A \subset V
A⊂V,我们定义:
∣
A
∣
:
=
子
集
A
中
点
的
个
数
v
o
l
(
A
)
=
∑
i
∈
A
d
i
|A| := 子集A中点的个数 \\ vol(A) = \sum_{i \in A} d_{i}
∣A∣:=子集A中点的个数vol(A)=i∈A∑di
3. 谱聚类基础之二:相似矩阵
\qquad 邻接矩阵 W W W,它是由任意两点之间的权重值 w i j w_{ij} wij组成的矩阵。通常我们可以自己输入权重,但是在谱聚类中,我们只有数据点的定义,并没有直接给出这个邻接矩阵,那么怎么得到这个邻接矩阵呢?
\qquad 基本思想是,距离较远的两个点之间的边权重值较低,而距离较近的两个点之间的边权重值较高,不过这仅仅是定性,我们需要定量的权重值。一般来说,我们可以通过样本点距离度量的相似矩阵 S S S来获得邻接矩阵 W W W。
\qquad 构建邻接矩阵 W W W的方法有三类。 ϵ \epsilon ϵ-邻近法,K邻近法和全连接法。
\qquad
对于
ϵ
\epsilon
ϵ-邻近法,它设置了一个距离阈值
ϵ
\epsilon
ϵ,然后用欧式距离
s
i
j
s_{ij}
sij度量任意两点
x
i
x_i
xi和
x
j
x_j
xj的距离。即相似矩阵的
s
i
j
=
∣
∣
x
i
−
x
j
∣
∣
2
s_{ij}=||x_i-x_j||^2
sij=∣∣xi−xj∣∣2,然后根据
s
i
j
s_{ij}
sij和
ϵ
\epsilon
ϵ的大小关系,来定义邻接矩阵
W
W
W如下:
W
=
{
0
s
i
j
>
ϵ
ϵ
s
i
j
≤
ϵ
W=\begin{cases} 0 & s_{ij} > \epsilon \\ \epsilon & s_{ij} \le \epsilon \end{cases}
W={0ϵsij>ϵsij≤ϵ
\qquad 从上式可见,两点间的权重要不就是 ϵ \epsilon ϵ,要不就是0,没有其他的信息了。距离远近度量很不精确,因此在实际应用中,我们很少使用 ϵ \epsilon ϵ-邻近法。
\qquad 第二种定义邻接矩阵 W W W的方法是K邻近法,利用KNN算法遍历所有的样本点,取每个样本最近的k个点作为近邻,只有和样本距离最近的k个点之间的 w i j > 0 w_{ij}>0 wij>0。但是这种方法会造成重构之后的邻接矩阵W非对称,我们后面的算法需要对称邻接矩阵。为了解决这种问题,一般采取下面两种方法之一:
\qquad
第一种K邻近法是只要一个点在另一个点的K近邻中,则保留
s
i
j
s_{ij}
sij
w
i
j
=
w
j
i
=
{
0
x
i
∉
K
N
N
(
x
j
)
a
n
d
x
j
∉
K
N
N
(
x
i
)
e
x
p
(
−
∣
∣
x
i
−
x
j
∣
∣
2
2
σ
2
)
x
i
∈
K
N
N
(
x
j
)
o
r
x
j
∈
K
N
N
(
x
i
)
w_{ij} = w_{ji} = \begin{cases} 0 & x_i \notin KNN(x_j) \ and \ x_j \notin KNN(x_i) \\ exp(-\dfrac{||x_i-x_j||^2}{2\sigma^2}) & x_i \in KNN(x_j) \ or \ x_j \in KNN(x_i) \end{cases}
wij=wji=⎩⎨⎧0exp(−2σ2∣∣xi−xj∣∣2)xi∈/KNN(xj) and xj∈/KNN(xi)xi∈KNN(xj) or xj∈KNN(xi)
\qquad
第二种K邻近法是必须两个点互为K近邻中,才能保留
s
i
j
s_{ij}
sij
w
i
j
=
w
j
i
=
{
0
x
i
∉
K
N
N
(
x
j
)
o
r
x
j
∉
K
N
N
(
x
i
)
e
x
p
(
−
∣
∣
x
i
−
x
j
∣
∣
2
2
σ
2
)
x
i
∈
K
N
N
(
x
j
)
a
n
d
x
j
∈
K
N
N
(
x
i
)
w_{ij} = w_{ji} = \begin{cases} 0 & x_i \notin KNN(x_j) \ or\ x_j \notin KNN(x_i) \\ exp(-\dfrac{||x_i-x_j||^2}{2\sigma^2}) & x_i \in KNN(x_j) \ and\ x_j \in KNN(x_i) \end{cases}
wij=wji=⎩⎨⎧0exp(−2σ2∣∣xi−xj∣∣2)xi∈/KNN(xj) or xj∈/KNN(xi)xi∈KNN(xj) and xj∈KNN(xi)
\qquad
第三种定义邻接矩阵
W
W
W的方法是全连接法,相比前两种方法,第三种方法所有的点之间的权重值都大于0,因此称之为全连接法。可以选择不同的核函数来定义边权重,常用的有多项式核函数,高斯核函数和Sigmoid核函数。最常用的是高斯核函数RBF,此时相似矩阵和邻接矩阵相同:
w
i
j
=
s
i
j
=
e
x
p
(
−
∣
∣
x
i
−
x
j
∣
∣
2
2
σ
2
)
w_{ij} = s_{ij} = exp(-\dfrac{||x_i-x_j||^2}{2\sigma^2})
wij=sij=exp(−2σ2∣∣xi−xj∣∣2)
\qquad 在实际的应用中,使用第三种全连接法来建立邻接矩阵是最普遍的,而在全连接法中使用高斯径向核RBF是最普遍的。
4. 谱聚类基础之三:拉普拉斯矩阵
\qquad 单独把拉普拉斯矩阵(Graph Laplacians)拿出来介绍是因为后面的算法和这个矩阵的性质息息相关。它的定义很简单,拉普拉斯矩阵 L = D − W L=D-W L=D−W。 D D D即为我们第二节讲的度矩阵,它是一个对角矩阵。而 W W W即为我们第二节讲的邻接矩阵,它可以由我们第三节的方法构建出。
\qquad 拉普拉斯矩阵有一些很好的性质如下:
\qquad 1)拉普拉斯矩阵是对称矩阵,这可以由 D D D和 W W W都是对称矩阵而得。
\qquad 2)由于拉普拉斯矩阵是对称矩阵,则它的所有的特征值都是实数。
\qquad
3)对于任意的向量
f
f
f,我们有:
f
T
L
f
=
1
2
∑
i
,
j
=
1
n
w
i
j
(
f
i
−
f
j
)
2
f^TLf = \dfrac{1}{2} \sum_{i,j=1}^n w_{ij} (f_i-f_j)^2
fTLf=21i,j=1∑nwij(fi−fj)2
这个利用拉普拉斯矩阵的定义很容易得到如下:
D
D
D矩阵只有对角线有元素,
W
W
W矩阵对角线没有元素
f
T
L
f
=
f
T
D
f
−
f
T
W
f
=
∑
i
=
1
n
d
i
f
i
2
−
∑
i
,
j
=
1
n
w
i
j
f
i
f
j
=
1
2
(
∑
i
=
1
n
d
i
f
i
2
−
2
∑
i
,
j
=
1
n
w
i
j
f
i
f
j
+
∑
j
=
1
n
d
j
f
j
2
)
=
1
2
∑
i
,
j
=
1
n
w
i
j
(
f
i
−
f
j
)
2
\begin{aligned} f^TLf &= f^TDf - f^TWf = \sum_{i=1}^n d_i f_i^2-\sum_{i,j=1}^n w_{ij}f_if_j \\ &=\dfrac{1}{2}(\sum_{i=1}^nd_if_i^2-2\sum_{i,j=1}^n w_{ij}f_if_j + \sum_{j=1}^nd_jf_j^2) \\ &=\dfrac{1}{2}\sum_{i,j=1}^nw_{ij}(f_i-f_j)^2 \end{aligned}
fTLf=fTDf−fTWf=i=1∑ndifi2−i,j=1∑nwijfifj=21(i=1∑ndifi2−2i,j=1∑nwijfifj+j=1∑ndjfj2)=21i,j=1∑nwij(fi−fj)2
\qquad 4) 拉普拉斯矩阵是半正定的,且对应的 n n n个实数特征值都大于等于 0 0 0,即 0 ≤ λ 1 ≤ λ 2 ≤ ⋯ ≤ λ n 0 \le \lambda_1 \le \lambda_2 \le \dots \le \lambda_n 0≤λ1≤λ2≤⋯≤λn, 且最小的特征值为 0 0 0,这个由性质3很容易得出。
5. 谱聚类基础之四:无向图切图
\qquad 对于无向图 G G G的切图,我们的目标是将图 G ( V , E ) G(V,E) G(V,E)切成相互没有连接的k个子图,每个子图点的集合为: A 1 , A 2 , … , A k A_1,A_2,\dots,A_k A1,A2,…,Ak,它们满足 A i ⋂ A j = ∅ A_i \bigcap A_j = \emptyset Ai⋂Aj=∅,且 A i ⋃ A 2 ⋃ ⋯ ⋃ A k = V A_i \bigcup A_2 \bigcup \dots \bigcup A_k = V Ai⋃A2⋃⋯⋃Ak=V。
\qquad
对于任意两个子图点的集合
A
,
B
⊂
V
,
A
⋂
B
=
∅
A,B \subset V,A \bigcap B = \emptyset
A,B⊂V,A⋂B=∅,我们定义A和B之间的切图权重为:
W
(
A
,
B
)
=
∑
i
∈
A
,
j
∈
B
w
i
j
W(A,B) = \sum_{i \in A, j \in B} w_{ij}
W(A,B)=i∈A,j∈B∑wij
\qquad
那么对于我们k个子图点的集合:
A
1
,
A
2
,
…
,
A
k
A_1,A_2,\dots,A_k
A1,A2,…,Ak,我们定义切图cut为:
c
u
t
(
A
1
,
A
2
,
…
,
A
k
)
=
1
2
∑
i
=
1
k
W
(
A
i
,
A
i
‾
)
cut(A_1,A_2,\dots,A_k) = \dfrac{1}{2} \sum_{i=1}^k W(A_i,\overline{A_i})
cut(A1,A2,…,Ak)=21i=1∑kW(Ai,Ai)
\qquad
其中
A
i
‾
\overline{A_i}
Ai为
A
i
A_i
Ai的补集,意为除
A
i
A_i
Ai集外其他
V
V
V的子集的并集。
\qquad
那么如何切图可以让子图内的点权重和高,子图间的点权重和低呢?一个自然的想法就是最小化
c
u
t
(
A
1
,
A
2
,
…
,
A
k
)
cut(A_1,A_2,\dots,A_k)
cut(A1,A2,…,Ak), 但是可以发现,这种极小化的切图存在问题,如下图:
\qquad
我们选择一个权重最小的边缘的点,比如C和H之间进行cut,这样可以最小化
c
u
t
(
A
1
,
A
2
,
…
,
A
k
)
cut(A_1,A_2,\dots,A_k)
cut(A1,A2,…,Ak),但是却不是最优的切图,如何避免这种切图,并且找到类似图中"Best Cut"这样的最优切图呢?我们下一节就来看看谱聚类使用的切图方法。
6. 谱聚类之切图聚类
\qquad 为了避免最小切图导致的切图效果不佳,我们需要对每个子图的规模做出限定,一般来说,有两种切图方式,第一种是RatioCut,第二种是Ncut。下面我们分别加以介绍。
6.1 RatioCut切图
\qquad
RatioCut切图为了避免第五节的最小切图,对每个切图,不光考虑最小化
c
u
t
(
A
1
,
A
2
,
…
,
A
k
)
cut(A_1,A_2,\dots,A_k)
cut(A1,A2,…,Ak),它还同时考虑最大化每个子图点的个数,即:
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,\dots,A_k) = \dfrac{1}{2}\sum_{i=1}^k \dfrac{W(A_i,\overline{A_i})}{|A_i|}
RatioCut(A1,A2,…,Ak)=21i=1∑k∣Ai∣W(Ai,Ai)
\qquad 那么怎么最小化这个RatioCut函数呢?牛人们发现,RatioCut函数可以通过如下方式表示。
\qquad
我们引入指示向量
h
j
∈
{
h
1
,
h
2
,
…
,
h
k
}
j
=
1
,
2
,
…
,
k
h_j \in \{h_1,h_2,\dots,h_k\} \ j = 1,2,\dots,k
hj∈{h1,h2,…,hk} j=1,2,…,k,对于任意一个向量
h
j
h_j
hj,它是一个n维向量(n为样本数),我们定义
h
i
j
h_{ij}
hij为:
h
i
j
=
{
0
v
i
∉
A
j
1
∣
A
j
∣
v
i
∈
A
j
h_{ij = }\begin{cases} 0 & v_i \notin A_j \\ \dfrac{1}{\sqrt{|A_{j}|}} & v_i \in A_j \end{cases}
hij=⎩⎨⎧0∣Aj∣1vi∈/Ajvi∈Aj
\qquad
那么我们对于
h
i
T
L
h
i
h_i^TLh_i
hiTLhi有,:
h
i
T
L
h
i
=
1
2
∑
m
=
1
∑
n
=
1
w
m
n
(
h
m
i
−
h
n
i
)
2
=
1
2
[
∑
m
∈
A
i
,
n
∉
A
i
w
m
n
(
1
∣
A
i
∣
−
0
)
2
+
∑
m
∉
A
i
,
n
∈
A
i
w
m
n
(
0
−
1
∣
A
i
∣
)
2
]
=
1
2
(
∑
m
∈
A
i
,
n
∉
A
i
w
m
n
1
∣
A
i
∣
+
∑
m
∉
A
i
,
n
∈
A
i
w
m
n
1
∣
A
i
∣
)
=
1
2
(
c
u
t
(
A
i
,
A
i
‾
)
1
∣
A
i
∣
+
c
u
t
(
A
i
‾
,
A
i
)
1
∣
A
i
∣
)
=
c
u
t
(
A
i
,
A
i
‾
)
∣
A
i
∣
\begin{aligned} h_i^TLh_i &= \dfrac{1}{2}\sum_{m=1}\sum_{n=1}w_{mn}(h_{mi}-h_{ni})^2 \\ &=\dfrac{1}{2}[\sum_{m \in A_i,n\notin A_i} w_{mn}(\dfrac{1}{\sqrt{|A_i|}}-0)^2 + \sum_{m \notin A_i,n \in A_i}w_{mn}(0-\dfrac{1}{\sqrt{|A_i|}})^2] \\ &=\dfrac{1}{2}(\sum_{m \in A_i,n\notin A_i} w_{mn} \dfrac{1}{|A_i|} + \sum_{m \notin A_i,n \in A_i}w_{mn}\dfrac{1}{|A_i|}) \\ &= \dfrac{1}{2}(cut(A_i,\overline{A_i})\dfrac{1}{|A_i|} + cut(\overline{A_i},A_i)\dfrac{1}{|A_i|}) \\ &=\dfrac{cut(A_i,\overline{A_i})}{|A_i|} \end{aligned}
hiTLhi=21m=1∑n=1∑wmn(hmi−hni)2=21[m∈Ai,n∈/Ai∑wmn(∣Ai∣1−0)2+m∈/Ai,n∈Ai∑wmn(0−∣Ai∣1)2]=21(m∈Ai,n∈/Ai∑wmn∣Ai∣1+m∈/Ai,n∈Ai∑wmn∣Ai∣1)=21(cut(Ai,Ai)∣Ai∣1+cut(Ai,Ai)∣Ai∣1)=∣Ai∣cut(Ai,Ai)
\qquad
上述第一式用了上面第四节的拉普拉斯矩阵的性质3.
f
T
L
f
=
1
2
∑
i
,
j
=
1
n
w
i
j
(
f
i
−
f
j
)
2
f^TLf = \dfrac{1}{2} \sum_{i,j=1}^n w_{ij} (f_i-f_j)^2
fTLf=21i,j=1∑nwij(fi−fj)2
\qquad
第二式用到了指示向量的定义,另外第三式用到了上述第5节
c
u
t
cut
cut,
c
u
t
(
A
1
,
A
2
,
…
,
A
k
)
=
1
2
∑
i
=
1
k
W
(
A
i
,
A
i
‾
)
cut(A_1,A_2,\dots,A_k) = \dfrac{1}{2} \sum_{i=1}^k W(A_i,\overline{A_i})
cut(A1,A2,…,Ak)=21i=1∑kW(Ai,Ai)
c
u
t
(
A
i
,
A
i
‾
)
=
1
2
(
W
(
A
i
,
A
i
‾
)
+
W
(
A
i
‾
,
A
i
)
)
=
1
2
(
∑
m
∈
A
i
,
n
∉
A
i
w
m
n
+
∑
m
∉
A
i
,
n
∈
A
i
w
m
n
)
=
W
(
A
i
,
A
i
‾
)
\begin{aligned} cut(A_i,\overline{A_i}) &= \dfrac{1}{2}(W(A_i,\overline{A_i}) + W(\overline{A_i},A_i)) \\ &= \dfrac{1}{2} (\sum_{m \in A_i,n\notin A_i} w_{mn} +\sum_{m \notin A_i,n \in A_i}w_{mn} ) \\ & = W(A_i,\overline{A_i}) \end{aligned}
cut(Ai,Ai)=21(W(Ai,Ai)+W(Ai,Ai))=21(m∈Ai,n∈/Ai∑wmn+m∈/Ai,n∈Ai∑wmn)=W(Ai,Ai)
c
u
t
(
A
i
‾
,
A
i
)
=
1
2
(
∑
m
∉
A
i
,
n
∈
A
i
w
m
n
+
∑
m
∈
A
i
,
n
∉
A
i
w
m
n
)
cut(\overline{A_i},A_i) = \dfrac{1}{2} (\sum_{m \notin A_i,n \in A_i}w_{mn} +\sum_{m \in A_i,n\notin A_i} w_{mn})
cut(Ai,Ai)=21(m∈/Ai,n∈Ai∑wmn+m∈Ai,n∈/Ai∑wmn)
\qquad
可以看出,对于某一个子图
i
i
i,它的RatioCut对应于
h
i
T
L
H
i
h_i^TLH_i
hiTLHi。
R
a
t
i
o
C
u
t
(
A
1
)
=
1
2
W
(
A
1
,
A
1
‾
)
∣
A
1
∣
∝
c
u
t
(
A
i
,
A
i
‾
)
∣
A
i
∣
=
h
i
T
L
H
i
RatioCut(A_1) = \dfrac{1}{2}\dfrac{W(A_1,\overline{A_1})}{|A_1|} \propto \dfrac{cut(A_i,\overline{A_i})}{|A_i|} = h_i^TLH_i
RatioCut(A1)=21∣A1∣W(A1,A1)∝∣Ai∣cut(Ai,Ai)=hiTLHi
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,\dots,A_k) = \sum_{i=1}^k h_i^TLh_i = \sum_{i=1}^k (H^TLH)_{ii} = tr(H^TLH)
RatioCut(A1,A2,…,Ak)=i=1∑khiTLhi=i=1∑k(HTLH)ii=tr(HTLH)
\qquad
其中,
t
r
(
H
T
L
H
)
tr(H^TLH)
tr(HTLH)是矩阵的迹,即对角线的求和,
H
H
H是归一化的正交基矩阵。也就是说,我们的RatioCut切图,实际上就是最小化我们的
t
r
(
H
T
L
H
)
tr(H^TLH)
tr(HTLH),注意到
H
T
H
=
I
H^TH=I
HTH=I,则我们的切图优化目标为:
a
r
g
m
i
n
⎵
H
t
r
(
H
T
L
H
)
s
.
t
.
H
T
H
=
I
\underbrace{arg\ min}_H \ \ \ \ tr(H^TLH) \ \ \ s.t. \ H^TH=I
H
arg min tr(HTLH) s.t. HTH=I
\qquad
注意到我们H矩阵里面的每一个指示向量都是n维的,向量中每个变量的取值为0或者
1
∣
A
i
∣
\dfrac{1}{\sqrt{|A_i|}}
∣Ai∣1有
2
n
2^n
2n种取值,有k个子图的话就有k个指示向量,共有
k
2
n
k2^n
k2n种H,因此找到满足上面优化目标的H是一个NP难的问题。
\qquad 注意观察 t r ( H T L H ) tr(H^TLH) tr(HTLH)中每一个优化子目标 h i T L h i h_i^TLh_i hiTLhi,其中 h h h是单位正交基, L为对称矩阵,此时 h i T L h i h_i^TLh_i hiTLhi的最大值为L的最大特征值,最小值是L的最小特征值。如果你对主成分分析PCA很熟悉的话,这里很好理解。在PCA中,我们的目标是找到协方差矩阵(对应此处的拉普拉斯矩阵L)的最大的特征值,而在我们的谱聚类中,我们的目标是找到目标的最小的特征值,得到对应的特征向量,此时对应二分切图效果最佳。也就是说,我们这里要用到维度规约的思想来近似去解决这个NP难的问题。
\qquad 对于 h i T L h i h_i^TLh_i hiTLhi,我们的目标是找到最小的L的特征值,而对于 t r ( H T L H ) = ∑ i = 1 n h i T L h i tr(H^TLH)=\sum\limits_{i=1}^n h_i^TLh_i tr(HTLH)=i=1∑nhiTLhi,则我们的目标就是找到k个最小的特征值,一般来说,k远远小于n,也就是说,此时我们进行了维度规约,将维度从n降到了k,从而近似可以解决这个NP难的问题。
\qquad
通过找到L的最小的k个特征值,可以得到对应的k个特征向量,这k个特征向量组成一个nxk维度的矩阵,即为我们的H。一般需要对H矩阵按行做标准化,即:
h
i
j
∗
=
h
i
j
∑
t
=
1
k
h
i
t
2
h_{ij}^* = \dfrac{h_{ij}}{\sqrt{\sum_{t=1}^kh_{it}^2}}
hij∗=∑t=1khit2hij
\qquad
由于我们在使用维度规约的时候损失了少量信息,导致得到的优化后的指示向量h对应的H现在不能完全指示各样本的归属,因此一般在得到nxk维度的矩阵H后还需要对每一行进行一次传统的聚类,比如使用K-Means聚类.
6.2 Ncut切图
\qquad
Ncut切图和RatioCut切图很类似,但是把Ratiocut的分母
∣
A
i
∣
|A_i|
∣Ai∣换成
v
o
l
(
A
i
)
vol(A_i)
vol(Ai)。 由于子图样本的个数多并不一定权重就大,我们切图时基于权重也更合我们的目标,因此一般来说Ncut切图优于RatioCut切图。
N
c
u
t
(
A
1
,
A
2
,
…
,
A
k
)
=
1
2
∑
i
=
1
k
W
(
A
,
A
i
)
v
o
l
(
A
i
)
Ncut(A_1,A_2,\dots,A_k) = \dfrac{1}{2}\sum_{i=1}^k\dfrac{W(A,A_i)}{vol(A_i)}
Ncut(A1,A2,…,Ak)=21i=1∑kvol(Ai)W(A,Ai)
\qquad
对应的,Ncut切图对指示向量
h
h
h做了改进。注意到RatioCut切图的指示向量使用的是
1
∣
A
j
∣
\dfrac{1}{\sqrt{|A_j|}}
∣Aj∣1标示样本归属,而Ncut切图使用了子图权重
1
v
o
l
(
A
j
)
\dfrac{1}{\sqrt{vol(A_j)}}
vol(Aj)1来标示指示向量
h
h
h,定义如下:
h
i
j
=
{
0
v
i
∉
A
j
1
v
o
l
(
A
j
)
v
i
∈
A
j
h_{ij} = \begin{cases} 0 & v_i \notin A_j \\ \dfrac{1}{\sqrt{vol(A_j)}} & v_i \in A_j \end{cases}
hij=⎩⎨⎧0vol(Aj)1vi∈/Ajvi∈Aj
\qquad
那么我们对于
h
i
T
L
h
i
h_i^TLh_i
hiTLhi,有:
h
i
T
L
h
i
=
1
2
∑
m
=
1
∑
n
=
1
w
m
n
(
h
m
i
−
h
n
i
)
2
=
1
2
[
∑
m
∈
A
i
,
n
∉
A
i
w
m
n
(
1
v
o
l
(
A
i
)
−
0
)
2
+
∑
m
∉
A
i
,
n
∈
A
i
w
m
n
(
0
−
1
v
o
l
(
A
i
)
)
2
]
=
1
2
(
∑
m
∈
A
i
,
n
∉
A
i
w
m
n
1
v
o
l
A
i
+
∑
m
∉
A
i
,
n
∈
A
i
w
m
n
1
v
o
l
(
A
i
)
)
=
1
2
(
c
u
t
(
A
i
,
A
i
‾
)
1
v
o
l
(
A
i
)
+
c
u
t
(
A
i
‾
,
A
i
)
1
v
o
l
(
A
i
)
)
=
c
u
t
(
A
i
,
A
i
‾
)
v
o
l
(
A
i
)
\begin{aligned} h_i^TLh_i &= \dfrac{1}{2}\sum_{m=1}\sum_{n=1}w_{mn}(h_{mi}-h_{ni})^2 \\ &=\dfrac{1}{2}[\sum_{m \in A_i,n\notin A_i} w_{mn}(\dfrac{1}{\sqrt{vol(A_i)}}-0)^2 + \sum_{m \notin A_i,n \in A_i}w_{mn}(0-\dfrac{1}{\sqrt{vol(A_i)}})^2] \\ &=\dfrac{1}{2}(\sum_{m \in A_i,n\notin A_i} w_{mn} \dfrac{1}{vol{A_i}} + \sum_{m \notin A_i,n \in A_i}w_{mn}\dfrac{1}{vol(A_i)}) \\ &= \dfrac{1}{2}(cut(A_i,\overline{A_i})\dfrac{1}{vol(A_i)} + cut(\overline{A_i},A_i)\dfrac{1}{vol(A_i)}) \\ &=\dfrac{cut(A_i,\overline{A_i})}{vol(A_i)} \end{aligned}
hiTLhi=21m=1∑n=1∑wmn(hmi−hni)2=21[m∈Ai,n∈/Ai∑wmn(vol(Ai)1−0)2+m∈/Ai,n∈Ai∑wmn(0−vol(Ai)1)2]=21(m∈Ai,n∈/Ai∑wmnvolAi1+m∈/Ai,n∈Ai∑wmnvol(Ai)1)=21(cut(Ai,Ai)vol(Ai)1+cut(Ai,Ai)vol(Ai)1)=vol(Ai)cut(Ai,Ai)
\qquad
推导方式和RatioCut完全一致。也就是说,我们的优化目标仍然是
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,\dots,A_k) = \sum_{i=1}^k h_i^TLh_i = \sum_{i=1}^k (H^TLH)_{ii} = tr(H^TLH)
Ncut(A1,A2,…,Ak)=i=1∑khiTLhi=i=1∑k(HTLH)ii=tr(HTLH)
\qquad
但是此时我们的
H
T
H
≠
I
H^TH \ne I
HTH̸=I,而是
H
T
D
H
=
I
H^TDH=I
HTDH=I。推导如下:
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^TDh_i = \sum_{j=1}^n h_{ij}^2 d_{j} = \dfrac{1}{vol(A_i)}\sum_{j \in A_i}d_j = \dfrac{1}{vol(A_i)} vol(A_i) = 1
hiTDhi=j=1∑nhij2dj=vol(Ai)1j∈Ai∑dj=vol(Ai)1vol(Ai)=1
\qquad
也就是说,此时我们的优化目标最终为:
a
r
g
m
i
n
⎵
H
t
r
(
H
T
L
H
)
s
.
t
.
H
T
D
H
=
I
\underbrace{arg\ min}_H \ \ \ \ tr(H^TLH) \ \ \ s.t. \ H^TDH=I
H
arg min tr(HTLH) s.t. HTDH=I
\qquad
此时我们的H中的指示向量
h
h
h并不是标准正交基,所以在RatioCut里面的降维思想不能直接用。怎么办呢?其实只需要将指示向量矩阵H做一个小小的转化即可。
\qquad
我们令
H
=
D
−
1
/
2
F
H=D^{-1/2}F
H=D−1/2F, 则:
H
T
L
H
=
F
T
D
−
1
/
2
D
D
−
1
/
2
F
T
,
H
T
D
H
=
F
T
F
=
I
H^TLH = F^TD^{-1/2}DD^{-1/2}F^T ,H^TDH=F^TF = I
HTLH=FTD−1/2DD−1/2FT,HTDH=FTF=I,也就是说优化目标变成了:
a
r
g
m
i
n
⎵
H
t
r
(
F
T
D
−
1
/
2
D
D
−
1
/
2
F
T
)
s
.
t
.
F
T
F
=
I
\underbrace{arg\ min}_H \ \ \ \ tr(F^TD^{-1/2}DD^{-1/2}F^T) \ \ \ s.t. \ F^TF=I
H
arg min tr(FTD−1/2DD−1/2FT) s.t. FTF=I
\qquad
可以发现这个式子和RatioCut基本一致,只是中间的
L
L
L变成了
D
−
1
/
2
D
D
−
1
/
2
D^{-1/2}DD^{-1/2}
D−1/2DD−1/2。这样我们就可以继续按照RatioCut的思想,求出
D
−
1
/
2
D
D
−
1
/
2
D^{-1/2}DD^{-1/2}
D−1/2DD−1/2的最小的前k个特征值,然后求出对应的特征向量,并标准化,得到最后的特征矩阵
F
F
F,最后对
F
F
F进行一次传统的聚类(比如K-Means)即可。
\qquad 一般来说, D − 1 / 2 D D − 1 / 2 D^{-1/2}DD^{-1/2} D−1/2DD−1/2,相当于对拉普拉斯矩阵 L L L做了一次标准化,即 L i j d i ∗ d j \dfrac{L_{ij}}{\sqrt{d_i*d_j}} di∗djLij
7. 谱聚类算法流程
\qquad 总结下谱聚类的基本流程了。一般来说,谱聚类主要的注意点为相似矩阵的生成方式(参见第二节),切图的方式(参见第六节)以及最后的聚类方法(参见第六节)。
\qquad 最常用的相似矩阵的生成方式是基于高斯核距离的全连接方式,最常用的切图方式是Ncut。而到最后常用的聚类方法为K-Means。下面以Ncut总结谱聚类算法流程。
\qquad
输入:样本集
D
=
(
x
1
,
x
2
,
…
,
x
n
)
D=(x_1,x_2,\dots,x_n)
D=(x1,x2,…,xn),相似矩阵的生成方式, 降维后的维度
k
1
k_1
k1, 聚类方法,聚类后的维度
k
2
k_2
k2
\qquad
输出: 簇划分
C
(
c
1
,
c
2
,
…
,
c
k
2
)
C(c_1,c_2,\dots,c_{k_2})
C(c1,c2,…,ck2)
\qquad
1) 根据输入的相似矩阵的生成方式构建样本的相似矩阵S
\qquad
2)根据相似矩阵S构建邻接矩阵W,构建度矩阵D
\qquad
3)计算出拉普拉斯矩阵L
\qquad
4)构建标准化后的拉普拉斯矩阵
D
−
1
/
2
D
D
−
1
/
2
D^{-1/2}DD^{-1/2}
D−1/2DD−1/2
\qquad
5)计算
D
−
1
/
2
D
D
−
1
/
2
D^{-1/2}DD^{-1/2}
D−1/2DD−1/2最小的
k
1
k_1
k1个特征值所各自对应的特征向量
f
f
f
\qquad
6) 将各自对应的特征向量
f
f
f组成的矩阵按行标准化,最终组成
n
∗
k
1
n*k_1
n∗k1维的特征矩阵
F
F
F
\qquad
7)对F中的每一行作为一个
k
1
k_1
k1维的样本,共n个样本,用输入的聚类方法进行聚类,聚类维数为
k
2
k_2
k2。
\qquad
8)得到簇划分
C
(
c
1
,
c
2
,
…
,
c
k
2
)
C(c_1,c_2,\dots,c_{k_2})
C(c1,c2,…,ck2)
8. 谱聚类算法总结
\qquad 谱聚类算法是一个使用起来简单,如果你掌握了谱聚类,相信你会对矩阵分析,图论有更深入的理解。同时对降维里的主成分分析也会加深理解。
\qquad 下面总结下谱聚类算法的优缺点。
\qquad 谱聚类算法的主要优点有:
\qquad 1)谱聚类只需要数据之间的相似度矩阵,因此对于处理稀疏数据的聚类很有效。这点传统聚类算法比如K-Means很难做到
\qquad 2)由于使用了降维,因此在处理高维数据聚类时的复杂度比传统聚类算法好。
\qquad 谱聚类算法的主要缺点有:
\qquad 1)如果最终聚类的维度非常高,则由于降维的幅度不够,谱聚类的运行速度和最后的聚类效果均不好。
\qquad 2) 聚类效果依赖于相似矩阵,不同的相似矩阵得到的最终聚类效果可能很不同。