在一个网络中,不同的节点起着大小不同的作用。以社交网络为例,有意见领袖的大V,有死寂沉沉的僵尸粉;以交通网络为例,有至关重要的交通枢纽,有无关痛痒的备用中转站。在使用复杂网络分析业务问题时,如何区分网络中不同节点的重要性程度,就是一个需要考虑的问题。为了解决我们自己的业务问题,顺便了解了一下相关的方法,特记录一下,若有益于相关领域的同学,则幸甚。

一、要实现的目标

对网络中的节点定义一个指标,可用来定量地衡量每个节点在网络中重要性的大小。

二、相关的一些方法总结

分析节点的重要性,业界较多地从网络拓扑结构出发,也有考虑传播动力学视角的【1】。菜鸟新上路,咱们先了解常用的一些方法即可。

  • 局部特征

节点度这恐怕是常简单也最多使用的一个指标了。表示与节点所直接连接的边的数量,对于有向图,又分入度与出度。对于节点i, 对于图G中的节点j, 当i与j存在边相连时, a(i,j)=1,否则a(i,j)=0. 那么,节点i的度可以如下计算:

这个定义既直观又实用。但是也确实存在一定不足。比如下图中节点2与节点4的度都是3,它们的重用性真是相同的吗? 如果我们从网络连接密切程度来看,2的邻居节点1,3,6之间存在较多的边,它们共同形成了一个较紧密的小圈子。而4的邻居3,5,8之间并无边相连。那么从连接紧密性的角度,我们倾向于认为2更重要。但是,可以发现4是通往7,8,9,10的一个必经之地,如果破坏了4,那么这个图就不连通了。这时我们会倾向于认为4更重要。所以,如果能在考虑节点度时,同时引入一些其它信息,则更加妥当。

在Spark的Graphx中,建立Graph对象后,直接调用 .degrees 即可得到节点度的值。

集聚系数上面我们有涉及到紧密性的一个说法,那么,在图论中,有一个指标可以衡量这种属性,就是集聚系数(clustering coefficient)。有局部集聚系数,也有全局集聚系数。对于节点i, 它的邻居节点N(i)之间所存在的边数,与可能存在的最大边数的比值,就叫节点i的局部集聚系数。网络的全局集聚系数就是所有节点的集聚系数求平均值。

不要小看这个指标,它在评估一个网络是否可以称为小世界网络时,具有重要意义。

在Graphx中,可以直接用 .triangleCount 来获得邻居节点之间实际存在的边数,再除以上式分母上的值,即可。

文章【2】【3】就是在度的基础上,增加了这个系数的因素来作为衡量节点重要性的评价方法。文章【2】的方法:

其中f是节点与其邻居度数之和,g是一个标准化后的指标,具体参考该文即可。俺觉得这个真心有点复杂啊,文章也没有讲清楚为啥一定要这样搞。相比之下,文章【3】就轻便多了,直接把度数与集聚系数作了一下加权,如下:

为了简便,我们这边目前采用了类似于文章【3】的方法。后面有精力再尝试更复杂的方法。

  • 全局特征

可以看出来,上面讨论的方法仅考虑节点i及其邻居的信息,属于局部性质的指标。 我们再看下有哪些全局特征可以用。但要注意的是,全局指标往往涉及到网络整体的计算,对于我厂这样大规模的网络数据,计算复杂度不得不考虑。

特征向量法上面讨论节点度时,默认所有邻居具有同等重要性,但现实中,如果总办领导们是你有且仅有的朋友,而我即便认识鹅厂其余人当中的1W人,恐怕你也比我更重要。即是说,邻居节点本身的重要性会影响所评价节点的重要性。其实,这个也是我们自己的业务场景中期望能考虑进来的一个因素。该指标计算公式如下(相当于对邻居节点的重要性作了线性加权,而加权权重是图G的邻接矩阵的特征向量):

中心度一个点如果到其它所有点的最短路径越小,则该点就越居于网络的中心位置。计算方法如下所示,其中di,j 表示i到j的最短路径长度。把分子N-1放到分母上,就相当于是所有最短路径的平均值。这个定义还是蛮直观的吧,但感觉计算量肯定不小啊。

点介数我们这样想吧,如果一个网络中80%的最短路径都经过点i, 那i 是不是很重要?这种点就是重要“交通枢纽”一样的角色。其计算方法如下,分子是所有经过点i的最短路径数,分母是所有最短路径数:

此处我想用“等等等等”来表达诸如以上的指标真心太多了。大家使用时要结合自己的业务场景进行借鉴。

三、我们的应用

目前,俺们也是新入门去应用这个东东。使用的是比较简单的,度数与集聚系数加权的方法。我们在Spark中自定义了一个函数,代码如下:

  def calNodeImportanceIndex(graph :Graph[String,Int], revFlag :Boolean = true) = {//revFlag 用来控制集聚系数是正向作用还是反向作用val nodeDegree = graph.degreesval nodeClusterEdge = graph.triangleCount.cache()val nodeInfo = nodeClusterEdge.vertices.leftOuterJoin(nodeDegree).map{case (id,(clusterEdgesNum, degree)) => val total :Double = degree.get*(degree.get-1)/2val clusterCoeff :Double = if(total == 0) 0 else clusterEdgesNum.toDouble/totalval revClusterCoeff = if(clusterCoeff == 0.0) 0.0 else 1.toDouble/clusterCoeffif (revFlag) (id,revClusterCoeff,degree) else (id,clusterCoeff,degree)}.cache()val maxRevClusterCoeff = nodeInfo.map(x => x._2).maxval minRevClusterCoeff = nodeInfo.map(x => x._2).minval maxDegree = nodeInfo.map(x => x._3.get).maxval minDegree = nodeInfo.map(x => x._3.get).minnodeInfo.map{case (id,clusterCoeff,degree) =>val stdRevClusterCoeff :Double= (clusterCoeff-minRevClusterCoeff)/(maxRevClusterCoeff-minRevClusterCoeff)val stdDegree :Double = (degree.get - minDegree).toDouble/(maxDegree - minDegree).toDoubleval finalIndex = 0.2*stdRevClusterCoeff + 0.8*stdDegree(id,finalIndex)}}

参考文献

【1】Borge-Holthoefer J, Moreno Y 2012 Phys. Rev. 85026116
【2】基于度与集聚系数的网络节点重要性度量方法研究   任卓明
【3】网络节点重要度评价方法研究 叶春森

复杂网络节点重要性评价方法初探相关推荐

  1. 复杂网络分析 08网络节点重要性

    08 网络节点重要性 8.1网络节点重要性 8.2节点重要性判别方法 8.1网络节点重要性 度中心性 DC(i)=kin−1DC(i) =\frac{k_i}{n-1}DC(i)=n−1ki​​ nn ...

  2. 飞机座舱布局工效综合评价与评价方法初探

    随着飞机性能的不断提高,飞行员的工作负荷及操作难度不断增大,经常导致误判和误操作.因此从工效学的角度开展座舱设计的工效学综合评价对提高飞行员工效.减少人为失误影响甚大. 座舱布局涉及到工效问题很多,如 ...

  3. 【Matlab】评估网络节点重要性

    centrality 衡量节点的重要性 全页折叠 语法 C = centrality(G,type) C = centrality(___,Name,Value) 说明 示例 C = centrali ...

  4. 复杂网络中节点重要性方面的研究热点问题

    1.节点重要性的定义. 节点的重要性含义不同,评价节点重要性排名的结果也不同. 例如2012 年,美国<福布斯>全球影响力人物排行榜, 美国总统奥巴马成为2012 年度全球最具影响力人物, ...

  5. 社交网络中节点重要性的度量

    影响最大化中,简单来说就是选择k个种子节点使得最后这些节点经过一定给的传播模型得到最大的影响力,影响力大小也就是用激活的节点个数表示.传统的思想就是在网络中越重要的节点,被选为种子节点的可能性就越大, ...

  6. 特征图注意力_从数据结构到算法:图网络方法初探

    作者 | 朱梓豪 来源 | 机器之心 原文 | 从数据结构到算法:图网络方法初探 如果说 2019 年机器学习领域什么方向最火,那么必然有图神经网络的一席之地.其实早在很多年前,图神经网络就以图嵌入. ...

  7. ArcGIS学习14:基于OD方法的网络节点关系分析

    标题 文章目录 标题 前言 一.上海市KFC与麦当劳的空间聚集度分析 1.1 场景及数据 1.2 关键工具 二.实际操作 2.1 近邻分析 2.2 Excel统计 2.3 点距离 2.3 属性表连接 ...

  8. 生态功能区划方法之二:生态服务功能重要性评价

    文中内容多来自国家环保总局发布的<生态功能区划技术暂行规程>. 生态服务功能:指生态系统及其生态过程所形成的有利于人类生存与发展的生态环境条件与效用,例如森林生态系统的水源涵养功能.土壤保 ...

  9. 复杂网络;社交网络;社区检测;节点重要性(重要节点识别);舆论动力学模型; 传染病模型 ;蓄意攻击 、随机攻击;网络鲁棒性、脆弱性、稳定性

    复杂网络 社交网络 社区检测 节点重要性(重要节点识别) 舆论动力学模型 传染病模型 蓄意攻击 随机攻击 网络鲁棒性.脆弱性.稳定性 Python 基本的网络分析 详细私聊 网络拓扑图 连通性 网络效 ...

最新文章

  1. c++不允许使用不完整的类型
  2. 字节输出流写入数据到文件
  3. openssl 生成证书_CentOS7 httpd(Apache)SSL 证书部署
  4. 实用的工具 —— 百度云、everything(全局搜索)、Everest(硬件检测)、TechPowerUp GPU-Z
  5. SPSS遇到缺失值怎么办?删除还是替换?【SPSS 067期】
  6. 最全讲解--电子电气架构演进
  7. 计算机考研作息时间表,2020考研的最佳作息时间表 如何安排学习时间
  8. 操作系统:手把手带你扫盲 操作系统 的那些必知必会!
  9. 从红包场景谈事务一致性
  10. git从本地仓库更新项目到远程仓库指定分支
  11. SQL Server性能监视
  12. Verilog——Chipscope简单实用的使用方法(基于ISE14.7 )
  13. 闲鱼触达系统背后——我想更懂你
  14. 五分钟为你的小程序增加公告功能(最新公告、列表、详情)
  15. cocos creator 实现手机震动的效果
  16. 波特兰书呆子晚餐-在那儿和广场
  17. 基于python-flask的地图打字游戏
  18. Python: PS 滤镜特效 -- Marble Filter
  19. 《深入理解计算机系统》实验二Bomb Lab
  20. Linux复制命令cp进阶

热门文章

  1. 23种设计模式意图汇总
  2. 唐诗三百首微电影合集(300集)
  3. 调用函数求三角形面积
  4. linux 病毒virus(text 逆向、PLT\GOT HOOK)
  5. 基于层次分析模型的工作选择问题的研究
  6. matlab中怎么写拉格朗日函数,MATLAB编辑n次拉格朗日函数插值法的程序
  7. OpenJudge 程序设计与算法(一)心得
  8. 2023-4-2 合规使用CHATGPT以及python如何调用chatgpt api的正确方式
  9. java正则表达式匹配路径_正则表达式教程之位置匹配详解
  10. 艾瑞:Foursquare引领地位社交网络 中国刚起步