Loading

【人工智能】社区发现:社区结构、层次聚类、k-clique算法

社区发现1:社区结构、层次聚类、k-clique算法

什么是社区结构

社区结构

在图中,节点与节点之间的连接往往呈现某种特征:若干节点之间的连接比较紧密,如果把这些连接紧密的节点叫做一个社区,那么我们会发现,社区之内的节点边很密集,而社区与社区之间的连接比较稀疏。

复杂的社区结构

社区结构可能非常复杂,社区与社区之间可以完全没有交集,也可能有交集甚至大的社区可能包含整个小社区。

传统算法:层次聚类

如何计算两个节点之间的距离?

考虑节点之间的独立路径:

独立路径

途径 (Walk)是图中节点与边交替的序列,从一个节点开始,到一个节点结束,其中每条边与紧邻的节点相关联。

路径 (Path)是节点各不相同的途径。

如果两个路径之间所有节点都不相同,这两个路径相互独立。

两个节点之间独立路径的数量可以作为两个节点之间的距离,因为独立路径数量越多,说明节点连接越紧密。

考虑节点之间的所有路径:

\[W = \sum_{L=0}^{\infin} \left(\alpha A \right) ^ L = [I - \alpha A]^{-1} \]

其中,\(\alpha\)是衰减因子,越长的路径,说明两个节点之间的关联越小。

知道如何计算两个节点之间的距离后,就可以使用层次聚类算法来对节点分类。

模块度 Modularity

模块度是评价社区划分好坏的一个指标,一般用 Q 表示。

我们前面说了,社区的内部边比较密集,而社区之间边比较稀疏。那么我们使用原图节点随机生成一个图,在原图中,社区内部的边应该比随机图中的边更多(类似聚类算法中的内聚度),计算这个差值,并对所有社区求和,就可以衡量社区分类的好坏。

生成的图和原图具有相同的节点和相同的边数,也就有相同的度数,对于随机生成的图,节点 \(v_i\)\(v_j\) 之间边数的期望为 \(\frac{d(v_i) d(v_j)}{\sum_{v_k \in \mathcal{G}} d(v_k)}\),模块度的计算公式为:

\[Q = \frac{1}{2 \sum_{v_k \in \mathcal{G}} d(v_k)} \sum_{s \in S} \sum_{v_i \in \mathcal{s}} \sum_{v_j \in \mathcal{s}} \left(A_{ij} - \frac{d(v_i) d(v_j)}{\sum_{v_k \in \mathcal{G}} d(v_k)} \right) \]

分母是为了把 Q 进行归一化,当 \(0.3 \to 0.7 < Q\) 一般认为社区划分得较好。

但是,模块度只能评价社区与社区之间没有交集和包含的情况。

边中心性

和节点中心性一样,边中心性评价图中一条边的重要程度,所谓边的重要程度,就是说,如果一条边很重要,那么从图中删除这条边,那么图中很多节点之间的距离就会增加。

一个连通图中,边的 Betweenness 中心性就是图中通过这条边的所有最短路的数量。

由于社区与社区之间的边非常稀疏,我们知觉上可以知道,社区与社区之间的边中心性就很高。

我们计算图中所有边的中心性,从大到小排序,删除中心性最高的边,如果破坏了原图的连通性,形成了多个连通区域,那么这些区域就是可能的社区,在每个连通区域内继续进行这样的算法,我们可以得到不同的社区,这样得到的社区可能相互包含。

但是这个算法的复杂度实在太高了。

基于 BFS 的边中心性算法

边中心性算法

从图中任意一个节点开始进行 BFS,并且生成 BFS 树。

BFS树

从上至下,计算到达每个节点的路径数:

边中心性算法

从下往上计算每条边的得分:

边得分的计算

对于图中所有的节点,进行 BFS,计算每种情况下边得分,每条边的得分相加除以二,就是每条边的 Betweenness 中心性。

团 Clique

定义 (团, Clique) 图 G 中的一个团,是所有节点的一个子集,在子集中,任意两个节点都有图 G 中的一条边连接。

定义 (极大团) 对于一个团,如果从图 G 中再加入任意一个节点,团的性质不再满足,那么这个团就是极大团。

定义 (最大团) 图 G 中节点数最多的团就是最大团。

寻找极大团的基础算法:

寻找极大团

这个算法冗余度很高,使用剪枝可以降低冗余度。

使用团进行社区发现,社区与社区之间可以有交集。

k-clique 算法

k-clique 就是大小为 k 的团,如果两个 k-clique 之间共享了 k-1 个节点,那么称这两个 k-clique 相邻。

相邻的若干 k-clique 合并构成一个 k-cliques,一个 k-cliques 可以视作一个社区。

算法:

k-clique

首先找到图中所有极大团,图中,每一种颜色代表一个极大团。

构建如图所示的矩阵,矩阵中的对角线元素代表相应团的节点数,其他元素代表两个团共享的节点数。

以 k=4 为例,矩阵中所有小于 k-1=3 的元素清零,否则置1。

对角线元素为1的团保留,其余的删去。若两个不同的团对应的矩阵元素为1,则合并两个团。

参考视频

参考文献

  • M. E. J. Newman. Modularity And Community Structure In Networks[J], Proceedings of the National Academy of Sciences of the United States of America, 2006, 103(23): 8577-8582.
posted @ 2023-03-01 13:07  杨谖之  阅读(879)  评论(0编辑  收藏  举报