前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CS224w图机器学习(三):Community Structure

CS224w图机器学习(三):Community Structure

作者头像
慎笃
发布2021-09-15 10:34:08
6250
发布2021-09-15 10:34:08
举报
文章被收录于专栏:深度学习进阶

内容简介

本文主要介绍CS224W的第四课,图的社区结构。

CS224W Lecture 4: Community Structure in Networks

上图为CS224W第四讲的内容框架,如下链接为第四讲的课程讲义

1 Introduction

上一讲主要介绍图的模块和结构性角色,如下图,在引入角色的时候,将角色和社区放在一起做比对,角色是网络中具有相似功能的一组节点,重在相似性;社区是相互连接的一组节点,重在连接性。本章便主要探讨网络中的社区(Community)。

我们再看课程里是如何详细的引入社区的。

首先引入概念 信息流(Information Flow):信息在网络中如何流通。 Granovetter教授通过“人们怎么通过社交网络获取求职信息”来研究信息在网络中的流通,人们通常通过熟人获取自己想知道的信息,但不会向自己最亲密的朋友那里去获取信息。 Granovetter从两个角度来定义人们之间的友谊: 1)Structural(结构性):Friendships span different parts of the network. (友谊会扩展到网络的不同部分) 2)Interpersonal(人际交往):Friendship between two people is either strong or weak. (朋友间的友谊有强有弱) 对于不同社会角色/结构性角色之间的关系,Granovetter也提供了两个角度: 1)Structural(结构性):处于同一结构性角色下的社交关系很强(学生和学生的关系),跨越网络不同结构的社交关系相对很弱(学生和教职工的关系)。 2)Information(获取信息):跨越网络不同结构去收集信息,更容易获得一份工作(学生向教职工求助),同一结构性角色下的成员间信息相对冗余(学生们能够了解到的招聘信息大多是类似的) 即更广的关系可以帮助我们获取不同的、新的信息;而关系亲密的人会形成一个圈子,大家获取信息的来源是类似的,获取到的信息是相对冗余的。这种现象也被称为三角闭合Triadic Closure = High clustering coefficient)。

关于关系强弱的度量,我们引入一个新的概念edge overlap

关于Edge overlap的计算公式如下,连接节点

和节点

的edge overlap为,节点

的邻居节点与节点

的邻居节点的交集大小,除以其并集大小。

将图中的边按照edges overlap的大小,红色为从小到大删除,黑色为从大到小删除后,图的最大连通分量随着删除边个数的变化如下图所示。

2 Network Community

上一部分简单引入了社区概念,本部分则详细介绍网络社区。什么是社区?

社区(Community)是内部具有大量连接,而到网络其他部分连接很小的节点集合。 Sets of nodes with lots of internal connections and few external ones (to the rest of the net work).

怎么发现网络中的社区呢?

引入参数模块度(Modularity Q):用来衡量网络社区划分的合理程度。 给定一组网络的社区划分

,对于每个分组

来说,组内edges的数量与预期数量的差异,可以用模块度来衡量。如果这个差值很大,说明这是个很凝聚的团体。

衡量模块度的关键变成寻找计算预期edges的模型。 给定一个包含

个节点,

条边的真实网络

,并基于

重新随机构造新的网络

。与上一章节中随机构造新网络的手段类似。 基于随机构造,我们可知在随机图中,度为

的节点

和度为

的节点

,这两个节点之间存在的边,可由公式计算:

重新构造的网络

,边的条数为:

由此模块度Modularity Q可由如下公式进行计算:

有上述公式可知,模块度Modularity Q也等价于

, 当节点

和节点

同属一个社区时

,否则

。 通常来说,Q越大,网络结构的社区划分效果越好。目前我们已经能够通过模块度来判断社区划分是否可以,那么怎么找到这些社区呢?

3 Louvain algorithm

Louvain社区发现算法,是一种用来划分社区的贪心算法。

Louvain算法包括两个阶段: 1)首先将每个节点都看成一个独立的社区,计算每个节点加入其它社区时的模块度增益

,并将该节点加入到模块度提升最大的社区内,遍历网络中的节点,直到所有节点的社区都不再变化; 2)将每一个社区看成超节点(super node)重新构造网络,超节点之间的边权重,为两个社区之间的所有权重之和。 迭代步骤一和步骤二,直至稳定。 模块度增益

的计算

为社区C内的权重和

为社区C内所有节点的权重和,包含节点在社区内的连接和节点与社区外的连接

为节点

和社区C连接的权重和

为节点

所有连接的权重和 假设节点

原本在社区

,在计算节点

的增益时,还需要计算

的增益。 最终有

。 公式的详细原理如下图。

4 Detecting Overlapping Communities: BigCLAM

Lovain社区发现算法适用于不重叠的社区发现,而我们生活中许多社区都是有重叠的,此时就需要BigCLAM重叠社区发现算法。如下图所示,从邻接矩阵也可以看出重叠社区。

BigCLAM算法过程包含两步

1)基于节点的社区关系,定义一个图的生成模型,比如Community Affiliation Graph Model(AGM)算法; 2)给定一个真实的图,希望AGM算法生成的图尽可能地贴合真实图。

AGM算法生成图的过程

如下图所示,首先给定一组参数

其中

代表节点的个数,

代表社区的个数,

代表成员间的关系,

代表社区

内的节点之间生成边的概率。 如左下图,蓝色和红色部分来自于同一个社区,红色和绿色部分也来自于同一个社区。 当两个节点

来自于社区 A时,节点之间有概率

相连(蓝色内部以及蓝色与红色),此时

。 当两个节点

分别来自于社区 A和社区B,没有交集时(蓝色与绿色节点),此时

。 当两个节点

既来自于社区 A,也来自于社区B时(红色节点与红色节点),此时

基于生成过程,可从预设的社区结构生成随机网络。

上述是从社区结构生成网络的过程,而社区发现是从网络中发现社区结构,即上述AGM生成模型的逆过程。我们已知了网络

,需要找到最为合适的那个二分图模型

,并且得到相关参数。

思想:已知网络

,寻找模型

,使得在模型

的基础之上,

的生成概率最大(类似于极大似然估计)。 如下图所示,解决这个问题,我们需要快速计算生成概率

,并使用梯度下降来优化

的参数。 梯度下降的目标函数如下:

BigCLAM模型的思想也大致相同。只是在节点

和节点

间有边的概率

以及目标函数存在些许差异。BigCLAM模型的设计,可参见下图,梯度下降的方向,则可参见下下图。

BigCLAM的P(u, v)和目标函数

梯度下降与优化

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 内容简介
  • CS224W Lecture 4: Community Structure in Networks
    • 1 Introduction
      • 2 Network Community
        • 3 Louvain algorithm
          • 4 Detecting Overlapping Communities: BigCLAM
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档