二方中间性中心的权重?

问题描述 投票:0回答:1

我正在使用python和networkx建模哪个说话者在对话中提到哪个项目。为此,我想构建一个二部图,其中一组节点代表说话者,另一组节点代表项。从该图,我想计算一些集中度度量,例如中间度。我还想将每个边的权重作为参数传递,其中权重表示说话者提及某项的频率。但是,二分法实现不允许我将权重作为参数传递。

实现之间有什么区别,我应该使用哪种实现对问题进行建模?

import networkx as nx
from networkx.algorithms import bipartite

speakers = ['Pink', 'Green']
items = ['Knife', 'Rope']

B = nx.Graph()

B.add_nodes_from(items, bipartite = 0)
B.add_nodes_from(speakers, bipartite = 1)

B.add_edge('Pink', 'Knife', weight = 10)
B.add_edge('Pink', 'Rope', weight = 4)
B.add_edge('Green', 'Rope', weight = 2)
B.add_edge('Green', 'Knife', weight = 7)

bottom_nodes, top_nodes = bipartite.sets(B)

print(nx.is_bipartite(B))
print(bipartite.betweenness_centrality(B, bottom_nodes))
print(nx.betweenness_centrality(B))
print(nx.betweenness_centrality(B, weight = 'weight'))

我得到以下输出:

True
{'Knife': 0.25, 'Rope': 0.25, 'Pink': 0.25, 'Green': 0.25}
{'Knife': 0.16666666666666666, 'Rope': 0.16666666666666666, 'Pink': 0.16666666666666666, 'Green': 0.16666666666666666}
{'Knife': 0.0, 'Rope': 0.3333333333333333, 'Pink': 0.0, 'Green': 0.3333333333333333}

我希望结果是一样的;那么实现上有什么区别?

python networkx graph-algorithm bipartite
1个回答
0
投票

documentation中的二元中间性中心性有一个解释。

节点v的中间性是通过v的所有对最短路径的分数之和。

中间性值通过最大可能值归一化,对于二部图,最大可能值受两个节点集的相对大小限制

该文档继续描述归一化因子。

实际上,如果您检查source code之间的中间性版本,它将直接调用无向中间性中心性代码,然后应用附加的归一化因子。因此,存在双向版本的唯一原因是可以对它们进行不同的规范化。

当前没有选择将权重包括在双向版本中。但是,如果您查看源代码,将不会很困难。如果执行此操作,则应仔细考虑应如何执行操作以捕获要解释的任何过程。这意味着您应该了解如何归一化。否则,我会坚持使用非双向版本,只是确保您认识到比较不同组件中节点的中心点是不合适的。

© www.soinside.com 2019 - 2024. All rights reserved.