复杂网络节点重要性评价方法初探

在一个网络中,不同的节点起着大小不同的作用。以社交网络为例,有意见领袖的大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.degrees
      val nodeClusterEdge = graph.triangleCount.cache()

      val nodeInfo = nodeClusterEdge.vertices.leftOuterJoin(nodeDegree).map{case (id,(clusterEdgesNum, degree)) =>
         val total :Double = degree.get*(degree.get-1)/2
         val clusterCoeff :Double = if(total == 0) 0 else clusterEdgesNum.toDouble/total
         val revClusterCoeff = if(clusterCoeff == 0.0) 0.0 else 1.toDouble/clusterCoeff

         if (revFlag) (id,revClusterCoeff,degree) else (id,clusterCoeff,degree)
      }.cache()

      val maxRevClusterCoeff = nodeInfo.map(x => x._2).max
      val minRevClusterCoeff = nodeInfo.map(x => x._2).min
      val maxDegree = nodeInfo.map(x => x._3.get).max
      val minDegree = nodeInfo.map(x => x._3.get).min

      nodeInfo.map{case (id,clusterCoeff,degree) =>
          val stdRevClusterCoeff :Double= (clusterCoeff-minRevClusterCoeff)/(maxRevClusterCoeff-minRevClusterCoeff)
          val stdDegree :Double = (degree.get - minDegree).toDouble/(maxDegree - minDegree).toDouble
          val finalIndex = 0.2*stdRevClusterCoeff + 0.8*stdDegree
          (id,finalIndex)
      }
    }

参考文献

【1】Borge-Holthoefer J, Moreno Y 2012 Phys. Rev. E 85 026116

【2】基于度与集聚系数的网络节点重要性度量方法研究   任卓明

【3】网络节点重要度评价方法研究 叶春森

时间: 2024-10-16 08:08:07

复杂网络节点重要性评价方法初探的相关文章

第五章:节点重要性与相似性

第五章节点的重要性与相似性 关键节点是网络科学的重要研究内容之一本章要重点详细介绍无向网络中节点重要性排序的几个常用指标:度值,介数,接近数,k-壳值和特征向量 5.2无向网络节点重要性指标5.2.1度中心性 一个节点度越大就意味着这个节点越重要. 此类问题都与如何刻画节点在网络中的位置有关,这便是度中心性的问题了 5.2.2介数中心性: 概念:以经过某个节点的最短路径的数目来刻画节点重要性的指标就称为介数中心性,简称介数bc这个概念刻画了节点i对于网络中节点对之间沿着最短路径传输信息的控制能力

Deep Learning(深度学习)之(九)词向量的内部任务评价和外部任务评价方法

关键词: 内部任务评价(Intrinsic Evaluation)和 外部任务评价(extrinsic evaluations).超参数影响下的类比评价任务.人类决策和词向量距离的相关性.结合上下文处理歧义.窗口分类. 这个课堂笔记我们将会对词向量(也就是词嵌入)的内部任务评价和外部任务评价方法进行讨论.主要的内容是单词类比(word analogies)技术,我们会把它当做内部任务评价的技术并展示其相关示例,它会在词向量的调谐(tune)中发挥重要作用.我们还会讨论如何训练模型的权重/参数,并

Allegro修改shape网络节点

使用Allegro时修改shape的网络节点方法: ①选择shape->Select Shape or Void/Cavity ②选择要修改的shape ③点击(...)修改网络节点的名字 ④修改完成 Allegro修改shape网络节点

如何保护你的以太坊网络节点RPC免受******?

最近朋友的以太坊节点遭到******,存储在Geth钱包中的以太币通过暴露的RPC端口命令被转移出去,Transfer可以在下面看到. 下图显示了最近向***帐户的转移: 保护计算机系统传统上是一场斗智斗勇,Gosser说"穿透者试图找到漏洞,设计师试图关闭它们." 与大多数比特币客户端不同,默认情况下,大多数以太坊客户端RPC不受密码保护. 尽管如此,有多种方法可以保护以太坊节点RPC. 其中一些方法包括: 1.为帐户选择一个强密码. 2.使用Nginx作为反向代理和HTTP基本身份

android网络请求库volley方法详解

使用volley进行网络请求:需先将volley包导入androidstudio中 File下的Project Structrue,点加号导包 volley网络请求步骤: 1. 创建请求队列       RequestQueue queue = Volley.newRequestQueue(this); 2.创建请求对象(3种) StringRequest request = new StringRequest(“请求方法”,“请求的网络地址”,“成功的网络回调”,“失败的网络回调”): Ima

OpenStack IceHouse 部署 - 5 - 网络节点部署

Neutron网络服务(网络节点) 目录 [隐藏] 1 参考 2 前置工作 2.1 调整内核参数 3 安装 4 配置 4.1 keystone对接 4.2 rabbitmq对接 4.3 metadata服务对接 4.4 ML2插件配置 4.5 L3-agent 4.6 DHCP-agent 5 接口配置 6 服务更新 7 服务验证 8 附加配置 8.1 共享上网 8.1.1 iptables NAT 8.1.2 虚拟路由 参考 由于硬件条件所限并结合实际网络环境,本页并不是完全按照官方给出的指导

openstack icehouse系列之网络节点搭建

我们接着上一篇博文openstack icehouse系列之控制节点搭建继续往下开始搭建下面是环境介绍. 网络节点:ml2.openvswitch.DHCP.l3.metadata 控制节点:mysql.keystone.glance.nova.neutron.dashboard.cinder 计算节点:nova-compute.qemu-kvm.openvswitch.ml2 keystone:验证 glance:镜像 nova:计算 neutron:网络 Network setup (网络节

openstack controller ha测试环境搭建记录(十一)——配置neutron(网络节点)

在网络节点配置内核参数:vi /etc/sysctl.confnet.ipv4.ip_forward=1net.ipv4.conf.all.rp_filter=0net.ipv4.conf.default.rp_filter=0 在网络节点使内核参数立即生效:sysctl -p 在网络节点安装软件:yum install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-openvswitch 在网络节点修改配置文件:ope

新闻标签提取的评价方法

新闻标签提取的评价方法 一.  目标: 用于评价不同的标签提取算法的优劣,以及算法中参数选取的效果评价. 二.  困难: 标签提取效果的好坏具有强烈的主观性,对一条新闻提取标签的价好坏,通过机器来做的话,比较困难. 三.  解决方案: 选取一定数量的新闻集,经过标签提取得到标签集,通过比较标签集的分布,来分析标签提取算法在不同评价指标上的表现.具体评价指标有: 覆盖率: 覆盖率 = 结果集标签的数目/系统标签集的数目 * 100% 准确率: 每条新闻的结果标签若与原标签重合一个便认为正确.按照这