什么是社区发现?

      
    朋友要我通俗地讲讲什么是“社区发现”,这下还真觉得有些为难。之前写东西,上来就是概念、术语、公式和算法,这些对于有专业基础的朋友当然没问题,但对于那些没有基础而且也只想知道个大概的朋友显然就不适合了。尝试着写了写,觉得通俗和严谨之间的度还真不容易把握。看来,通俗易懂地表达东西也是门需要花时间修炼的功夫,以后这样的内容还是要多多练习才行。

如果你仔细观察,你会发现,我们的生活中存在着各种各样的网络,如科研合作网络、演员合作网络、城市交通网络、电力网、以及像 QQ、微博、微信这样的社交网络。

这些网络有什么特点呢?我们以大家最熟悉的社交网络来看看。

社交网络的核心是参与其中的用户以及用户之间的关系。因此,我们可以采用图模型来为其进行建模,其中的节点表示社交网络中一个个的用户,而边则表示用户与用户之间的关系,如果想对这些关系强度(或亲密度)进行区分的话,我们还可以为每条边赋予一个权重,权值越大表示关系强度越大(或者越亲密)。

首先给出一个示意图。如果我们研究的是演员合作网络,图中的节点就表示演艺圈的演员,边就表示演员之间的合作关系;如果我们研究的是新浪微博,图中的节点就表示新浪微博注册用户,边就表示用户之间的关注关系。

大家注意,所谓的建模就是将若干相似的事物或场景的共性抽取出来,然后针对该模型来设计相应的算法,从而解决一类问题。

如果仔细看,你会发现这个图包含一定的结构,那就是,其中存在一个一个的节点子集合,在这些子集合的内部,边比较多,而子集合与子集合之间,边比较少。具体将这些节点子集合圈出来,就是这个样子。

这其实跟我们生活中的一些场景是吻合的。比如,考虑一个创意园区里各员工的认识关系,你会发现,一个公司就会对应一个节点子集合,因为同一个公司的人大部分彼此相互认识,而公司与公司之间的人则相互认识的不多。

注意,刚才举的例子中,每一个节点只能属于一个子集合,因为每一个员工只属于一家公司,因此各个节点子集合是互不重叠的。但是,在某些场景下,节点子集合之间可能发生重叠,即同一个节点可能同时属于多个子集合。

我们举一个关于小区大妈组队跳广场舞的例子,一般来说,每个大妈参加活动时,往往会优先选择自己所在小区的广场舞队伍,但是,有些大妈精力比较旺盛,觉得只参加自己小区的队伍还不过瘾,或者她是社交型人士,希望通过跳广场舞认识更多的朋友,那么,她可能会同时参加周边小区的多个广场舞队伍,这样一来,相应的图结构就变成这个样子了。

图中一种颜色就代表一支广场舞大妈队伍,而中间那些涂成彩色的节点则表示同时参与了多个队伍的活跃大妈。不可小觑了这些彩色节点,它们的重要性是不言而喻的。你想,如果小区之间想要搞个广场舞联谊,就可以由她们来组织了,因为她们穿梭于各个小区的广场舞队伍,起着交际纽带的作用。

好了,例子举完了,接下来结合这两个例子给出一些相关的概念,那些内部连接比较紧密的节点子集合对应的子图叫做社区(community),各社区节点集合彼此没有交集的称为非重叠型(disjoint)社区,有交集的称为重叠型(overlapping)社区。网络图中包含一个个社区的现象称为社区结构,区结构是网络中的一个普遍特征。给定一个网络图,找出其社区结构的过程叫做社区发现(community
detection)。

社区发现是一件很有意义的事情。以社交网络为例,社区结构是客观存在的,但某个社区内的某个用户只和那些与其有直接边相连的用户产生互动,殊不知,在这个社区内,他和那些与其没有直接边相连的用户其实也很“近”,如果要做好友推荐,属于同一社区的用户之间应该优先进行推荐。此外,“物以类聚,人以群分”,对一个大型网络调用社区发现算法,其实是对其按照某种标准进行了划分,在此基础上可对每个社区做进一步的发掘。而从计算的角度而言,社区分划相当于分解了任务,起到了降低计算复杂度的作用。

作者: peghoty

出处: http://blog.csdn.net/itplus/article/details/41348651

欢迎转载/分享, 但请务必声明文章出处.

时间: 2024-09-30 07:57:12

什么是社区发现?的相关文章

模块度与Louvain社区发现算法

Louvain算法是基于模块度的社区发现算法,该算法在效率和效果上都表现较好,并且能够发现层次性的社区结构,其优化目标是最大化整个社区网络的模块度. 模块度(Modularity) 模块度是评估一个社区网络划分好坏的度量方法,它的物理含义是社区内节点的连边数与随机情况下的边数只差,它的取值范围是 [−1/2,1),其定义如下: $$Q = \frac{1}{2m}\sum_{i,j}[A_{ij} - \frac{k_ik_j}{2m}]\delta(c_i,c_j)$$ $$\delta(u,

社区发现的学习笔记

社区发现 社团结构与计算机中的图分割和社会学中的分级聚类有密切关系. 分级聚类是寻找网络中社团结构的一类传统算法,根据向网络中添加边还是从网络中移除边,该类算法可分为两类:凝聚方法.分裂方法. 一.基于模块度 **无向无权图:** 模块度(Modularity)是近年常用的一种衡量社团划分质量的标准.基本思想就是把社团划分后的网络与相应的零模型进行比较,来估量实际的网络和随机的网络的差别. 社团内部边的总和:Q(real)=1/2*Sigma(a(ij)*delta(C(i),C(j))) 零模

社区发现(Community Detection)算法(转)

作者: peghoty 出处: http://blog.csdn.net/peghoty/article/details/9286905 社区发现(Community Detection)算法用来发现网络中的社区结构,也可以看做是一种聚类算法. 以下是我的一个 PPT 报告,分享给大家. 从上述定义可以看出:社区是一个比较含糊的概念,只给出了一个定性的刻画. 另外需要注意的是,社区是一个子图,包含顶点和边. 下面我们以新浪微博用户对应的网络图为例,来介绍相应的社区发现算法. 这里在相互关注的用户

社区发现算法问题&&NetworkX&&Gephi

在做东西的时候用到了社区发现,因此了解了一下有关社区发现的一些问题 1,社区发现算法 (1)SCAN:一种基于密度的社团发现算法 Paper: <SCAN: A Structural Clustering Algorithm for Networks>  Auther: Xiaowei Xu, Nurcan Yuruk, Zhidan Feng, Thomas A. J. Schweiger  Conference: SIGKDD 2007 主要概念: 节点相似度定义为两个节点共同邻居的数目与

[转] 社区发现(Community Detection)算法

作者: peghoty 出处: http://blog.csdn.net/peghoty/article/details/9286905 社区发现(Community Detection)算法用来发现网络中的社区结构,也可以看做是一种聚类算法. 以下是我的一个 PPT 报告,分享给大家. 社区是一个子图,包含顶点和边. 下面我们以新浪微博用户对应的网络图为例,来介绍相应的社区发现算法.     这里在相互关注的用户之间建立连接关系,主要是为了简化模型,此时对应的图为无向图. 当然,我们也可以采用

社区发现SLPA算法

社区(community)定义:同一社区内的节点与节点之间关系紧密,而社区与社区之间的关系稀疏. 设图G=G(V,E),所谓社区发现是指在图G中确定nc(>=1)个社区C={C1,C2,...,Cnv},使得各社区的顶点集合构成V的一个覆盖. 若任意两个社区的顶点集合的交际均为空,则称C为非重叠社区(disjoint communities);否则称为重叠社区(overlapping communities). SLPA(Speaker-listener Label Propagation Al

社区发现(Community Detection)算法

作者: peghoty 出处: http://blog.csdn.net/peghoty/article/details/9286905 社区发现(Community Detection)算法用来发现网络中的社区结构,也可以看做是一种聚类算法. 以下是我的一个 PPT 报告,分享给大家. 从上述定义可以看出:社区是一个比较含糊的概念,只给出了一个定性的刻画. 另外需要注意的是,社区是一个子图,包含顶点和边. 下面我们以新浪微博用户对应的网络图为例,来介绍相应的社区发现算法. 这里在相互关注的用户

LabelRank(A Stabilized Label Propagation Algorithm for Community Detection in Networks)非重叠社区发现

最近在研究基于标签传播的社区分类,LabelRank算法基于标签传播和马尔科夫随机游走思路上改装的算法,引用率较高,打算将代码实现,便于加深理解. 一.概念 相关概念不再累述,详情见前两篇文章 二.算法思路 (1)Propagation (2)Inflation (3)Cut off (4)Explicit Conditional Update (5)Stop Criterion 三.A Stabilized Label Propagation Algorithm for Community D

Louvain社区发现算法