朋友要我通俗地讲讲什么是“社区发现”,这下还真觉得有些为难。之前写东西,上来就是概念、术语、公式和算法,这些对于有专业基础的朋友当然没问题,但对于那些没有基础而且也只想知道个大概的朋友显然就不适合了。尝试着写了写,觉得通俗和严谨之间的度还真不容易把握。看来,通俗易懂地表达东西也是门需要花时间修炼的功夫,以后这样的内容还是要多多练习才行。
如果你仔细观察,你会发现,我们的生活中存在着各种各样的网络,如科研合作网络、演员合作网络、城市交通网络、电力网、以及像 QQ、微博、微信这样的社交网络。
这些网络有什么特点呢?我们以大家最熟悉的社交网络来看看。
社交网络的核心是参与其中的用户以及用户之间的关系。因此,我们可以采用图模型来为其进行建模,其中的节点表示社交网络中一个个的用户,而边则表示用户与用户之间的关系,如果想对这些关系强度(或亲密度)进行区分的话,我们还可以为每条边赋予一个权重,权值越大表示关系强度越大(或者越亲密)。
首先给出一个示意图。如果我们研究的是演员合作网络,图中的节点就表示演艺圈的演员,边就表示演员之间的合作关系;如果我们研究的是新浪微博,图中的节点就表示新浪微博注册用户,边就表示用户之间的关注关系。
大家注意,所谓的建模就是将若干相似的事物或场景的共性抽取出来,然后针对该模型来设计相应的算法,从而解决一类问题。
如果仔细看,你会发现这个图包含一定的结构,那就是,其中存在一个一个的节点子集合,在这些子集合的内部,边比较多,而子集合与子集合之间,边比较少。具体将这些节点子集合圈出来,就是这个样子。
这其实跟我们生活中的一些场景是吻合的。比如,考虑一个创意园区里各员工的认识关系,你会发现,一个公司就会对应一个节点子集合,因为同一个公司的人大部分彼此相互认识,而公司与公司之间的人则相互认识的不多。
注意,刚才举的例子中,每一个节点只能属于一个子集合,因为每一个员工只属于一家公司,因此各个节点子集合是互不重叠的。但是,在某些场景下,节点子集合之间可能发生重叠,即同一个节点可能同时属于多个子集合。
我们举一个关于小区大妈组队跳广场舞的例子,一般来说,每个大妈参加活动时,往往会优先选择自己所在小区的广场舞队伍,但是,有些大妈精力比较旺盛,觉得只参加自己小区的队伍还不过瘾,或者她是社交型人士,希望通过跳广场舞认识更多的朋友,那么,她可能会同时参加周边小区的多个广场舞队伍,这样一来,相应的图结构就变成这个样子了。
图中一种颜色就代表一支广场舞大妈队伍,而中间那些涂成彩色的节点则表示同时参与了多个队伍的活跃大妈。不可小觑了这些彩色节点,它们的重要性是不言而喻的。你想,如果小区之间想要搞个广场舞联谊,就可以由她们来组织了,因为她们穿梭于各个小区的广场舞队伍,起着交际纽带的作用。
好了,例子举完了,接下来结合这两个例子给出一些相关的概念,那些内部连接比较紧密的节点子集合对应的子图叫做社区(community),各社区节点集合彼此没有交集的称为非重叠型(disjoint)社区,有交集的称为重叠型(overlapping)社区。网络图中包含一个个社区的现象称为社区结构,区结构是网络中的一个普遍特征。给定一个网络图,找出其社区结构的过程叫做社区发现(community
detection)。
社区发现是一件很有意义的事情。以社交网络为例,社区结构是客观存在的,但某个社区内的某个用户只和那些与其有直接边相连的用户产生互动,殊不知,在这个社区内,他和那些与其没有直接边相连的用户其实也很“近”,如果要做好友推荐,属于同一社区的用户之间应该优先进行推荐。此外,“物以类聚,人以群分”,对一个大型网络调用社区发现算法,其实是对其按照某种标准进行了划分,在此基础上可对每个社区做进一步的发掘。而从计算的角度而言,社区分划相当于分解了任务,起到了降低计算复杂度的作用。
作者: peghoty
出处: http://blog.csdn.net/itplus/article/details/41348651
欢迎转载/分享, 但请务必声明文章出处.