JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

图拉普拉斯矩阵与谱聚类

把一张图编码成矩阵,取它的特征向量,低频的那些就揭示出社群。Fiedler 向量沿网络最薄弱的接缝把它几乎一分为二。

描述一张图的两个矩阵

给 n 个节点编号。邻接矩阵 A 在 i 与 j 相连时取 A[i,j] = 1(或边权)。度矩阵 D 是对角阵,对角元是每个节点的总连接权重。图拉普拉斯矩阵是 L = D - A。它看似朴素,但图的几何就藏在它的谱里。

谱直接读出连通性

由于 x^T L x 是平方和,L 是对称半正定的,所以由谱定理其特征值都是非负实数:0 = lambda_1 <= lambda_2 <= ... <= lambda_n。全 1 向量让每条边上的 x_i - x_j = 0,所以 lambda_1 = 0 总成立。一个漂亮的定理:零特征值的个数等于连通分量的个数

因此若图是一整块,lambda_2 就是第一个非零特征值。它的大小就是代数连通度:很小意味着图几乎是被一座细桥连起来的两块。它对应的特征向量——Fiedler 向量——正指向那座桥的两侧。

用 Fiedler 向量切割图

在保持 x 与全 1 向量正交且单位长度的前提下最小化 x^T L x,恰好是一个瑞利商问题,其解就是 Fiedler 向量。直观上它给每个节点一个数,使相连的节点拿到相近的数——而最便宜的非常数分配方案正好沿着薄弱接缝把图劈开。按它的符号取阈值,你就得到两个簇。

# Two triangles joined by a single edge 3--4
#   nodes 1,2,3  fully connected ;  4,5,6 fully connected ;  edge 3-4
# Laplacian eigenvalues come out like:
#   0,  0.something (small!),  3, 3, 3, ...
# Fiedler vector v2 (the small one) looks like:
#   node:  1     2     3     4     5     6
#   v2 :  -.4   -.4   -.3   +.3   +.4   +.4
# sign split:  {1,2,3} | {4,5,6}   <- the obvious two communities
第二个特征向量的符号给出了社群的归属。

谱聚类:不止两个组

  1. 构造拉普拉斯矩阵 L(常用归一化版本 D^{-1/2} L D^{-1/2})。
  2. 取最小的 k 个特征值对应的特征向量,按列堆成一个 n×k 矩阵。
  3. 现在每个节点成了 R^k 中的一个点;对这些点跑 k-means 得到 k 个簇。