Modularity的计算方法——社团检测中模块度计算公式详解

Modularity,中文称为模块度,是 Community Detection(社区发现/社团检测) 中用来衡量社区划分质量的一种方法。要理解Modularity,我们先来看社团和社团检测的概念。

社团检测

社团检测,就是要在一个图(包含顶点和边)上发现社团结构,也就是要把图中的结点进行聚类,构成一个个的社团。关于社团(community),目前还没有确切的定义,一般认为社团内部的点之间的连接相对稠密,而不同社团的点之间的连接相对稀疏。

社团检测算法的输入是一张图:

scrn20170308214823

上图可以用边表(edge list)文件表示:

在计算机中,也可能以邻接矩阵的方式存储这张图:

邻接矩阵A,Aij=1表示 结点i 和 结点j 之间有一条边, Aij=0表示 结点i 和 结点j 之间没有边。特别的,这里结点自己和自己的连接是0,即Aii=0,不考虑结点自己和自己的连边。

输入图后,社团检测算法会输出一种社团划分,例如下面这个样子

scrn20170308214716

具体的输出文件可能这样:

每行表示一个社团,里面的数字表示属于该社团的结点编号。

公式中用到的字母

在不同的文献中,可能用不同的字母表示相同的东西,这样就给理解造成了一定困难。本文中的所有公式都使用下面的字母定义。

和图相关的

用 n 表示图的结点个数,这里n=14(结点编号0到13)

用 m 表示图中边的个数,这里m=23(上图中共23条边)

用 k 表示图中结点的度(degree),无向图中一个结点的度就是该结点连出去的边的条数。显然图中14个结点都有自己的度,我们用ki来表示结点i的度。例如:k0=3,k5=4,k6=2

用 A 表示图的邻接矩阵。邻接矩阵A,Aij=1表示 结点v 和 结点w 之间有一条边, Aij=0表示 结点i 和 结点j 之间没有边。无向图的邻接矩阵是对称的,即Aij=Aji。特别的,这里结点自己和自己的连接是0,即Aii=0,不考虑结点自己和自己的连边。

Modularity第一版

Newman 在2003年的论文 “Finding and evaluating community structure in networks” 中首次提出了modularity的定义,在论文中用来度量自己的社团检测算法的好坏。

Consider a particular division of a network into k communities. Let us define a k×k symmetric matrix e whose element eij is the fraction of all edges in the network that link vertices in community i to vertices in community j [49].

假设社团划分把一个网络划分为k个社团,定义一个k*k的矩阵e。eij表示连接 社团i 和 社团j 的边的数目 占 总边数 的比例。特别的,eii表示的是社团i和社团i之间的边占总边数的比例,也就是社团i内部的边占总边数的比例。

结合我们的例子

scrn20170308230905

例子中,边数m=23 。社团1内部有5条边,于是有 e11=523

社团2和社团3之间有2条边,这样看来 e23=223 。那么e32等于多少?如果你没有看这句话后面的注释,也许你会以为e32=e23=223 。但其实不是的,我们看后面的注释:

[49] As discussed in [33], it is crucial to make sure each edge is counted only once in the matrix eij—the same edge should not appear both above and below the diagonal. Alternatively, an edge linking communities i and j can be split, half-and-half, between the ij and ji elements, which has the advantage of making the matrix symmetric. Either way, there are a number of factors of 2 in the calculation that must be watched carefully, lest they escape one’s attention and make mischief.

这里说,在矩阵e中,每条边要确保只计数了1次。一条边的计数不能同时出现在e矩阵的对角线上方和下方。如果e32=e23=223,那么连接社团2和社团3的两条边就分别计数了2次。因此,可以的情况是:

e32=223,e23=023 或者 e32=023,e23=223 或者e32=123,e23=123

一种可行的方法是,把社团i和j之间的边分成2份,分别计入eij 和 eji,这样可以保证e是对称的。这样计算eij时,分母上就会多一个2 。

我们这个图中,社团1内部有5条边,社团2内部有7条边,社团3内部有8条边。社团1和社团2之间有1条边,社团1和社团3之间有0条边,社团2和社团3之间有2条边。可以得到e矩阵如下:

 123
152312×12312×023
212×12372312×223
312×02312×223823

这样,矩阵e的迹 tr(e)=∑ieii,也就是矩阵对角元素的和,就表示了社团内部的边的比例。这个值越大,代表社团内部联系越紧密。然而这样有一个缺陷,如果把整张图分成1个社团,这个值就是最大值1 。

So we further define the row (or column) sums ai=∑jeij , which represent the fraction of edges that connect to vertices in community i.

因此定义了一个e的行和a, ai=∑jeij,它表示连接到 社团i 中的边占总边数的比例。这句话是不准确的。

因为上面e矩阵中,我们对不同社团之间的边要除以2,因此这里连接到 社团i 中的边是有不同权重的,完全在社团i中的边权重为1,而只有一端在社团i中的边权重就是12

由于权重的不同,如果把一条边看做有两个端点,准确的说法是

ai=∑jeij,它表示连接到 社团i 中的边的端点数(相当于社团中所有点的度相加) 占总端点数(2m) 的比例 ,即

ai=kCi2m

kCi表示社团i内部所有点的度数之和。

例子里我们的a如下:

a 
1523+12×123+12×023 = 1146
212×123+723+12×223 = 1746
312×023+12×223+823 = 1846

In a network in which edges fall between vertices without regard for the communities they belong to, we would have eij=aiaj.

这句话我还没看懂,看懂的可以再评论区教下博主0.0

Thus we can define a modularity measure by

Q=∑i(eii–ai2)=Tre–||e2||

where ||x|| indicates the sum of the elements of the matrix x.

模块度的公式,定义是:

Q=∑i(eii–ai2)=∑ieii–∑iai2

如果用ei表示社团i内部的边数,则eii=eim 。然后把ai=kCi2m代入,就可以得到计算modularity最常用的公式

Q=∑i(eim–(kCi2m)2)

我们用定义算一下我们这个例子中划分的模块度:

Q=523+723+823–(1146)2–(1746)2–(1846)2=5531058=0.52268431

还可以推导一下,得到矩阵公式:

Q=∑i(eii–ai2)=∑ieii–∑iai2=Tre–||e2||

要证明这个,就是要∑iai2=||e2|| 。 由于ai=∑jeij,也就是

∑i(∑jeij)2=||e2||

注意到e是对称的。也就是e矩阵的每行求和,然后平方,再相加 等于 e矩阵平方再求和。(我还没看懂,看懂的可以再评论区教下博主0.0

可以验证用矩阵公式算也会得到同样的Q。

这里顺便比较一下∑iai2 和 ||e2||

∑iai2=(523+146+0)2+(146+723+123)2+(0+123+823)2

e2=(52314601467231230123823)×(52314601467231230123823)=

我感觉第一个式子拆开后,正好就是后一个式子里面矩阵中的元素两两相乘。最后累加结果也相同。

Modularity第二版

Newman论文中的定义

2006年,Newman 在论文“Modularity and community structure in networks”中重新定义了modularity,目的是为了满足spectral properties。原话为:

Here we take a different approach based on a reformulation of the modularity in terms of the spectral properties of the network of interest.

Suppose our network contains n vertices.

n 表示图的结点个数

For a particular division of the network into two groups let s_i = 1 if vertex i belongs to group 1 and s_i = -1 if it belongs to group 2. Observing that the quantity 12(sisj+1)  is 1 if i and j are in the same group and 0 otherwise

论文中的例子是分为了2个社区。然后定义了sisi=1 表示结点i属于社团1,si=−1 表示结点i属于社团2 。那么 12(sisj+1) 的值就可以表示结点i和j是否在同一个社团,在同一个社团时值是1,在不同社团时值是0.

And let the number of edges between vertices i and j be Aij, which will normally be 0 or 1, although larger values are possible in networks where multiple edges are allowed.(The quantities Aij are the elements of the so-called adjacency matrix.)

Aij 表示 结点i 和 结点j 之间边的数目, 一般无权图中Aij 的取值是0或者1。但可以扩展到两点之间多条边的情形。

这里有2点文中没到的:

1. 无向图的邻接矩阵是对称的,即Aij=Aji。因此,如果把矩阵A的所有元素相加,得到的值是图中边的数目的2倍:2m=∑Aij

2. 自己和自己的连接在矩阵中是0,即Aii=0

At the same time, the expected number of edges between vertices i and j if edges are placed at random is kikj2m, where ki and kj are the degrees of the vertices and m=12∑iki is the total number of edges in the network.

同时,如果把同一个图中的边随机放置,则结点i和结点j之间边数的期望值是kikj2m(解释见下一节)。其中ki 和 kj 表示结点i和结点j的度, m=12∑iki 是图中边的个数。

Thus the modularity Q is given by the sum of Aij–kikj2m   over all pairs of vertices i, j that fall in the same group.

Aij–kikj2m 表示的是结点i和结点j之间的连边数,减去 随机情况下 结点i和结点j之间的期望连边数。(关于随机情况的讨论在下面)

we can then express the modularity as

Q=14m∑ij(Aij–kikj2m)(sisj+1)

The leading factor of 14m is merely conventional: it is included for compatibility with the previous definition of modularity (17).

Q计算公式前面的14m仅仅是为了和之前第一版的modularity计算公式相兼容。

把这个公式变形一下:

Q=12m∑ij(Aij–kikj2m)(sisj+1)2

这样就可以看出,后面的因子12(sisj+1)是为了确保求和时只对i和j属于同一个社团的情况进行求和。由于用s=1和-1只能表示有2个社团的情况,在多个社团时,我们可以引入记号δ(i,j) ,δ(i,j)=0 表示结点i 和 j 不在同一个社团,δ(i,j)=1 表示结点 i 和 j 在同一个社团。这样计算公式就变成了

Q=12m∑ij(Aij–kikj2m)δ(i,j)

其实就是下面的意思:

Q=12m∑i,j在同一社团(Aij–kikj2m)

再来看一下这个式子中各个项的意义:

Aij 表示 结点i 和 结点j 之间边的数目

kikj2m 表示 随机放置边的情况下,结点i和结点j 之间边数的期望值

带上前面的求和号,

∑i,jAij 就表示 社团内部实际的 边 的数目 的2倍(2倍是因为ij和ji会计算2次)

∑i,jkikj2m 就表示 随机放置边的情况下,社团内部边数的期望值 的2倍(2倍是因为ij和ji会计算2次)

最后除以2m,之所以是2m,就是因为前面的边数都是2倍,这样一除就可以得到边的比例。(其实有没有12m是无所谓的,乘以常数并不影响求最值的问题)

12m∑i,jAij 就表示 社团内部实际的边数的比例

12m∑i,jkikj2m就表示 随机情况下社团内部期望的边数的比例

因此,Modularity的定义可以看做:

在社区内部的边的比例,减去边随机放置时社区内部期望边数的比例。

期望边数kikj2m的来源

参考论文Finding community structure in networks using the eigenvectors of matrices

每个结点的度不变,边重新连接,这就需要一个已知每个结点的度,来随机生成图的模型。图生成模型最重要的特征就是两个点i和j之间连边的概率(或者叫边的数目的期望值),记为Pij,那么Pij会满足什么性质呢?

1.每个结点度不变,最终总边数也不会变。因此随机连边后,图中的边数期望值等于原来真实图中的边数

∑i,jPij=∑i,jAij=2m

2.对每个节点来说,它的度也不会变,就有

∑jPij=ki

在满足这两个式子的情况下,随机的进行连边。这样在选定了一个点(边的一个端点)后,选另一个点(边的另一个端点)时,会选到结点i的概率,就只与结点i的度ki有关。而一条边的两个端点进行选择的时候都是独立随机的。因此Pij,选到i的概率与ki有关,选到j的概率与kj有关,就可以写成

Pij=f(ki)f(kj)

由于Pij=Pji,因此上面两个函数f是相同的。

∑jPij=∑jf(ki)f(kj)=f(ki)∑jf(kj)

根据上面性质中的第二个式子∑jPij=ki,就有

f(ki)∑jf(kj)=ki

由于∑jf(kj)并不包含i,可以看出f(ki)ki之间是倍数关系,不妨设

f(ki)=Cki

C是常量。代入上面性质的第一个式子∑i,jPij=∑i,jAij=2m ,有

∑i,jPij=2m

∑i,jf(ki)f(kj)=2m

∑i,jCkiCkj=2m

C2∑ijkikj=2m

∑ijkikj是可以用m表示的。假设结点编号从1到n,则

2m=k1+k2+…+kn

(2m)2=(k1+k2+…+kn)2

平方展开,正好等于n个k值两两相乘,这正好等于∑ijkikj。即