问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

中介中心性算法详解与应用

创作时间:
作者:
@小白创作中心

中介中心性算法详解与应用

引用
1
来源
1.
https://docs.ultipa.cn/document/ultipa-graph-analytics-algorithms/betweenness-centrality/v4.5

v4.5

  • v5.0
  • v4.5

中介中心性

✓ 文件回写✓ 属性回写✓ 直接返回✓ 流式返回✕ 统计值

概述

中介中心性(Betweenness Centrality)衡量节点处于其它任意两点间最短路径之中的概率。该概念由Linton C. Freeman于1977年提出,能有效地计算出在图的多个部分间起桥梁或媒介作用的点。
中介中心性的取值范围是0到1,节点的分值越大,对于网络流通性或连通性的影响力越大。
相关资料如下:

  • L.C. Freeman,A Set of Measures of Centrality Based on Betweenness(1977)
  • L.C. Freeman,Centrality in Social Networks Conceptual Clarification(1978)

基本概念

最短路径

在连通图中,两点间的最短路径(Shortest Path)是指经过的边数最少(非权重图)或所有边的权重和最小(权重图)的路径。
在上面的非权重图中,红、绿两点间存在三条最短路径,其中有两条经过黄色节点,因此,黄色节点对于红绿节点对的中介概率为
2 / 3 = 0.6667

中介中心性

在本算法中,节点的中介中心性分值计算公式为:
其中,
x
为待计算的目标节点,
i

j
为图中互异的任意两个节点(不包含
x
),
σ

ij
点对最短路径的数量,
σ(x)

ij
点对经过
x
的最短路径的数量,
σ(x)
/
σ
就是
x
对于
ij
点对的中介概率(
i

j
不连通时该概率为0),
k
为图中节点的数量,
(k-1)(k-2)/2

ij
节对的数量。

计算上图中红色节点的中介中心性。图中共有5个节点,除了红色节点有
(5-1)(5-2)/2 = 6
组点对,红色节点对于各节点对的中介概率分别为0、1/2、2/2、0、2/3和0,因此其中介中心性分值为
(0 + 1/2 + 2/2 + 0 + 2/3 + 0) / 6 = 0.3611

中介中心性算法会消耗很多计算资源。在一个有V个节点的图中,建议当V>10000时通过采样进行近似计算,推荐的采样个数是节点数以10为底的对数(
log(V)
)。
每次执行算法时,只进行一次采样,每个节点的中心性分值是所有样本节点间的最短路径计算的。

特殊说明

  • 孤点的中介中心性分值为0。
  • 中介中心性算法忽略边的方向,按照无向边进行计算。在包含
    k
    个节点的无向图中,参与计算的点对数量是
    (k-1)(k-2)/2

语法

  • 命令:
    algo(betweenness_centrality)
  • 参数:
    名称 类型 规范 默认 可选 描述
    sample_size int -1,-2, [1, V] -2 是 采样节点数;-1代表采样数为log(V),-2代表不采样进行精确计算,一个介于 [1, V] 的数代表采样规定数目的节点
    limit int ≥-1 -1 是 返回的结果条数,-1返回所有结果
    order string asc,desc / 是 按中心性分值大小对结果进行排序

示例

示例图是一个小型社交网络,点代表user,边代表know关系:

文件回写

配置项 回写内容
filename _id,centrality

  
algo(betweenness_centrality).params().write({
  file:{ 
    filename: 'centrality'
  }
})
  

结果:文件centrality

  
Billy,0
Jay,0.0666667
May,0.0666667
Mark,0.133333
Ann,0.133333
Dave,0.333333
Sue,0
  

属性回写

配置项 回写内容 类型 数据类型
property centrality 点属性 float

示例:计算所有点的中介中心性,将中介中心性回写至名为 bc 的点属性

  
algo(betweenness_centrality).params().write({
  db:{ 
    property: 'bc'
  }
})
  

结果:每个节点的中心性分值回写至名为bc的点属性下

直接返回

别名序号 类型 描述 列名
0 []perNode 点及其中心性 _uuid,centrality

  
algo(betweenness_centrality).params({
  order: 'desc',
  limit: 3
}) as bc
return bc
  

结果:bc
_uuid centrality
2 0.33333299
4 0.13333300
3 0.13333300

流式返回

别名序号 类型 描述 列名
0 []perNode 点及其中心性 _uuid,centrality

  
algo(betweenness_centrality).params().stream() as bc
where bc.centrality == 0
return count(bc)
  

结果:2

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号