katz_centrality_numpy#

katz_centrality_numpy(G, alpha=0.1, beta=1.0, 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浮点数

衰减因子

beta标量或字典,可选 (默认=1.0)

赋予直接邻居的权重。如果不是标量,则字典必须包含每个节点的值。

normalized布尔值

如果为 True,则对结果值进行归一化。

weightNone 或 字符串,可选

如果为 None,则所有边权重都被视为相等。否则,它保存用作权重的边属性的名称。在此度量中,权重被解释为连接强度。

返回值:
nodes字典

节点及其 Katz 中心性作为值的字典。

抛出异常:
NetworkXError

如果参数 beta 不是标量,但至少缺少一个节点的值

注释

Katz 中心性由 [2] 引入。

该算法使用直接线性求解器来求解上述方程。参数 alpha 应严格小于邻接矩阵最大特征值的倒数,以便存在解。您可以使用 max(nx.adjacency_spectrum(G)) 获取邻接矩阵的最大特征值 \(\lambda_{\max}\)

对于强连通图,当 \(\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. 173.

[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_numpy(G, 1 / phi)
>>> for n, c in sorted(centrality.items()):
...     print(f"{n} {c:.2f}")
0 0.37
1 0.60
2 0.60
3 0.37