networkx - 在介数和电流介数中“weight”的含义

7
我正在使用Python Networkx 2.1来计算无向图上的介数中心性和电流介数中心性,其中边缘是加权的。 我的担忧是关于networkx函数中参数“weight”的含义。请考虑以下示例给出的图形。
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,就像介数中那样。因此,权重似乎是“正”的。
我想知道我是否做错了什么。实际上,在更大的图形上,如果我使用相同的权重参数而不是倒数,这两个度量之间的相关性会更高。 这两种算法如何处理权重?

似乎你的问题被截断了。无论如何,你有没有尝试阅读维基百科关于介数中心性的文章?当你在图形上使用“betweenness_centrality”时,输出是什么? - Arya McCarthy
1个回答

4
这可能对你现在没什么帮助,但对于其他有同样问题的人可能会有帮助。查看源代码可知,如果提供了权重,则使用Dijkstra算法计算最短路径。Dijkstra算法通常将权重视为距离(即“不好”),而该实现也不例外。因此,取边权重的倒数是正确的方法。我不确定你所说的“在更大的图上,这两个度量值更相关”的意思是什么。这将取决于您的大型图形彼此之间的相似程度。
源代码:https://networkx.github.io/documentation/latest/_modules/networkx/algorithms/centrality/betweenness.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接