特征向量中心性#
- eigenvector_centrality(G, max_iter=100, tol=1e-06, nstart=None, weight=None)[source]#
计算图 G 的特征向量中心性。
特征向量中心性通过将节点的前驱节点的中心性相加来计算节点的中心性。节点 \(i\) 的中心性是与最大模量(且为正)的特征值 \(\lambda\) 相关联的左特征向量的第 \(i\) 个元素。这样的特征向量 \(x\) 通过方程定义,直至一个乘法常数:
\[\lambda x^T = x^T A,\]其中 \(A\) 是图 G 的邻接矩阵。根据行-列乘积的定义,上述方程等价于
\[\lambda x_i = \sum_{j\to i}x_j.\]也就是说,将 \(i\) 的前驱节点的特征向量中心性相加,即可得到 \(i\) 的特征向量中心性乘以 \(\lambda\)。对于无向图,\(x\) 也满足熟悉的右特征向量方程 \(Ax = \lambda x\)。
根据 Perron–Frobenius 定理 [1],如果 G 是强连通的,则存在唯一的特征向量 \(x\),并且其所有分量都严格为正。
如果 G 不是强连通的,可能存在多个与 \(\lambda\) 相关联的左特征向量,并且其中一些分量可能为零。
- 参数:
- G图
一个 NetworkX 图。
- max_iter整数,可选 (默认为 100)
幂次迭代的最大次数。
- tol浮点数,可选 (默认为 1.0e-6)
用于检查幂次迭代收敛性的误差容差(采用欧几里得范数)。
- nstart字典,可选 (默认为 None)
每个节点的幂次迭代起始值。对于幂法收敛,必须在期望的特征向量上有非零投影。如果为 None,此实现将使用全一向量,这是一个安全的选择。
- weightNone 或 字符串,可选 (默认为 None)
如果为 None,则所有边的权重视为相等。否则,表示用作权重的边属性的名称。在此度量中,权重被解释为连接强度。
- 返回:
- nodes字典
节点的字典,其值为特征向量中心性。相关联的向量具有单位欧几里得范数且值为非负。
- 引发:
- NetworkXPointlessConcept
如果图 G 是空图。
- NetworkXError
如果
nstart
中的每个值都为零。- PowerIterationFailedConvergence
如果在指定的幂次迭代次数内算法未能收敛到指定的容差。
注释
特征向量中心性由 Landau [2] 引入,用于国际象棋比赛。后来由 Wei [3] 重新发现,随后由 Kendall [4] 在体育排名背景下推广。Berge 基于社会连接引入了图的通用定义 [5]。Bonacich [6] 再次重新引入特征向量中心性,并在链接分析中使其流行。
此函数计算左侧主导特征向量,对应于添加前驱节点的中心性:这是通常的方法。要添加后继节点的中心性,请先使用
G.reverse()
反转图。此实现使用幂次迭代 [7] 从提供的向量
nstart
开始计算主导特征向量。只要nstart
在主导特征向量上有非零投影,就能保证收敛,使用默认值时肯定会发生这种情况。当两次迭代计算出的向量变化小于误差容差
G.number_of_nodes() * tol
时,或在max_iter
次迭代后,方法停止。但在第二种情况下,它会引发异常。此实现使用 \((A + I)\) 而不是邻接矩阵 \(A\),因为这种改变保留了特征向量,但会移动谱,从而保证即使对于具有最大模负特征值的网络也能收敛。
参考文献
[1]Abraham Berman and Robert J. Plemmons. “Nonnegative Matrices in the Mathematical Sciences.” Classics in Applied Mathematics. SIAM, 1994.
[2]Edmund Landau. “Zur relativen Wertbemessung der Turnierresultate.” Deutsches Wochenschach, 11:366–369, 1895.
[3]Teh-Hsing Wei. “The Algebraic Foundations of Ranking Theory.” PhD thesis, University of Cambridge, 1952.
[4]Maurice G. Kendall. “Further contributions to the theory of paired comparisons.” Biometrics, 11(1):43–62, 1955. https://www.jstor.org/stable/3001479
[5]Claude Berge “Théorie des graphes et ses applications.” Dunod, Paris, France, 1958.
[6]Phillip Bonacich. “Technique for analyzing overlapping memberships.” Sociological Methodology, 4:176–185, 1972. https://www.jstor.org/stable/270732
示例
>>> G = nx.path_graph(4) >>> centrality = nx.eigenvector_centrality(G) >>> sorted((v, f"{c:0.2f}") for v, c in centrality.items()) [(0, '0.37'), (1, '0.60'), (2, '0.60'), (3, '0.37')] ----