Stanford cs224w课程笔记:之前提到图中节点具有扮演不同角色,而角色的概念和社区互补,社区突出的是一个具有密切联系和相似特性的节点集合。本文涉及了社区的定义和量化方式,并介绍了两种进行社区聚类的算法。

目录

  • Community
  • Configuration Model
  • Louvain Algorithm
  • BigCLAM

Community

之前讲到了网络中节点扮演不同角色,而角色这个概念和社区互补,那么接下来就讨论下社区这个概念。

以找工作为例,曾经学者 Granovetter 调查过人们的工作是由谁介绍的,结果很意外。大部分人的工作是由“熟人”,或者说关系并不是很密切的人介绍的。然后 Granovetter 分析后提出了他的解释:这种“熟人”可能涉及整个社交网络很广泛的区域 (普遍来说通过 \(6.6\)

  1. 结构上连接紧密的边的社会性更强;跨度大的边连接了网络不同的两个或多个领域反而社会性不稳定
  2. 从信息传播的角度来看,跨度大的边能传递不同领域的信息,在找工作方面更有利;而结构上连接密的边过于冗余因此无法提供新的信息

Granovetter 的这个理论在后来电话网络中得到了印证,即连接更强的边一般都有更频繁的电话联络。这里提到一个 edge overlap 需要记录一下,它衡量了两个点间连接的紧密程度。当某条边是 local bridge 时,重叠率为 \(0\)。

社区架构一般是怎样 社区结构图_社区架构一般是怎样

那如果我们按重叠率从小到大来移除边,那整个网络会很快变成不相连的几个部分,也就是说网络的最大相连的部分大小会很快缩小。如此一来我们就可以断定这个网络里存在不同的社区。那么给出社区的定义:包含大量内部连接和少量外部连接的节点集合。一个比较经典的社团网络是 Zachary 的 Karate club network

给出具有明显社区的网络的邻接矩阵,按一定顺序排列节点可以明显看出有分块的趋势。


社区架构一般是怎样 社区结构图_邻接矩阵_02


Louvain Algorithm

社区架构一般是怎样 社区结构图_权重_03

下图是这个计算式的 intuition [1]

社区架构一般是怎样 社区结构图_迭代_04

具体伪码有点长就不贴了,但需要说明一点。在移动了节点的社区类型后社区结构变了,看起来需要重新数边什么的,然而可以根据改变了的节点的信息更新社区信息,因此只是简单的加减法而不需要重新数。

这里学生提到一个问题,就是什么时候结束算法?这里我们其实不需要手动中止,因为 Louvain 保证收敛,所以只要让它跑完就行。每迭代一次都会输出一次 modularity,而我们只需要取 modularity 最大的那一次迭代就能确定多少社区合适,并从而获取社区的聚类。一般来说算法最后都会收敛到剩下两个社区。
另一个学生提问:这个算法在多大程度上收敛到最优解。这个问题 Jure 的回答是不知道,但应该不差。

BigCLAM

Louvain 虽然好处多多应用也广,但有个缺陷,它只能给每个节点分配一个社区。然而现在社会结构复杂,一个人可能参加多个社团或属于多个社区,这样就是 overlap 的问题。用邻接矩阵来表示更直观

社区架构一般是怎样 社区结构图_权重_05

社区架构一般是怎样 社区结构图_社区架构一般是怎样_06

社区架构一般是怎样 社区结构图_迭代_07

社区架构一般是怎样 社区结构图_权重_08