节点中心性:度中心性、特征向量中心性、Katz中心性、介数中心性
目录
- 一、度中心性(Degree Centrality)
- 二、特征向量中心性(Eigenvector Centrality)
- 三、Katz中心性(Katz Centrality)
- 四、介数中心性(Betweeness Centrality)
在图中,节点的中心性(Centrality)用于衡量节点在图中的重要性。接下来,以下面这张图的节点为例,介绍一些常用的节点中心性及其计算过程。
一、度中心性(Degree Centrality)
如果有许多其他节点连接到某个节点,那么后者可以被认为是重要的。因此,可以基于一个节点的度测量它的中心性。更具体地说,对于节点viv_ivi,其度中心性可以定义为:
cd(vi)=d(vi)=∑j=1NAi,jc_d(v_i)=d(v_i)=\sum_{j=1}^NA_{i,j} cd(vi)=d(vi)=j=1∑NAi,j
由上面的公式可以知道,节点v1v_1v1与v5v_5v5的度中心性都是3,而节点v2v_2v2、v3v_3v3和v4v_4v4的度中心性都是2。
二、特征向量中心性(Eigenvector Centrality)
度中心性认为与多个节点相邻的节点是重要的,且认为所有邻居的贡献度是一样的。然而,这些相邻节点本身的重要性是不同的,因此它们对中心节点的影响不同。给定一个节点viv_ivi,特征向量中心性用它的相邻节点的中心性来定义viv_ivi的中心性:
ce(vi)=1λ∑j=1NAi,j⋅ce(vj)c_e(v_i)=\frac{1}{\lambda}\sum_{j=1}^NA_{i,j}{\cdot}c_e(v_j) ce(vi)=λ1j=1∑NAi,j⋅ce(vj) 也可以表达为矩阵的形式:
ce(vi)=1λA⋅cec_e(v_i)=\frac{1}{\lambda}A{\cdot}c_e ce(vi)=λ1A⋅ce 式中,ce∈RNc_e{\in}R^Nce∈RN是一个包含所有节点的特征向量中心性的向量,这个式子也可以表达为:
λ⋅ce(vi)=A⋅ce\lambda{\cdot}c_e(v_i)=A{\cdot}c_e λ⋅ce(vi)=A⋅ce 显然,cec_ece是矩阵的特征向量,λ\lambdaλ是其对应的特征值。一个邻接矩阵AAA存在多对特征向量和特征值。中心性的值通常为正数,所以选择中心性需要考虑所有元素均为正数的特征向量。根据Perron-Frobenius定理,一个元素全为正的实方阵具有唯一的最大特征值,其对应的特征向量的元素全为正。因此可以选择最大的特征值λ\lambdaλ,将它的相应的特征向量作为中心性向量。
通过上面的公式进行计算,可以算出示例图中最大的特征值是2.481,对应的特征向量[1, 0.675, 0.675, 0.806, 1]。因此,v1,v2,v3,v4,v5v_1,v_2,v_3,v_4,v_5v1,v2,v3,v4,v5的特征向量中心性分别是1,0.675,0.675,0.806,1。注意v2v_2v2、v3v_3v3和v4v_4v4的度都是2,但是v4v_4v4的特征向量中心性比另外两个节点的都要高,因为它和v1v_1v1、v5v_5v5两个高特征向量中心性的节点直接相连。
三、Katz中心性(Katz Centrality)
Katz中心性是特征向量中心性的一个变体,它不仅考虑了邻居的中心性,而且包含了一个常数来考虑中心节点本身。具体来说,节点viv_ivi的Katz中心性可以定义为:
ck(vi)=α∑j=1NAi,jck(vj)+βc_k(v_i)={\alpha}\sum_{j=1}^NA_{i,j}c_k(v_j)+\beta ck(vi)=αj=1∑NAi,jck(vj)+β 式中,β\betaβ是一个常数。一个图中所有节点的Katz中心性可以用矩阵形式表示为:
ck=αAck+β(I−α⋅A)ck=βc_k={\alpha}Ac_k+\beta\\ (I-{\alpha}{\cdot}A)c_k=\beta ck=αAck+β(I−α⋅A)ck=β 式中,ck∈RNc_k{\in}R^Nck∈RN表示所有节点的Katz中心性的向量;β\betaβ表示一个包含所有节点的常数项β\betaβ的向量;III表示单位矩阵。值得注意的是,如果令α=1λmax{\alpha}=\frac{1}{\lambda_{max}}α=λmax1和β=0\beta=0β=0,那么Katz中心性等价于特征向量中心性,其中λmax{\lambda}_{max}λmax是邻接矩阵AAA的最大特征值。α\alphaα的选择对于Katz中心性非常关键:大的α\alphaα值可能使矩阵I−α⋅AI-{\alpha}{\cdot}AI−α⋅A变成病态矩阵,而小的α\alphaα可能使中心性变得没有意义,因为它总是给所有节点分配非常相似的分数。在实践中,经常令α<1λmax{\alpha}<\frac{1}{\lambda_{max}}α<λmax1,这就保证了矩阵I−α⋅AI-{\alpha}{\cdot}AI−α⋅A的可逆性,那么ckc_kck可按如下方式计算:
ck=(I−α⋅A)−1βc_k=(I-{\alpha}{\cdot}A)^{-1}\beta ck=(I−α⋅A)−1β 令β=1,α=15\beta=1,\alpha=\frac{1}{5}β=1,α=51,经过计算可得示例图中节点v1v_1v1和v5v_5v5的Katz中心性都是2.16,v2v_2v2和v3v_3v3的Katz中心性是1.79,v4v_4v4的Katz中心性是1.87。
四、介数中心性(Betweeness Centrality)
前面提到的几种中心性基于和相邻节点的连接。另一种度量节点重要性的方法是检查它是否在图中处于重要位置。具体来说,如果有许多路通过同一个节点,那么该节点处于图中的一个重要位置。节点viv_ivi的介数中心性的定义如下:
cb(vi)=∑vs≠vi≠vtσst(vi)σstc_b(v_i)=\sum_{v_s{\neq}v_i{\neq}v_t}\frac{\sigma_{st}(v_i)}{\sigma_{st}} cb(vi)=vs=vi=vt∑σstσst(vi) 式中,σst\sigma_{st}σst表示所有从节点vsv_svs到节点vtv_tvt的最短路的数目(此处不区分vsv_svs与vtv_tvt);σst(vi)\sigma_{st}(v_i)σst(vi)表示这些路中经过节点viv_ivi的路的数目。为了计算介数中心性,需要对所有可能的节点对求和。因此,介数中心性的值会随着图的增大而增大。为了使介数中心性在不同的图中具有可比性,需要对它进行归一化(normalization)。一种有效的方法是将所有节点的中心性除以其中的最大值。由上面介数中心性的公式可知,当任意一对节点之间的最短路都通过节点viv_ivi时,介数中心性达到最大值,即σst(vi)σst=1,∀vs≠vi≠vt\frac{\sigma_{st}(v_i)}{\sigma_{st}}=1,{\forall}v_s{\neq}v_i{\neq}v_tσstσst(vi)=1,∀vs=vi=vt。在一个无向图中,共有(N−1)(N−2)2\frac{(N-1)(N-2)}{2}2(N−1)(N−2)个不包含节点viv_ivi的节点对,所以介数中心性的最大值是(N−1)(N−2)2\frac{(N-1)(N-2)}{2}2(N−1)(N−2)。所以viv_ivi归一化后的介数中心性cnb(vi)c_{nb}(v_i)cnb(vi)可以定义为:
cnb(vi)=2×∑vs≠vi≠vtσst(vi)σst(N−1)(N−2)c_nb(v_i)=\frac{2{\times}\sum_{v_s{\neq}v_i{\neq}v_t}\frac{\sigma_{st}(v_i)}{\sigma_{st}}}{(N-1)(N-2)} cnb(vi)=(N−1)(N−2)2×∑vs=vi=vtσstσst(vi) 在示例图中,节点v1v_1v1和v5v_5v5的介数中心性是23\frac{2}{3}32,而它们归一化后的中心性是14\frac{1}{4}41。节点v2v_2v2和v3v_3v3的介数中心性是12\frac{1}{2}21,而它们归一化后的中心性是112\frac{1}{12}121。节点v4v_4v4的介数中心性和归一化的中心性均为0。
节点中心性:度中心性、特征向量中心性、Katz中心性、介数中心性相关推荐
- 复杂网络 介数中心性 java_复杂网络算法中K—shell与介数中心性算法的实现
! // 文章编号:1007-1423(2014)17-0007-05 DOI:10.3969~.issn.1007-1423.2014.17.002 复杂网络算法中K-shel与介数中心性算法的实现 ...
- 使用networkx计算网络的介数中心性
网络节点的重要性指标介数中心性的计算,使用python的networkx包 import networkx as nxG = nx.Graph()# 从文件@filename中读取网络的adjacen ...
- 复杂网络 介数中心性 java_ego network 介数中心性计算
下面是求节点介数的代码,介数就是指经过一个点的最短路径的比例,在计算复杂网络中节点重要性的时候会用到. /** * 用来计算介数 * 要计算所有的最短路径,用DIJ计算最短路径的时候我们可以发现一个规 ...
- python中心性评价_centrality 计算复杂网络中的节点或边 数中心性,基于python的 工具箱 matlab 238万源代码下载- www.pudn.com...
文件名称: centrality下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Python 文件大小: 101 KB 上传时间: 2014-03-13 下载次数: 4 详细说明:计算 ...
- 指纹图谱相似度评价软件_基于指纹图谱和网络药理学对当归四逆汤中桂枝的Qmarker预测分析...
摘 要:目的 基于指纹图谱和网络药理学分析预测当归四逆汤(DSD)中桂枝的质量标志物(Q-marker).方法 建立桂枝水煎液和DSD的指纹图谱,利用中药色谱指纹图谱相似度评价系统软件(2012年 ...
- 6-4 求一组数中的最大值、最小值和平均值
6-4 求一组数中的最大值.最小值和平均值 编写函数,求一组数中的最大值.最小值和平均值. 函数接口定义: float fun(int a[],int n,int *max,int *min); 其中 ...
- networkx计算边的重要性:边介数或者中介中心性edge_betweenness
背景 最近需要在一个节点数300+万,边400+万的有向图中删除某一些边的子集,但是又需要尽量减少对图的弱连通性的影响.最后的解决方案中一部分是,先将有向图转为无向图,计算边的betweenness, ...
- c语言输出度为1 的节点,计算机国家二级考试中的度为1和度为2是什么意思?老师说:总结点=叶子节点数+度为1+度为2,都是什么意思?...
度是一个计算机的单位,度为1就说明该节点的个数为1,度为2就说明该节点的个数为2. 而度为0的结点叫叶子结点,由二叉树的性质可以知道在二叉树中叶子结点总是比度为2的结点多一个,故总结点=叶子节点数+度 ...
- Modularity的计算方法——社团检测中模块度计算公式详解(转)
文章转自http://www.yalewoo.com/modularity_community_detection.html Modularity,中文称为模块度,是 Community Detect ...
最新文章
- StereoDRNet:基于stereo的三维重建网络
- Shell 脚本知识回顾 (四) —— Shell 命令及Shell 相关语句
- [转载] 晓说——第9期:多如牛毛严酷无比的美国那些法
- Android Drawable绘图学习笔记
- 在Visual C++中用ADO进行数据库编程(下)
- angularjs--控制器的显示与隐示使用
- 复杂json解析(json里面嵌套json)
- javase和java区别_javase和java有什么区别
- 乐视盒子u4刷Android,乐视盒子u4安装优酷
- orbslam2稠密版建图
- 空间解析几何 | 曲面的切平面与二元函数全微分的几何意义
- 纯代码蓝色理想的logo
- matlab版大学物理学,MATLAB可视化大学物理学(第2版)
- 前端规范之Git工作流规范 Husky + lint-staged
- 【UWB 定位】测距TOA 和 TDOA详解
- undefined is not a function
- 帝国cms php调用模板变量,帝国cms列表封面模板和内容模板变量的讲解
- 一首励志的歌曲《我相信》
- jmeter逻辑控制器之如果(if)控制器实战(二)
- final关键字、权限、内部类