katz_centrality#
- katz_centrality(G, alpha=0.1, beta=1.0, max_iter=1000, tol=1e-06, nstart=None, normalized=True, weight=None)[source]#
计算图 G 中节点的 Katz 中心性。
Katz 中心性根据节点的邻居节点的中心性来计算其中心性。它是特征向量中心性的一种推广。节点 \(i\) 的 Katz 中心性为
\[x_i = \alpha \sum_{j} A_{ij} x_j + \beta,\]其中 \(A\) 是图 G 的邻接矩阵,其特征值为 \(\lambda\)。
参数 \(\beta\) 控制初始中心性,且
\[\alpha < \frac{1}{\lambda_{\max}}.\]Katz 中心性通过测量直接邻居(一级节点)以及网络中通过这些直接邻居连接到目标节点的所有其他节点的数量来计算节点在网络中的相对影响力。
可以通过参数 \(\beta\) 为直接邻居提供额外的权重。然而,与远邻的连接会受到衰减因子 \(\alpha\) 的惩罚,该衰减因子必须严格小于邻接矩阵最大特征值的倒数,以便正确计算 Katz 中心性。更多信息请参见 [1]。
- 参数:
- G图
一个 NetworkX 图。
- alpha浮点数, 可选 (默认=0.1)
衰减因子
- beta标量或字典, 可选 (默认=1.0)
归属于直接邻居的权重。如果不是标量,则字典必须为每个节点都有一个值。
- max_iter整数, 可选 (默认=1000)
幂法中的最大迭代次数。
- tol浮点数, 可选 (默认=1.0e-6)
用于检查幂法迭代收敛的误差容忍度。
- nstart字典, 可选
每个节点的 Katz 迭代起始值。
- normalized布尔值, 可选 (默认=True)
如果为 True,则对结果值进行归一化。
- weightNone 或 字符串, 可选 (默认=None)
如果为 None,所有边权重被视为相等。否则,它保存用作权重的边属性的名称。在此度量中,权重被解释为连接强度。
- 返回:
- nodes字典
以 Katz 中心性作为值的节点字典。
- 抛出:
- NetworkXError
如果参数
beta
不是标量,但缺少至少一个节点的值- PowerIterationFailedConvergence
如果算法在幂法迭代的指定迭代次数内未能收敛到指定的容忍度。
注意
Katz 中心性由 [2] 引入。
此算法使用幂法查找与
G
的邻接矩阵的最大特征值对应的特征向量。参数alpha
必须严格小于邻接矩阵最大特征值的倒数,算法才能收敛。您可以使用max(nx.adjacency_spectrum(G))
获取邻接矩阵的最大特征值 \(\lambda_{\max}\)。迭代将在max_iter
次迭代后停止,或者达到误差容忍度number_of_nodes(G) * tol
时停止。对于强连通图,当 \(\alpha \to 1/\lambda_{\max}\) 且 \(\beta > 0\) 时,Katz 中心性接近于特征向量中心性的结果。
对于有向图,这会找到对应于图中入边的“左”特征向量。对于出边 Katz 中心性,首先使用
G.reverse()
反转图。参考文献
[1]Mark E. J. Newman: Networks: An Introduction. Oxford University Press, USA, 2010, p. 720.
[2]Leo Katz: A New Status Index Derived from Sociometric Index. Psychometrika 18(1):39–43, 1953 https://link.springer.com/content/pdf/10.1007/BF02289026.pdf
示例
>>> import math >>> G = nx.path_graph(4) >>> phi = (1 + math.sqrt(5)) / 2.0 # largest eigenvalue of adj matrix >>> centrality = nx.katz_centrality(G, 1 / phi - 0.01) >>> for n, c in sorted(centrality.items()): ... print(f"{n} {c:.2f}") 0 0.37 1 0.60 2 0.60 3 0.37 ----