加权GN算法简介

本文转自百度文库:http://wenku.baidu.com/view/c27b6edd195f312b3169a576.html?from=search

主要为简单介绍GN算法,并对之后进行Java实现打下基础

1 简介

GN算法是一个经典的社区发现算法,它属于分裂的层次聚类算法,最初,由Michelle Girvan和Mark Newman提出。其基本思想是不断的删除网络中具有相对于所有源节点的最大的边介数的边,然后,再重新计算网络中剩余的边的相对于所有源节点的边介数,重复这个过程,直到网络中,所有边都被删除。2004年Newman又提出了加权的GN算法,用以进行加权网络的划分。为了衡量网络划分的质量,引入了Q函数的概念,当模块性Q函数最大时表示网络划分最好。

模块性是指连接网络内部节点的边所占的比例与另外一个随机网络中连接内部节点的边所占的比例的期望值相减得到的差值。在无权网络中,Q函数表述为:


其中,eii表示对角线上的数值,给出了网络中连接某一社团内部各个节点在所有边的数目中所占的比例。ai表示每一行或每一列的和,即第i个社团中的节点相连的边在所有边中所占的比例。

在加权网络中,Q函数表述为:

式中,aij为网络邻接矩阵的元素,如果i和j 两节点相连,则aij为边的权重,否则等于 0;δ为隶属函数,当节点i 和 j属于同一个社团时,隶属函数为1,否则等于0; M = 0. 5∑aij 为网络中边的权重之和。在网络划分结构固定,两节点的边随机连接时,节点间存在边的可能性为 kikj /( 2M),ki 为节点i的点权,计算方法为对连通矩阵的第i行求和。

在实际的网络中,Q的值通常在0.3-0.7之间,Q的值越大,网络分裂的结果状态越好,Q值大于0.7的几率很小,Q值的上限是1,当越接近于1时,越能说明网络具有较强的聚类性质,即具有明显的社区结构。

GN 算法的关键是计算网络中的边介数,最短路径边介数方法是一种最简单的边介数度量方法,一条边的边介数是指从某个源节点 S 出发通过该边的最短路径的数目,对所有可能的源节点,重复做同样的计算,并将得到的相对于各个不同的源节点的边介数相加,所得的累加和为该边相对于所有源节点的边介数。

加权GN 算法求解的具体实现过程为:

(1)忽略边的权重,以无权网络计算网络中所有连接边的边介数;

(2)将边介数除以对应边的权重得到边权比;

(3)找到边权比最高的边将它移除,并计算网络的模块性 Q 函数,在计算中当边权比最高的边有多条时,同时移除这些边,并将此时移除的边和Q值进行存储;

(4)重复步骤(1),(2),直到网络中所有的边均被移除。

(5)GN算法划分结束后,取出Q值最大时的序号,在原始矩阵中依次去除截止到该次划分的边。得出最终连通矩阵,矩阵的值为权值。

2 无权GN算法

最短路径边介数方法是一种最简单的边介数度量方法,一条边的边介数(betweenness)是指从某个源节点 S 出发通过该边的最短路径的数目,对所有可能的源节点,重复做同样的计算,并将得到的相对于各个不同的源节点的边介数(betweenness)相加,所得的累加和为该边相对于所有源节点的边介数。

假设有一个具有 m 条边和 n 个节点的图,考虑一种比较简单的情况,假设从任何一个源节点出发,对该图进行搜索,该源节点与其它节点之间都只存在一条最短路径,图中的所有最短路径构成一个最短路径树。利用这颗最短路径树来计算每条边的边介数。

1,找到这棵树的叶子节点,并为每条与叶子节点相连的边赋值为1;

2,按照自下而上的方向为该搜索树中的每条边赋值,从与源节点S之间距离最远的边开始,其值等于位于该边之下的所有邻边的值之和再加1;

3,按照这种赋值方式,对搜索树中的所有边进行遍历,那么每条边的相对于某个源节点 S的边介数就是该边的值,对于所有可能的源节点,我们都重复上述过程;

4将每条边的相对于各个源节点的边介数相加,最终结果就是每条边的相对于各个源节点的边介数,即所有节点对间的最短路径的边介数。


但是,在大多数的实际网络中,每个源节点与其它节点之间并不只是存在一条最短路径,一些节点对之间存在若干条长度相等的最短路径。

从源节点 S 出发,为每个节点 i赋值,该值为从一个源节点S 出发到达其它节点 i 的最路径的数目用 wi表示。具体步骤如下:

1. 定义源节点 S 的距离为 ds= 0,并赋予一个权值为 ws= 1。

2. 对于每一个与源节点 S 相邻的节点 i,定义它到源节点的距离为di=ds+1 ,以及该节点的权值为 wi= ws= 1。
3. 对于每一个与任意节点 i 相邻的节点 j,我们根据具体情况,采取以下三个步骤之一:

  如果节点 j 没有被指定距离,那么,指定其距离为 dj= di+1,权值为 wj= wi;

如果已经指定了节点 j的距离,并且节点 j 的距离值为 dj=di+1,那么就要在原来的基础上将节点 j 的权值再增加 wi,使其权值为wj,即 wj← wj+wi;如果已经指定了节点 j 的距离,并且距离为 dj< di+1,那么,直接执行步骤 4。

4. 重复执行第 3 个步骤,一直到网络中不存在满足以下条件的节点,即其本身已经被指定了距离,但是其邻接点却没有被指定距离。



从节点 j 经过节点 i 到达源节点的最短路径的数目与节点 j 到达源节点的最短路径的数目之比为 wi/wj,对于源节点 S,应该采取以下步骤计算边界数:

1. 找到所有的叶子节点 f,该叶子节点 f 不被任何从源节点出发到达其它任何节点的最短路径所经过。

2. 假设叶子节点 f 与节点 i 相邻,那么就将权值 wi/wf赋给从节点 f 到节点 i 的的边。

3. 从距离源节点 S 最远的边开始,从下至上直到源节点 S为从节点 i 到节点 j 的边赋值为位于该边之下的所有邻边的权值之和再加上 1,然后,再将其和乘以 wi/wj,最后的结果就是该边的边介数。

4. 重复步骤 3,直到遍历图中的所有节点。



  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值