我正在使用Python Networkx 2.1来计算无向图上的介数中心性和电流介数中心性,其中边缘是加权的。
我的担忧是关于networkx函数中参数“weight”的含义。请考虑以下示例给出的图形。
请注意,在第一个公式中,我使用了边权重的倒数,因为我觉得算法将其解释为距离,因此会产生一些“不良”影响。 另一方面,在第二个公式中,我使用了原始权重,因为在当前流介数算法中,这似乎更加重视节点1和2,就像介数中那样。因此,权重似乎是“正”的。
我想知道我是否做错了什么。实际上,在更大的图形上,如果我使用相同的权重参数而不是倒数,这两个度量之间的相关性会更高。 这两种算法如何处理权重?
G= nx.Graph()
G.add_path([1, 2,4])
G.add_path([1, 3,4])
G[1][2]['weight'] = 20
G[1][3]['weight'] = 1
G[2][4]['weight'] = 1
G[3][4]['weight'] = 1
for u,v,d in G.edges(data=True):
if 'weight' in d:
if d['weight'] != 0:
d['reciprocal'] = 1/d['weight']
在我的情况下,边的权重代表关系强度,因此是积极的。这个想法是,具有更高权重的边应该对介数中心性做出更大的贡献。
鉴于这个想法,我说计算节点加权介数中心性和加权电流介数中心性的正确公式是以下内容吗?
b = nx.betweenness_centrality(G, weight= 'reciprocal', normalized=False)
Out[46]: {1: 1.0, 2: 1.0, 3: 0.0, 4: 0.0}
f = nx.current_flow_betweenness_centrality(G, normalized= False, weight= 'weight', solver='lu')
Out[48]:
{1: 1.3114754098360655,
2: 1.3114754098360657,
3: 0.6885245901639343,
4: 0.6885245901639347}
请注意,在第一个公式中,我使用了边权重的倒数,因为我觉得算法将其解释为距离,因此会产生一些“不良”影响。 另一方面,在第二个公式中,我使用了原始权重,因为在当前流介数算法中,这似乎更加重视节点1和2,就像介数中那样。因此,权重似乎是“正”的。
我想知道我是否做错了什么。实际上,在更大的图形上,如果我使用相同的权重参数而不是倒数,这两个度量之间的相关性会更高。 这两种算法如何处理权重?