这个介数计算正确吗?

2024-09-27 07:24:48 发布

您现在位置:Python中文网/ 问答频道 /正文

在这个简单的图中,我尝试计算从2到6的路径的所有节点的介数。你知道吗

G=nx.Graph()
edge=[(1,5),(2,5),(3,5),(4,5),(4,6),(5,7),(7,6)]
G.add_edges_from(edge)
btw=nx.betweenness_centrality_subset(G,[2],[6])

但结果是:

{1: 0.0, 5: 0.5, 2: 0.0, 3: 0.0, 4: 0.25, 6: 0.0, 7: 0.25}

我想知道为什么节点5的介数是0.5,而它应该是1,因为总最短路径的数目是2,它们都包括5,节点4和7应该是0.5


Tags: from路径add节点graphnxsubsetedge
2条回答

它看起来像个虫子。你知道吗

这是我的猜测。这个bug似乎来自_rescale函数。这里,如果图形是间接的,则计算值乘以0.5。你知道吗

因为在一般的betweenness_centrality中,对于betweenness_centrality_sub,节点被考虑两次(最短路径被计算for each node in the graph),这是没有必要的,因为最短路径只被计算for the sources nodes。你知道吗

示例:

nx.betweenness_centrality_subset(G,[2,6],[2,6])
# {1: 0.0, 5: 1.0, 2: 0.0, 3: 0.0, 4: 0.5, 6: 0.0, 7: 0.5}

所以,如果我的猜测是对的,你只需要将计算结果乘以2。你知道吗

我相信这不是虫子。你知道吗

首先,要注意结果的规范化。当未规范化时,将获得通过每个节点的路径数。当标准化得到路径的分数。默认情况下中间性(G) 是标准化的。默认情况下nx.betweenness\u centrality\u子集(G,[2],[6])未标准化。你知道吗

其次,对于无向图,非规范化的介数中心性值计算无向路径。这意味着每个有向路径都算作无向路径的一半。这就是为什么您的原始帖子的值是0.5和0.25,而不是1.0和0.5。以这种方式计算路径,以确保获得的路径永远不会超过网络中无向路径的总数。当你正常化,这不是一个问题。你知道吗

相关问题 更多 >

    热门问题