社会网络挖掘
大规模图的分析–社区探测
社区网络存在于现实世界中的各行各业,例如:
- 电话网络 。结点代表电话,边的权重由两个结点间的电话数量决定。社区可以是朋友之间形成的,也可以是在同一个公司;
- 邮件网络。结点代表邮件地址,双向均有邮件沟通,可以看作是存在边,社区可以按照前面提及的电话网络来看;
- 合作网络。结点代表作者,边表示作者之间有合作发表过论文。社区是专注于某一特定课题的作者的集合。社区是专注于某一特定课题的作者的集合。也可以将结点看作文章,边看作是文章之间有共同作者。
下图,给出了某社交网络,可以看出有不同的圈子(此处也可以叫做社区):高中同学、大学同学、家庭成员等等
Girvan-Newman
在提出Girvan-Newman算法之前,先引入边阶数(Edge betweenness:Number of shortest paths passing over the edge):通过该边的所有路径中,并且该路径是点与点之间的最短路径,最短路径的数量。下图给出了中间边的介数是16,因为 4 ∗ 4 = 16 4*4=16 4∗4=16,左边4个结点和右边4个结点两两之间可以形成一条边。
算法流程
- 计算每条边的边介数;
- 移除所有边中介数最大的边;
- 重新计算每条边的介数;
- 重复2-3,直到没有边剩下。
下图给出了某个样例的大致分割流程。
Girvan-Newman算法的流程和聚类算法中的层次聚类比较类似,现在的问题有两个
- 计算每条边的边介数;
- 如何选择分割的社区数量;
边介数(betweenness)的计算
边介数的计算过程
- 对该图的每一个结点采取BFS搜索策略
- 自顶向下,计算该节点到其他结点的最短路径的数量
- 自下而上,计算每条边的介数
- 重复2-3,直到所有结点均已被作为起始结点
- 将最后所求得的每条边的介数除以2
此图中,从A结点到B结点的最短路径只有1条,同理A结点到C结点的最短路径也是1条,F结点从B、C结点均可到达,故从A结点到F结点的最短路径的数量是2条。
计算每条边的介数,从下而上进行,计算的规则为: 当 前 结 点 的 v a l u e = 1 + c h i l d e d g e 的 值 当前结点的value=1+child_edge的值 当前结点的value=1+childedge的值
某个结点往上走有多条边,其边的value分配的比例于其所要达到的顶点的值成比例。例如,对于K结点,其value为1,根据I、J值均为3,故将1等分为2份,均为0.5
模块度(Modularity)
为了衡量社区划分的好坏,引入模块度这个概念来评估,具体可以参见维基百科链接Modularity.
Q ( G , S ) = 1 2 m ∑ s ∈ S ∑ i ∈ s ∑ j ∈ s ( A i j − k i k j 2 m ) Q\left(G,S\right)=\frac{1}{2m}\sum_{s\in S}\sum_{i\in s}\sum_{j\in s}\left(A_{ij}-\frac{k_ik_j}{2m}\right) Q(G,S)=2m1s∈S∑i∈s∑j∈s∑(Aij−2mkikj)
其中, S S S是将图 G G G分割后形成的社区的集合;
A i j A_{ij} Aij表示结点 i i i与结点 j j j是否相连,若相连,则 A i j = 1 A_{ij}=1 Aij=1,否则 A i j = 0 A_{ij}=0 Aij=0;
k i k_i ki表示结点 i i i的度;
k i k j 2 m \frac{k_ik_j}{2m} 2mkikj表示结点 i i i与结点 j j j随机随机连接产生的边的数目;
( A i j − k i k j 2 m ) \left(A_{ij}-\frac{k_ik_j}{2m}\right) (Aij−2mkikj):(# edges within group s) – (expected # edges within group s)
谱聚类(Spectral Clustering)
图的划分(Graph Partitioning)
对图进行划分应该达到以下两个效果。
- 子图之间边的数目尽可能少(Minimize the number of between-group connections);
- 子图内部边的数目尽可能多(Maximize the number of within-group connections);
n c u t ( A , B ) = c u t ( A , B ) v o l ( A ) + c u t ( A , B ) v o l ( B ) ncut\left(A,B\right)=\frac{cut\left(A,B\right)}{vol\left(A\right)}+\frac{cut\left(A,B\right)}{vol\left(B\right)} ncut(A,B)=vol(A)cut(A,B)+vol(B)cut(A,B)
其中, c u t ( A , B ) cut\left(A,B\right) cut(A,B)表示子图 A A A与子图 B B B之间的割边的数目;
Cut: Set of edges with only one vertex in a group;
v o l ( A ) vol\left(A\right) vol(A):total weight of the edges with at least one endpoint in A A A;
v o l ( A ) = ∑ i ∈ A k i vol\left(A\right)=\sum_{i \in A}k_i vol(A)=∑i∈Aki;
谱图分割(Spectral Graph Partitioning)
A x = λ x Ax=\lambda x Ax=λx
其中, A A A为图 G G G的邻接矩阵
注意:上述表达式可以理解为对图 G G G中的 n n n个点进行数据降维,用一个特征向量 x x x来描述这张图。
在特征向量 x x x及其相对应的特征值 λ \lambda λ中,令特征向量 x x x的所有子项中,绝对值最大的项为第 t t t项,并且假设第 t t t项为正数(若第 t t t项不是正数,就将特征向量 x x x变为 − x -x −x来处理)。
Proof:
λ x t = ( A x ) t = ∑ y = 1