这一章没完全看完
connection between edge strength and edge structure
edge strength
在social network中可以用两个人之间联系的频率来得到,联系的频率越高,则strength越大,否则越小
edge structure
表示这个edge是处于一个cluster内部,还是处于不同cluster之间
edge overlap
用edge overlap来表示edge structure
O i j = ∣ ( 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,所以 O i j O_{ij} Oij表示node i 和 node j 的所有neighbor中共同neighbor的比例,
O i j O_{ij} Oij为0到1的值
O i j O_{ij} Oij越大,共同neighbor越多,这个edge更可能处在一个network的cluster里
O i j = 0 O_{ij}=0 Oij=0时,the edge is a local bridge
connection
- stronger edge strength 和
O
i
j
O_{ij}
Oij 大 共同发生
同一个cluster内部的人之间的联系次数更多 - weaker edge strength 和
O
i
j
O_{ij}
Oij 小 共同发生
不同cluster之间的人联系次数相对更少
examples
- 信息流动更多是通过weak edge来进行的
因为一个cluster内部的信息同质化非常严重,所以cluster之间的交流会交换不同的信息,找工作的信息更多的是从熟人而不是亲密朋友之间得到的 - 如下图为一个mobile call graph,点表示一个手机号,边表示不同手机号之间的联系次数,联系频繁的(红色)边都处于cluster内部,联系少的(黄色)边处于cluster之间
community detection
Community指的是network里的cluster,例如social network里联系紧密的小团体
Modularity Q Q Q
用来衡量已经被分开的groups of nodes 是否被切分的合理,可以作为community detection的优化目标。
Q ∝ ∑ s ∈ S [ ( # e d g e s w i t h i n g r o u p s ) − ( e x p e c t e d # e d g e s w i t h i n g r o u p 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)]
S S S为被切分的各个集合
( # e d g e s w i t h i n g r o u p s ) (\#\ edges\ within\ group\ s) (# edges within group s)表示实际的集合 s s s里的edge数量
( e x p e c t e d # e d g e s w i t h i n g r o u p s ) (expected\ \#\ edges\ within\ group\ s) (expected # edges within group s)表示类似的random graph里的edge数量的期望
( # e d g e s w i t h i n g r o u p s ) − ( e x p e c t e d # e d g e s w i t h i n g r o u p 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 Q Q Q 整体上衡量的是各个小community内部是否联系很紧密
Configuration Model
就是之前的subgrpah mining里的生成random graph方法
生成random graph时是整个graph一起生成,计算Modularity时是按局部community来计算
给定了graph里要包括 m m m条边, m m m条边对应了 2 m 2m 2m个edge的endpoint,每个node的degree是给定的,degree代表了node作为endpoint的次数。
生成edge的方法为:每次从 2 m 2m 2m个endpoint中随机挑选两个,建立一条edge
edge可以从一个node出发并指向自己;两个node之间也可以有多条edge
the expected num of edge between node i and node j is
k i ⋅ k j 2 m = k i k j 2 m k_i \cdot \frac{k_j}{2m}=\frac{k_i k_j}{2m} ki⋅2mkj=2mkikj
k i k_i ki、 k j k_j kj为node i and node j 的degree, m m m为总的node数量
node i的degree为 k i k_i ki,表示要随机挑选 k i k_i ki个 endpoint 和 node i i i 构成edge,
总endpoint数量为 2 m 2m 2m,node j 作为endpoint的次数为 k j k_j kj,则每次挑选到node j 的概率为 k j 2 m \frac{k_j}{2m} 2mkj。
node i 要挑选 k i k_i ki次,则node i and node j 之间edge数量的期望为 k i k j 2 m \frac{k_i k_j}{2m} 2mkikj。
Configuration Model里不存在真实的random的graph,而是用node之间边的期望来代表这个graph的平均情况
Modularity Q Q Q
Q ( G , S ) = 1 2 m ∑ s ∈ S ∑ i ∈ S ∑ j ∈ S ( A i j − k i k j 2 m ) 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)
G G G为给定graph, S S S为给定的node partition, A i j A_{ij} Aij为adjacency matrix 中的值
A i j A_{ij} Aij为实际的node i 和node j 之间的边的数量, k i k j 2 m \frac{k_i k_j}{2m} 2mkikj为期望边的数量
在给定的graph的各个node community中,node之间的edge数量相比期望越大,则 Q ( G , S ) Q(G, S) Q(G,S)越大,否则越小
衡量的是各个小的node community中的紧密程度
Q Q Q的取值范围为 [ − 1 , 1 ] [-1,1] [−1,1],这是因为有 1 2 m \frac{1}{2m} 2m1做了normalize
Q Q Q greater than 0.3-0.7 means significant community structure
如果graph的edge有权重,Modularity也可以修改成对应的版本,修改方法为 A i j A_{ij} Aij改成边的权重, 2 m 2m 2m改成graph里所有edge的权重的和
Louvain Algorithm
一种复杂度为 O ( n log n ) 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)为原来包括 i i i的community和后来没有 i i i的community的Modularity的差
Δ Q ( i → C ) \Delta Q(i \rightarrow C) ΔQ(i→C)为原来不包括 i i i的community和后来包括 i i i的community的Modularity的差
Q ( C ) = 1 2 m ∑ i , j ∈ C [ A i j − k i k j 2 m ] = ∑ i , j ∈ C A i j 2 m − ( ∑ i ∈ C k i ) ( ∑ j ∈ C k j ) ( 2 m ) 2 = ∑ i n 2 m − ( ∑ t o t 2 m ) 2 Q(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} )^2 Q(C)=2m1i,j∈C∑[Aij−2mkikj]=2m∑i,j∈CAij−(2m)2(∑i∈Cki)(∑j∈Ckj)=2m∑in−(2m∑tot)2
∑ i n \sum_{in} ∑in ∑ t o t \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来处理吗?