📜  中介中心性(Centrality Measure)(1)

📅  最后修改于: 2023-12-03 15:21:34.531000             🧑  作者: Mango

中介中心性 (Centrality Measure)

中介中心性是社交网络分析中常用的一种度量方法,用于评估网络中节点的重要性。它会计算每个节点在网络中的所有最短路径上出现的次数,节点在更多最短路径上出现的次数越多,那么节点的中介中心性就越高。

在一个社交网络中,中介中心性表示了一个节点在不同社交圈子之间扮演的角色。这种节点通常对应着能够连接多个社交圈子的人。

中介中心性算法

在社交网络中,我们可以用以下公式计算节点 $i$ 的中介中心性:

$$ C_B(i) = \sum_{s \neq i \neq t}\frac{\sigma_{st}(i)}{\sigma_{st}} $$

其中,

  • $\sigma_{st}$ 是节点 $s$ 到节点 $t$ 的最短路径数量;
  • $\sigma_{st}(i)$ 是节点 $s$ 到节点 $t$ 的最短路径中,经过节点 $i$ 的路径数量;

中心性 $C_B(i)$ 可以通过计算每个节点 $s$ 和节点 $t$ 之间的最短路径上的 $i$ 的数量来计算。

具体实现时,我们可以先使用 Dijkstra 或 Floyd 算法求出所有最短路径,并计算每个节点在每对节点之间的最短路径上出现的次数:

import networkx as nx

# 创建一个图
G = nx.Graph()

# 添加边
G.add_edge(1, 2)
G.add_edge(2, 3)
G.add_edge(1, 3)
G.add_edge(3, 4)

# 求出所有最短路径
paths = dict(nx.all_pairs_shortest_path(G))

# 计算每个节点在每条最短路径上的出现次数
node_path_count = dict.fromkeys(G.nodes(), 0)
for node in G.nodes():
    for path in paths.values():
        if node in path:
            for other_node in path:
                if other_node != node:
                    node_path_count[node] += 1

最后,我们可以使用以下公式计算节点 $i$ 的中介中心性:

def calculate_betweenness_centrality(G):
    betweenness = dict.fromkeys(G.nodes(), 0.0)
    paths = dict(nx.all_pairs_shortest_path(G))
    node_path_count = dict.fromkeys(G.nodes(), 0)
    for node in G.nodes():
        for path in paths.values():
            if node in path:
                for other_node in path:
                    if other_node != node:
                        node_path_count[node] += 1
                        if other_node in [path[i] for i in range(path.index(node), len(path))]:
                            betweenness[node] += 1.0
    for node in betweenness.keys():
        betweenness[node] /= 2 # 需要除以2来消除重复
    return betweenness

betweenness = calculate_betweenness_centrality(G)
应用

中介中心性在社交网络分析中有着广泛的应用。例如:

  • 寻找最优的信息传播节点,这些节点通常拥有更高的中介中心性;
  • 识别核心节点,这些节点通常位于网络中心,并且中介中心性更高;
  • 寻找社交网络中的群体,这些群体通常由中介节点连接起来。

在 Python 中,我们可以使用 networkx 库来计算中介中心性。除了中介中心性,networkx 还提供了其他常用的度量方法,如度中心性、接近中心性等。