第二节:谱聚类算法之切图聚类算法流程及其实现
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二节:谱聚类算法之切图聚类算法流程及其实现相关的知识,希望对你有一定的参考价值。
本文部分内容源自刘建平博客,在此基础上进行总结拓展
文章目录
一:谱聚类与图划分
无向图切图:谱聚类算法根据数据点之间的相似度将数据点划分到不同簇中,因此将数据点映射到无向图之后,可以转化为图划分的问题。对于无向图 G G G,切图的目标是将图 G ( V , E ) G(V,E) G(V,E)切分成互相无连接 k k k个子图,其中
- 每个子图点的集合为 A 1 , A 2 , . . . , A k \\A_1,A_2,...,A_k\\ A1,A2,...,Ak,且满足 A i ∩ A j = ∅ A_i\\cap A_j=\\empty Ai∩Aj=∅、 A 1 ∪ A 2 ∪ . . . ∪ A k = V A_1\\cup A_2\\cup ... \\cup A_k=V A1∪A2∪...∪Ak=V
- 对于任意两个子图点的集合 A A A、 B B B,我们定义 A A A和 B B B之间的切图权重为 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)=i∈A,j∈B∑wij
- 对于 k k k个子图点的集合 A 1 , A 2 , . . . , A k \\A_1,A_2,...,A_k\\ A1,A2,...,Ak,定义切图 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)=\\frac12\\sum\\limits_i=1^kW(A_i,\\bar A_i) cut(A1,A2,...,Ak)=21i=1∑kW(Ai,Aˉi) (其中 A ˉ i \\bar A_i Aˉi为 A i A_i Ai的补集)
可以看出, c u t cut cut描述了子图之间的相似性, 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,...,A_k)=\\frac12\\sum\\limits_i=1^kW(A_i,\\bar A_i) cut(A1,A2,...,Ak)=21i=1∑kW(Ai,Aˉi)在划分子图时并没有考虑每个子图中节点的个数。所以在某些情况下,最小化 c u t ( A 1 , A 2 , . . . , A k ) cut(A_1,A_2,...,A_k) cut(A1,A2,...,Ak)可能会把一个数据点或是很少数据点看做一个子图,导致子图划分结果不平衡
- 例如下图,选择一个权重最小的边缘的点,比如 C C C和 H H H之间进行 c u t cut cut,这样可以最小化 c u t ( A 1 , A 2 , . . . , A k ) cut(A_1,A_2,...,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,...,A_k)=\\frac12\\sum\\limits_i=1^k\\fracW(A_i,\\bar A_i)|A_i| Ratiocut(A1,A2,...,Ak)=21i=1∑k∣Ai∣W(Ai,Aˉi)
- 规范割:
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)=\\frac12\\sum\\limits_i=1^k\\fracW(A_i,\\bar A_i)vol(A _i)
NCut(A1,A2,...,Ak)=21i=1
以上是关于第二节:谱聚类算法之切图聚类算法流程及其实现的主要内容,如果未能解决你的问题,请参考以下文章