中心性:谁最重要?
更新于 2026-04-24
上一篇 Art. 6: 最短路径 建立了图上”距离”的完整工具箱——BFS、Dijkstra、Bellman-Ford、Floyd-Warshall、A*。有了距离,一个自然的后续问题浮现:在一个网络中,哪个节点最”重要”?
“重要”是个模糊的词。在社交网络中,认识最多人的那位是最重要的?还是连接两个社群的关键中间人?抑或离所有人最近、消息传播最快的那位?不同的”重要性”定义催生了不同的中心性(Centrality)指标——而每种指标都在揭示网络结构的不同侧面。
本文是 Part 2”量”的核心度量文章。我们将系统地学习五种中心性指标,理解它们各自的数学定义、直觉含义、计算方法和适用场景。
算法范式:穷举搜索(Degree)、动态规划/BFS(Betweenness — Brandes)、迭代逼近(PageRank/Eigenvector)
核心问题:谁是图中最”重要”的节点?
给定一张图 , 个节点、 条边。我们想找到”最重要”的节点——但”重要”至少有以下几种含义:
- 连接数多 → 认识的人最多(Degree Centrality)
- 控制信息流 → 别人之间传递信息经常要通过你(Betweenness Centrality)
- 距离近 → 你到任何人的平均距离最短(Closeness Centrality)
- 重要的朋友 → 你的朋友本身也很重要(Eigenvector / PageRank)
- 全局可达 → 你通过各种路径能触达的节点多(Katz Centrality)
没有哪种指标是”最好的”——它们回答的是不同的问题。选择哪个指标取决于你对”重要”的定义。
核心思路:五种”重要性”的数学化
每种中心性指标把一种直觉上的”重要性”翻译成精确的数学公式,然后通过图算法高效计算。我们可以把它们想象成对同一张社交网络拍摄的五张”X 光片”——每张照片让不同的结构特征浮现出来:
- Degree:看”谁的连线最多”——最简单的量, 即可算完
- Betweenness:看”谁处在最多最短路径上”——需要从每个源点做 BFS,Brandes 算法
- Closeness:看”谁到所有人最近”——需要全对最短路径距离
- Eigenvector/PageRank:看”谁的邻居本身也重要”——递归定义,通过矩阵幂迭代求解
- Katz:看”谁通过所有路径的加权总和最大”——考虑所有长度的路径
接下来逐一展开。
Degree Centrality:连接数 = 重要性
定义
Degree Centrality 是最简单、最直觉的中心性指标:一个节点的度(连接数)越大,它就越”重要”。
对于无向图中的节点 :
分母 是归一化因子——在 个节点的图中,一个节点最多与 个其他节点相连,所以 。
对于有向图,度分为入度和出度,对应两种 Degree Centrality:
- In-degree centrality:——被指向越多越”受欢迎”
- Out-degree centrality:——指向别人越多越”活跃”
直觉与适用场景
Degree Centrality 回答的是”谁认识的人最多?“在社交网络中,高度中心性的节点是”社交达人”;在论文引用网络中,被引用最多的论文具有高入度中心性。
优势:计算极快——遍历一次邻接表即可,。
局限:只看直接连接,完全忽略网络的全局结构。一个只连接着大量不重要节点的节点可能有很高的 Degree Centrality,但在全局信息传播中可能并不关键。
复杂度
- 时间:
- 空间:
Betweenness Centrality:谁控制信息流?
定义
Betweenness Centrality(介数中心性,Freeman, 1977)捕捉的是一个节点在信息传播中的”中介”地位。如果网络中其他节点之间传递信息时,大量最短路径都经过你,那你就是信息流的瓶颈。
对于节点 :
逐项理解:
- :节点 到节点 的最短路径总数
- :其中经过 的最短路径数
- :- 最短路径中经过 的比例
- 对所有 的点对求和: 对全网信息流的总”中介”贡献
归一化版本(除以最大可能值 ,无向图)使 。
直觉与适用场景
Betweenness Centrality 回答的是”谁是网络中的守门人?”
- 社交网络:高 betweenness 的人是不同社群之间的”桥梁”——移除他可能导致信息断流
- 交通网络:高 betweenness 的路口是交通瓶颈
- 计算机网络:高 betweenness 的路由器是关键节点,故障会影响全网
注意:高 betweenness 不要求高 degree。一个度很小的节点如果恰好连接两个大社群,它的 betweenness 可能极高——图中的 B 只有两条边,但所有跨社群的最短路径都经过它。
Brandes 算法:高效计算 Betweenness
朴素方法:对所有 个点对计算最短路径,逐一检查中间节点。这至少是 。Brandes(2001)提出了一个巧妙的 算法,核心思想是反向传播依赖。
核心概念:对依赖(Pair-Dependency)
定义节点 对节点 的对依赖(pair-dependency):
这是所有以 为源的最短路径中经过 的比例之和。最终的 Betweenness 就是:
Brandes 的关键洞察是一个递推公式:
其中 是节点 在以 为源的 BFS 树中的前驱集合(即从 到 的最短路径上, 的前一个节点集合)。
这个递推公式的含义: 的对依赖等于所有” 是前驱”的后继节点 的贡献之和。每个 的贡献是 到 的路径份额()乘以 自身的对依赖加 1( 本身也算一个目标)。
算法流程
对于每个源节点 :
阶段 1(正向 BFS):从 出发做 BFS,记录:
- : 到 的最短距离
- : 到 的最短路径数量
- : 在 BFS 树中的前驱集合
- 将节点按发现顺序压入栈
阶段 2(反向传播):按距离从远到近(栈 的弹出顺序)扫描每个节点 :
- 对 的每个前驱 :
- 将 累加到
Brandes(G):
C_B[v] = 0 for all v
for each s ∈ V:
// Phase 1: BFS from s
S = empty stack
P[w] = empty list for all w
σ[t] = 0 for all t; σ[s] = 1
d[t] = -1 for all t; d[s] = 0
Q = queue containing s
while Q not empty:
v = Q.dequeue()
S.push(v)
for each neighbor w of v:
if d[w] < 0: // w not yet visited
d[w] = d[v] + 1
Q.enqueue(w)
if d[w] == d[v] + 1: // w is one level deeper
σ[w] += σ[v]
P[w].append(v)
// Phase 2: back-propagation
δ[v] = 0 for all v
while S not empty:
w = S.pop()
for each v ∈ P[w]:
δ[v] += (σ[v] / σ[w]) · (1 + δ[w])
if w ≠ s:
C_B[w] += δ[w]
// 无向图需除以 2(每对 (s,t) 被算了两次)
C_B[v] /= 2 for all v
数值走查
用 5 个节点的小图走查 Brandes 算法。图的边为:-、-、-、-、-、-、-。
源 :
阶段 1(BFS):
- :
- :( 在 BFS 层 2,其层 1 前驱为 和 :。注意 与 相邻但 ,所以 不是 的 BFS 前驱)
- :,,,
阶段 2(反向传播,按栈顺序 ):
- :。
- :。
- :。
- :。
源 的贡献:,。
对所有 5 个源节点重复这个过程,最后将结果除以 2(无向图),得到最终的 Betweenness Centrality。在这个图中, 的 betweenness 最高——它连接着左侧()、上方()和右侧(、)的节点。
复杂度
- 时间:——对每个源节点做一次 BFS(),共 个源
- 空间:
- 对于加权图:BFS 替换为 Dijkstra,时间变为
Brandes 算法相比朴素 的改进在稀疏图上尤其显著( 时)。
Closeness Centrality:谁离所有人最近?
定义
Closeness Centrality(接近中心性)衡量一个节点到网络中所有其他节点的”平均距离”:
其中 是节点 到 的最短路径距离(Art. 6 的工具)。
逐项理解:
- : 到所有其他节点的距离之和——越小说明 越”居中”
- 取倒数再乘以 :让”距离小”对应”中心性高”,同时归一化到
直觉与适用场景
Closeness Centrality 回答的是”谁能最快把消息传到所有人?”
- 传染病学:高 closeness 的个体处于网络”中心”,疾病从他们开始传播速度最快
- 物流网络:仓库选址应该靠近 closeness 最高的位置,最小化平均配送距离
- 社交网络:高 closeness 的用户可以最快地接收和传播信息
局限:Closeness Centrality 要求图是连通的——如果 无法到达某个 (),公式直接失效。对于非连通图,常用调和中心性(Harmonic Centrality)替代:
其中 ,自然处理不可达的情况。
计算方法
对每个节点做一次 BFS(无权图)或 Dijkstra(加权图),求出到所有其他节点的距离后求和取倒数。
复杂度
- 时间:(无权图, 次 BFS)或 (加权图, 次 Dijkstra)
- 空间:
Eigenvector Centrality 与 PageRank:重要的朋友让你更重要
Eigenvector Centrality
前面三种中心性都是”本地”或”路径计数”指标。Eigenvector Centrality(特征向量中心性,Bonacich, 1987)引入了一个全新的视角——递归定义的重要性:
一个节点的重要性与它的邻居的重要性之和成正比。
形式化:设 为节点 的中心性分值,则
其中 是 的邻居集合, 是一个归一化常数。
用邻接矩阵 写成向量形式:
这就是特征值问题! 是邻接矩阵 的特征向量, 是对应的特征值。根据 Perron-Frobenius 定理,对于连通无向图,取最大特征值 对应的特征向量(主特征向量),其分量全为正——这就是 Eigenvector Centrality。
关于特征值和特征向量的数学基础,可参考 矩阵数学路径的特征分解文章。
从 Eigenvector 到 PageRank
Eigenvector Centrality 在无向图上工作良好,但在有向图上存在问题:如果一个节点没有入边(没人指向它),或者存在”死胡同”(dangling node,出度为 0),迭代可能不收敛或给出无意义的结果。
PageRank(Page & Brin, 1998)是 Google 搜索引擎的核心算法,专门为有向图(Web 超链接图)设计,解决了 Eigenvector Centrality 的这些问题。
随机游走直觉
想象一个”随机冲浪者”在 Web 上浏览:
- 在当前页面 上,有 的概率随机跳到任意页面(“无聊了,随便点一个”)
- 有 的概率沿着当前页面的一条出链等概率地跳转
其中 是阻尼因子(damping factor),通常取 。
当这个随机游走到达稳态分布时,每个页面被访问的频率就是它的 PageRank。
公式
逐项理解:
- :随机跳转的”底线概率”——即使没人链接你,你也有 的基础 PageRank
- :从所有指向 的节点 继承来的声誉。每个 将自己的 PageRank 均分给它的所有出边指向的页面
- :85% 的时间跟着链接走,15% 的时间随机跳转
迭代计算
PageRank 通过幂迭代(power iteration)计算:
- 初始化:(均匀分布)
- 迭代:
- 重复直到收敛()
从均匀分布开始,经过通常 20-50 轮迭代,PageRank 值就会收敛到稳态。收敛速度取决于阻尼因子 —— 越小收敛越快,但过小会让所有节点的 PageRank 趋于均匀。
矩阵视角
PageRank 的迭代实际上是在计算Google 矩阵
的主特征向量,其中 是列归一化的邻接矩阵(每列之和为 1)。这就是 PageRank 与 Eigenvector Centrality 的联系:PageRank 是修改后邻接矩阵的特征向量。关于矩阵迭代和谱分析的详细数学,参考 PageRank 的矩阵视角。
复杂度
每轮迭代遍历所有边:。通常需要 轮收敛(与 有关)。
- 时间:,其中 为迭代轮数(通常 20-50)
- 空间:
Katz Centrality:所有路径加权求和
动机
Eigenvector Centrality 只考虑直接邻居的贡献。Katz Centrality(Katz, 1953)更进一步:考虑所有长度的路径,但短路径权重更大。
定义
逐项理解:
- :从 到 长度恰好为 的路径数量(邻接矩阵的 次幂)
- :衰减因子——路径越长,贡献越小(,其中 是 的最大特征值,保证级数收敛)
- 对所有节点 和所有路径长度 求和:综合考虑从全网通过各种路径到达 的总”影响力”
向量形式的闭合解:
Katz vs Eigenvector Centrality
| 维度 | Eigenvector | Katz |
|---|---|---|
| 考虑的路径 | 仅直接邻居(递归传播) | 所有长度的路径 |
| 孤立节点 | 得分为 0 | 得分 > 0(有基础分) |
| 参数 | 无 | 衰减因子 |
| 收敛条件 | 连通无向图 | |
| 适用场景 | 无向社交网络 | 有向引用/推荐网络 |
Katz Centrality 的优势在于:即使没有入边的节点也有正的中心性分值(因为 的对角线元素 > 0)。这在有向图中尤其有用——不会出现”零分”的问题。
复杂度
- 精确计算(矩阵求逆):
- 迭代近似(类似 PageRank 幂迭代):
中心性对比可视化
下面的交互组件在同一张图上展示五种中心性指标的效果。切换指标,观察节点大小和数值如何变化——同一个节点在不同指标下的”重要性”排名可能完全不同。
注意观察:
- D 在 Degree 和 Betweenness 中都排名靠前——它既有多连接,又控制信息流
- Eigenvector 和 Katz 的排名可能与 Degree 不同——因为它们考虑了邻居的质量,而非仅仅数量
- Closeness 与 Betweenness 的排名也不完全一致——“离所有人近”和”控制信息流”是不同的概念
复杂度对比表
| 中心性指标 | 时间复杂度(最坏) | 空间复杂度 | 适用图类型 | 直觉含义 |
|---|---|---|---|---|
| Degree | 无向/有向 | 连接数最多 | ||
| Betweenness (Brandes) | 无向/有向 | 控制最短路径 | ||
| Closeness | 连通图 | 到所有人最近 | ||
| Eigenvector | 无向连通图 | 邻居也重要 | ||
| PageRank | 有向图 | 重要页面链接你 | ||
| Katz | 精确 / 迭代 | / | 任意图 | 所有路径加权 |
其中 为迭代轮数(通常 20-50),Brandes 算法在加权图上用 Dijkstra 替代 BFS,时间变为 。
应用场景
社交网络分析
社交网络是中心性分析的经典场景。不同平台关注不同指标:
- Twitter/X:粉丝数(in-degree)是最直观的影响力指标,但 PageRank 更准确——10 万个僵尸粉不如 100 个活跃大V关注你
- LinkedIn:Betweenness 对应”人脉桥梁”——连接不同行业圈子的人,猎头价值更高
- WhatsApp 群组:Closeness 对应消息传播效率——群中最”居中”的人看到消息最快
Web 搜索引擎
Google 最初的成功很大程度上归功于 PageRank。传统搜索引擎按关键词匹配排序,但容易被关键词堆砌欺骗。PageRank 利用 Web 的超链接结构——“重要网页链接的网页也重要”——极大提升了搜索结果的质量。虽然现代搜索引擎已经加入了数百个排名因子,PageRank 仍然是基础信号之一。
生物网络
- 蛋白质互作网络(PPI):高 degree 和高 betweenness 的蛋白质往往是”必需蛋白质”(essential proteins)——敲除它们会导致细胞死亡。Jeong et al. (2001) 在酵母 PPI 网络中验证了这一点
- 神经网络(生物):秀丽隐杆线虫的 302 个神经元连接图中,高 betweenness 的神经元对应功能上的”枢纽”(hub neurons)
基础设施网络
电力网格、航空网络、供应链中,高 betweenness 的节点是系统的脆弱点。识别这些节点对于:
- 韧性分析:哪些节点失效影响最大?
- 安全防护:优先保护哪些节点?
- 容量规划:哪些节点需要更大的处理能力?
中心性选型指南
面对一个实际问题,如何选择合适的中心性指标?
简单的决策规则:
- 你关心的是直接连接数? → Degree(最快,)
- 你关心的是控制力/瓶颈? → Betweenness(,适合分析信息流控制)
- 你关心的是可达性/传播效率? → Closeness(,适合选址/传播分析)
- 你关心的是递归声誉/影响力?
- 无向图 → Eigenvector
- 有向图 → PageRank
- 你关心的是综合可达性(所有路径)? → Katz
如果不确定,先用 Degree(最快)做初步筛选,再用 Betweenness 或 PageRank 做精细排名。
🔁 迭代机器视角 — PageRankEQ: 方程 / 不动点
PR(v) = (1-d)/N + d Σ_{u→v} PR(u)/out(u)
| Graph | 有向图(Web 图) |
| State[v] | PR(v) 概率分布 |
| SELECT | 全集(同步迭代) |
| COMBINE | Σ 入边贡献 |
| 重入 | 到不动点 |
| TERMINATE | 收敛(变化 < ε) |
| 求解方法 | FI |
收敛保证:Banach 压缩映射(d < 1)+ Perron-Frobenius(转移矩阵谱间隙)
🔁 迭代机器视角 — Betweenness Centrality (Brandes)STR: 结构计算
| Graph | 原图 |
| State[v] | σ(v) 最短路径数 + δ(v) 依赖值 |
| SELECT | BFS(FIFO)+ 反向传播 |
| COMBINE | BFS 计算最短路径数 → 反向累加依赖值 |
| 求解方法 | FI |
Brandes 算法对每个源节点做 BFS + 反向传播,本质是 N 次 Frontier 迭代
总结
本文建立了图上”重要性”的完整度量体系:
- Degree Centrality: — 最简单,只看直接连接
- Betweenness Centrality: — Brandes 算法 ,揭示信息流瓶颈
- Closeness Centrality: — 衡量到所有人的平均距离
- Eigenvector / PageRank:递归定义——重要的邻居让你更重要。PageRank 通过阻尼因子解决有向图的收敛问题
- Katz Centrality:所有路径加权求和, 让短路径权重更大
没有”最好的”中心性指标——每种指标照亮网络结构的不同侧面。理解它们的区别,选择适合问题语境的指标,是图分析的核心能力。
中心性回答了”谁最重要”,下一个问题是”谁和谁一伙?“——下一篇 Art. 8: 社区发现 将进入 Part 2 的第二个核心话题:在图中找出紧密连接的子群(社区),理解网络的宏观结构。
实现指引
| 算法 | 库 | 函数/方法 |
|---|---|---|
| Degree Centrality | NetworkX | nx.degree_centrality(G) |
| Betweenness Centrality | NetworkX | nx.betweenness_centrality(G, normalized=True) |
| Closeness Centrality | NetworkX | nx.closeness_centrality(G) |
| Harmonic Centrality | NetworkX | nx.harmonic_centrality(G) |
| Eigenvector Centrality | NetworkX | nx.eigenvector_centrality(G, max_iter=1000) |
| PageRank | NetworkX | nx.pagerank(G, alpha=0.85) |
| Katz Centrality | NetworkX | nx.katz_centrality(G, alpha=0.1) |
| Betweenness (近似) | NetworkX | nx.betweenness_centrality(G, k=100) |
| PageRank | Neo4j GDS | gds.pageRank.stream(G) |
| Betweenness | Neo4j GDS | gds.betweenness.stream(G) |
| Degree | Neo4j GDS | gds.degree.stream(G) |
| Eigenvector | scipy | scipy.sparse.linalg.eigs(A, k=1) |
| PageRank | igraph | g.pagerank(damping=0.85) |
| Betweenness | igraph | g.betweenness() |