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]

Parameters:
G

一个 NetworkX 图

alpha浮点数

衰减因子

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

赋予直接邻居的权重。如果不是标量,字典必须为每个节点提供一个值。

normalized布尔值

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

weightNone 或字符串,可选

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

Returns:
nodes字典

包含节点及其 Katz 中心性值的字典。

Raises:
NetworkXError

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

Notes

Katz 中心性由 [2] 引入。

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

对于强连通图,当 \(\alpha \to 1/\lambda_{\max}\)\(\beta > 0\) 时,Katz 中心性接近特征向量中心性的结果。

对于有向图,此算法找到对应图中入边的“左”特征向量。对于出边的 Katz 中心性,首先使用 G.reverse() 反转图。

References

[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

Examples

>>> import math
>>> G = nx.path_graph(4)
>>> phi = (1 + math.sqrt(5)) / 2.0  # 邻接矩阵的最大特征值
>>> 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