这一章没完全看完
connection between edge strength and edge structure
edge strength
在social network中可以用两个人之间联系的频率来得到,联系的频率越高,则strength越大,否则越小
edge structure
表示这个edge是处于一个cluster内部,还是处于不同cluster之间
edge overlap
用edge overlap来表示edge structure
Oij=∣(N(i)∩N(j))−{i,j}∣∣(N(i)∪N(j))−{i,j}∣O_{ij}=\frac{| (N(i) \cap N(j)) - \{ i, j \} |}{| (N(i) \cup N(j)) - \{ i, j \} |}Oij=∣(N(i)∪N(j))−{i,j}∣∣(N(i)∩N(j))−{i,j}∣
N(i)N(i)N(i)表示node i 的 neighbor 集合,分母表示两个node所有的neighbor,分子表示两个node的共同neighbor,所以OijO_{ij}Oij表示node i 和 node j 的所有neighbor中共同neighbor的比例,
OijO_{ij}Oij为0到1的值
OijO_{ij}Oij越大,共同neighbor越多,这个edge更可能处在一个network的cluster里
Oij=0O_{ij}=0Oij=0时,the edge is a local bridge
connection
- stronger edge strength 和 OijO_{ij}Oij 大 共同发生
同一个cluster内部的人之间的联系次数更多 - weaker edge strength 和 OijO_{ij}Oij 小 共同发生
不同cluster之间的人联系次数相对更少
examples
- 信息流动更多是通过weak edge来进行的
因为一个cluster内部的信息同质化非常严重,所以cluster之间的交流会交换不同的信息,找工作的信息更多的是从熟人而不是亲密朋友之间得到的 - 如下图为一个mobile call graph,点表示一个手机号,边表示不同手机号之间的联系次数,联系频繁的(红色)边都处于cluster内部,联系少的(黄色)边处于cluster之间
community detection
Community指的是network里的cluster,例如social network里联系紧密的小团体
Modularity QQQ
用来衡量已经被分开的groups of nodes 是否被切分的合理,可以作为community detection的优化目标。
Q∝∑s∈S[(# edges within group s)−(expected # edges within group s)]Q \propto \sum_{s \in S}[(\#\ edges\ within\ group\ s) - (expected\ \#\ edges\ within\ group\ s)]Q∝s∈S∑[(# edges within group s)−(expected # edges within group s)]
SSS为被切分的各个集合
(# edges within group s)(\#\ edges\ within\ group\ s)(# edges within group s)表示实际的集合sss里的edge数量
(expected # edges within group s)(expected\ \#\ edges\ within\ group\ s)(expected # edges within group s)表示类似的random graph里的edge数量的期望
(# edges within group s)−(expected # edges within group s)(\#\ edges\ within\ group\ s) - (expected\ \#\ edges\ within\ group\ s)(# edges within group s)−(expected # edges within group s) 表示实际的edge数量比期望的edge数量多多少,如果大于0,则比期望的多,则community内部联系比较紧密;如果小于0,则比期望的少,则community内部联系不太紧密
Modularity QQQ 整体上衡量的是各个小community内部是否联系很紧密
Configuration Model
就是之前的subgrpah mining里的生成random graph方法
生成random graph时是整个graph一起生成,计算Modularity时是按局部community来计算
给定了graph里要包括mmm条边,mmm条边对应了2m2m2m个edge的endpoint,每个node的degree是给定的,degree代表了node作为endpoint的次数。
生成edge的方法为:每次从2m2m2m个endpoint中随机挑选两个,建立一条edge
edge可以从一个node出发并指向自己;两个node之间也可以有多条edge
the expected num of edge between node i and node j is
ki⋅kj2m=kikj2mk_i \cdot \frac{k_j}{2m}=\frac{k_i k_j}{2m}ki⋅2mkj=2mkikj
kik_iki、kjk_jkj为node i and node j 的degree,mmm为总的node数量
node i的degree为kik_iki,表示要随机挑选kik_iki个 endpoint 和 node iii 构成edge,
总endpoint数量为2m2m2m,node j 作为endpoint的次数为kjk_jkj,则每次挑选到node j 的概率为kj2m\frac{k_j}{2m}2mkj。
node i 要挑选kik_iki次,则node i and node j 之间edge数量的期望为kikj2m\frac{k_i k_j}{2m}2mkikj。
Configuration Model里不存在真实的random的graph,而是用node之间边的期望来代表这个graph的平均情况
Modularity QQQ
Q(G,S)=12m∑s∈S∑i∈S∑j∈S(Aij−kikj2m)Q(G, S)=\frac{1}{2m} \sum_{s \in S} \sum_{i \in S} \sum_{j \in S}(A_{ij} - \frac{k_i k_j}{2m})Q(G,S)=2m1s∈S∑i∈S∑j∈S∑(Aij−2mkikj)
GGG为给定graph,SSS为给定的node partition, AijA_{ij}Aij为adjacency matrix 中的值
AijA_{ij}Aij为实际的node i 和node j 之间的边的数量,kikj2m\frac{k_i k_j}{2m}2mkikj为期望边的数量
在给定的graph的各个node community中,node之间的edge数量相比期望越大,则Q(G,S)Q(G, S)Q(G,S)越大,否则越小
衡量的是各个小的node community中的紧密程度
QQQ的取值范围为[−1,1][-1,1][−1,1],这是因为有12m\frac{1}{2m}2m1做了normalize
QQQ greater than 0.3-0.7 means significant community structure
如果graph的edge有权重,Modularity也可以修改成对应的版本,修改方法为AijA_{ij}Aij改成边的权重,2m2m2m改成graph里所有edge的权重的和
Louvain Algorithm
一种复杂度为O(nlogn)O(n \log n)O(nlogn)的community detection 算法,n为node num
特性
- Provides hierarchical communities
- Fast
- Rapid convergence
- High modularity output
Widely utilized to study large networks
phase 1
only allow local changes to node-communities memberships
先把每个node初始化为独立的community,依次遍历各个node,每个node执行以下操作:
-
比较node的每个neighbor,计算如果node添加到neighbor所在的community 的Modularity Delta
问题: 依次遍历node时,每个node都必须添加到一个community里吗?
-
把node添加到Modularity Delta最大的那个neighbor所在的community
这里的Modularity Delta必须是正的,即把node移动到另一个community后Modularity要增加
一遍又一遍的遍历所有node,直到移动任何一个node都不能再增加Modularity
遍历的对象始终是node,有可能node是一个独立的community然后合并到了另一个community,也有可能从一个community中移除然后添加到了另一个community
这是一种贪心算法
遍历node的顺序不同,最后形成的community也会不同
但是不同的顺序对整体的Modularity影响不大
Modularity Gain
node i 从community D移动到community C时的Modularity Gain:
ΔQ(D→i→C)=ΔQ(D→i)+ΔQ(i→C)\Delta Q(D \rightarrow i \rightarrow C)=\Delta Q(D \rightarrow i) + \Delta Q(i \rightarrow C)ΔQ(D→i→C)=ΔQ(D→i)+ΔQ(i→C)
前后两种partition的Modularity 中只有community D和C是不同的,所以只要计算这两个community的Modularity即可
ΔQ(D→i)\Delta Q(D \rightarrow i)ΔQ(D→i)为原来包括iii的community和后来没有iii的community的Modularity的差
ΔQ(i→C)\Delta Q(i \rightarrow C)ΔQ(i→C)为原来不包括iii的community和后来包括iii的community的Modularity的差
Q(C)=12m∑i,j∈C[Aij−kikj2m]=∑i,j∈CAij2m−(∑i∈Cki)(∑j∈Ckj)(2m)2=∑in2m−(∑tot2m)2Q(C)=\frac{1}{2m}\sum\limits_{i,j \in C} [A_{ij} - \frac{k_i k_j}{2m}] \\=\frac{ \sum_{i,j \in C} A_{ij}}{2m} - \frac{ (\sum_{i \in C} k_i) (\sum_{j \in C} k_j)}{(2m)^2} \\=\frac{ \sum_{in} }{2m} - ( \frac{ \sum_{tot} }{2m} )^2Q(C)=2m1i,j∈C∑[Aij−2mkikj]=2m∑i,j∈CAij−(2m)2(∑i∈Cki)(∑j∈Ckj)=2m∑in−(2m∑tot)2
∑in\sum_{in}∑in∑tot\sum_{tot}∑tot
问题:算一个具体node时为什么要算community所有node的所有edge
问题
- phase 1 时只有node被考虑吗?如果已经没有node了会怎么样?如果neighbor已经属于community了,那当前node是要添加到那个community里吗?
- i添加到C里为什么要让C中每个node的边都加进来?
- 计算community C时的m是什么?是其中所有node的degree的和还是其中所有edge的数量?
- phase 1以后会把所有community抽象成一个node来处理吗?