我正在使用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}
我希望结果是一样的;那么实施上有什么区别?
答案 0 :(得分:0)
documentation中有关于二元中间性中心性的解释。
节点
v
的中间性是通过v
的所有对最短路径的分数之和。介于中间的值通过最大可能值归一化,对于二部图,最大可能值受两个节点集的相对大小限制
文档继续描述归一化因子。
实际上,如果您检查source code的中介性版本,它将直接调用无向中介性中心性代码,然后应用附加的归一化因子。因此,存在双向版本的唯一原因是可以对它们进行不同的规范化。
当前没有选择将重量包括在双向版本中。但是,如果您查看源代码,将不会很困难。如果执行此操作,则应仔细考虑应如何执行操作以捕获要解释的任何过程。这意味着您应该了解如何归一化。否则,我会坚持使用非双向版本,只是确保您认识到比较不同组件中节点的中心性是不合适的。