Alpha中心性并未在我可以轻松访问的软件包中实现(使用R-igraph不是一种选择),所以我自己实现了它。在维基百科页面(https://en.wikipedia.org/wiki/Alpha_centrality)中,考虑到邻接矩阵,在矩阵代数方面似乎很容易实现。所以我在igraph中掀起了simple graph并使用numpy在维基百科页面上实现了公式。代码如下所示:
import igraph as ig
from numpy import matrix
import numpy as np
# Build the graph shown in the question above
graph = ig.Graph()
vertices = ['A', 'B', 'C', 'D', 'E', 'F']
graph.add_vertices(vertices)
edges = [('A', 'C'), ('A', 'D'), ('A', 'E'), ('A', 'F'), ('B', 'C'), ('B', 'D'), ('B', 'E'), ('B', 'F')]
graph.add_edges(edges)
adjacency_matrix = graph.get_adjacency()
# Some constants needed for alpha centrality algorithm, picking some simple options for those constants.
alpha_cent_weights = [1, 1, 1, 1, 1, 1]
alpha = 1
#Converting data structures to numpy matrices
numpy_adjacency = matrix(adjacency_matrix.data)
numpy_weights = matrix(alpha_cent_weights)
numpy_weights = numpy_weights.T
adjacency_matrix_size = numpy_adjacency.shape[0]
identity_matrix = np.identity(adjacency_matrix_size)
alpha_cent = (identity_matrix - alpha * numpy_adjacency.T).I.dot(numpy_weights)
然而,当我运行此代码时,alpha_cent中的值都是负数,这不是我期望的中心度量。我的程序将alpha中心数计算为(近似)......
A:-714,B:-714,C:-.419,D:-.419,E:-.419,F:-.419。
起初我认为这只是一个缺少减号的问题,但是当我将alpha_cent_weights改为[1,3,1,1,1,1]时,计算出的α中心变为:
A:-1.86,B:.142,C:-.714,D:-.714,E:-.714,F:-.714
在这种情况下,取绝对值是没有意义的,因为我希望B从网络中的位置和alpha_cent_weights的额外权重中获得更高的值。
在我尝试解决这个问题时,我已经挖掘了一些学术文章(包括维基百科的alpha中心页面上列出的文章),搜索谷歌搜索“Alpha中心性”,打破了上述代码中“alpha_cent”的计算一步一步地,请一位同事在工作中寻求帮助。
我的代码有问题吗?我对α中心性或一般中心性的理解是否有问题?