文章转自http://www.yalewoo.com/modularity_community_detection.html
Modularity,中文称为模块度,是 Community Detection(社区发现/社团检测) 中用来衡量社区划分质量的一种方法。要理解Modularity,我们先来看社团和社团检测的概念。
社团检测,就是要在一个图(包含顶点和边)上发现社团结构,也就是要把图中的结点进行聚类,构成一个个的社团。关于社团(community),目前还没有确切的定义,一般认为社团内部的点之间的连接相对稠密,而不同社团的点之间的连接相对稀疏。
社团检测算法的输入是一张图:
上图可以用边表(edge list)文件表示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
0
1
0
2
0
3
1
2
1
3
2
4
4
5
4
7
5
6
5
7
5
8
6
8
7
8
7
10
8
9
9
10
9
12
9
13
10
11
10
12
11
12
11
13
12
13
|
在计算机中,也可能以邻接矩阵的方式存储这张图:
邻接矩阵A,Aij=1表示 结点i 和 结点j 之间有一条边, Aij=0表示 结点i 和 结点j 之间没有边。特别的,这里结点自己和自己的连接是0,即Aii=0,不考虑结点自己和自己的连边。
输入图后,社团检测算法会输出一种社团划分,例如下面这个样子
具体的输出文件可能这样:
1
2
3
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
|
每行表示一个社团,里面的数字表示属于该社团的结点编号。
在不同的文献中,可能用不同的字母表示相同的东西,这样就给理解造成了一定困难。本文中的所有公式都使用下面的字母定义。
用 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,不考虑结点自己和自己的连边。
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内部的边占总边数的比例。
结合我们的例子
例子中,边数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矩阵如下:
1 | 2 | 3 | |
1 | 523 | 12×123 | 12×023 |
2 | 12×123 | 723 | 12×223 |
3 | 12×023 | 12×223 | 823 |
这样,矩阵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) 的比例 ,即
kCi表示社团i内部所有点的度数之和。
例子里我们的a如下:
a | |
1 | 523+12×123+12×023 = 1146 |
2 | 12×123+723+12×223 = 1746 |
3 | 12×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.
模块度的公式,定义是:
如果用ei表示社团i内部的边数,则eii=eim 。然后把ai=kCi2m代入,就可以得到计算modularity最常用的公式
我们用定义算一下我们这个例子中划分的模块度:
还可以推导一下,得到矩阵公式:
要证明这个,就是要∑iai2=||e2|| 。 由于ai=∑jeij,也就是
注意到e是对称的。也就是e矩阵的每行求和,然后平方,再相加 等于 e矩阵平方再求和。(我还没看懂,看懂的可以再评论区教下博主0.0)
可以验证用矩阵公式算也会得到同样的Q。
这里顺便比较一下∑iai2 和 ||e2||
我感觉第一个式子拆开后,正好就是后一个式子里面矩阵中的元素两两相乘。最后累加结果也相同。
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个社区。然后定义了si,si=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计算公式相兼容。
把这个公式变形一下:
这样就可以看出,后面的因子12(sisj+1)是为了确保求和时只对i和j属于同一个社团的情况进行求和。由于用s=1和-1只能表示有2个社团的情况,在多个社团时,我们可以引入记号δ(i,j) ,δ(i,j)=0 表示结点i 和 j 不在同一个社团,δ(i,j)=1 表示结点 i 和 j 在同一个社团。这样计算公式就变成了
其实就是下面的意思:
再来看一下这个式子中各个项的意义:
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的定义可以看做:
在社区内部的边的比例,减去边随机放置时社区内部期望边数的比例。
参考论文Finding community structure in networks using the eigenvectors of matrices
每个结点的度不变,边重新连接,这就需要一个已知每个结点的度,来随机生成图的模型。图生成模型最重要的特征就是两个点i和j之间连边的概率(或者叫边的数目的期望值),记为Pij,那么Pij会满足什么性质呢?
1.每个结点度不变,最终总边数也不会变。因此随机连边后,图中的边数期望值等于原来真实图中的边数
2.对每个节点来说,它的度也不会变,就有
在满足这两个式子的情况下,随机的进行连边。这样在选定了一个点(边的一个端点)后,选另一个点(边的另一个端点)时,会选到结点i的概率,就只与结点i的度ki有关。而一条边的两个端点进行选择的时候都是独立随机的。因此Pij,选到i的概率与ki有关,选到j的概率与kj有关,就可以写成
由于Pij=Pji,因此上面两个函数f是相同的。
根据上面性质中的第二个式子∑jPij=ki,就有
由于∑jf(kj)并不包含i,可以看出f(ki)和ki之间是倍数关系,不妨设
C是常量。代入上面性质的第一个式子