本发明涉及并行计算与社交网络领域,更具体地,涉及一种面向大规模复杂网络的密集可重叠社区划分方法。
背景技术:
近年来,随着大型社交网络的兴起(比如facebook,twitter和微博),社区挖掘(communitydetection)逐渐引起了学术界和产业界的广泛关注。社区挖掘的目标在于从抽象的网络之中,挖掘出具有高内聚低耦合的社交圈子,这些圈子可能是稠密的并且是可重叠的。目前,facebook已经有着超过20亿的每月活跃用户,如此之多的用户构建了一个庞大的社交网络。社区挖掘可以带来很多收益,比如facebook可以给有着相同兴趣爱好的圈子内的成员推荐朋友;amazon可以根据其货物与用户组成的网络,挖掘出具有相似购买兴趣的圈子,给圈子内用户推荐商品;在金融银行之中,可以进行社区挖掘,对圈子内的用户进行风险评估和用户信用评测。
但是,目前社区挖掘研究之中,还存在着许多的挑战和不足。一是要解决大型网络的计算复杂度问题,已有的研究认为,在庞大的社交网络之中挖掘出具有高内聚低耦合的社区圈子,需要设计具有较低复杂度的算法,因此需要设计良好的启发式算法;二是在密集的可重叠社区的挖掘研究之中,已有的研究经常要假设已经知道挖掘的社区的数目,但是这个数目一般是很难估计的,只能凭经验预估,具有很大的随意性;三是已有的研究之中,研究者经常将网络抽象的大型图,切割成若干个小图,这样会丢失原有图的信息,虽然有一些研究探索如何最小化图的丢失信息,切割成若干分离的图,但是总会丢失原有图的有用信息。
技术实现要素:
本发明提供了一种面向大规模复杂网络的密集可重叠社区划分方法,该方法能够有效挖掘出密集的可重叠的社区圈子,具有较低的算法复杂度,无需提前预估社区圈子的数目,且不需要将大型图切割成若干的小图,这样就不会引起原有图的信息丢失问题。
为实现以上发明目的,采用的技术方案是:
一种面向大规模复杂网络的密集可重叠社区划分方法,包括以下步骤:
s1.将大型网络抽象成一个无向图,初始化系统参数,包括设置初始社区圈子集合为空集,设置迭代停止条件;
s2.遍历还没有被访问过的节点,并将该节点设置为社区圈子的种子,从该节点出发进行扩展圈子;并使用优先队列来维护该节点的可扩展的节点集合,该优先队列维护邻居节点,并且不断更新;
s3.不断扩展该节点,当社区圈子的导率无法再减小或者已达到迭代停止条件时,社区扩展完毕,将社区圈子加入到社区圈子集合;
s4.判断所有节点是否都已经访问完毕,如果没有,跳到步骤s2,否则进入s5;
s5.输出社区圈子集合,算法结束。
与现有技术相比,本发明的有益效果是:
本发明提供的方法能够有效挖掘出密集的可重叠的社区圈子,具有较低的算法复杂度,无需提前预估社区圈子的数目,且不需要将大型图切割成若干的小图,这样就不会引起原有图的信息丢失问题。
附图说明
图1为方法的流程示意图。
具体实施方式
附图仅用于示例性说明,不能理解为对本专利的限制;
以下结合附图和实施例对本发明做进一步的阐述。
实施例1
首先使用g=(v,e)抽象化表示一个网络,该网络由无向边组成,其中v表示网络之中节点的结合,e表示网络之中边的集合。如果两个节点u,v∈v,如果这两个节点之间存在边,那么可以表示为(u,v)∈e。使用ωuv来表示节点之间的权重,本发明主要考虑的是无向图,因此wuv=1。
本发明使用s来表示若干节点的集合,并且定义ms表示s之中的边的权重,那么有:
定义s的割边的权重为cs,那么cs定义为:
定义n(s)为s的邻居节点的集合,对于一个邻居节点u∈n(s),可以定义节点u的外向权重为:
以及节点u的内向权重为:
在已有的社区挖掘之中,存在着很多的指标,其中导率(conductance)和模块度(modularity)是较为广泛接受的指标。在本发明提供的方法之中,采用conductance这个指标作为评估函数。定义集合s的conductance为φ(s):
根据conductance的定义,需要使得圈子有着更高的紧密度或联系性,就需要不断减小conductance的大小。
因此,对于一个集合s,本发明判定它是一个社区的条件在于:不能继续增加一个邻居节点使得它的conductance更小,也就是说对于
φ(s)≤φ(s′)and|s′|≤|s|+1iffs=s′,
下面结合图1来解释算法的主要步骤,具体步骤如下:
(step1)将大型网络抽象成一个无向图,初始化系统参数,包括设置初始社区圈子集合为空集,设置迭代停止条件。
(step2)遍历还没有被访问过的节点,并将该节点设置为社区圈子的种子,从该节点出发进行扩展圈子。并使用优先队列来维护该节点的可扩展的节点结合,该优先队列维护邻居节点,并且不断更新。
(step3)不断扩展该节点,当社区圈子的导率(conductance)无法再减小或者已达到迭代停止条件时,社区扩展完毕,将社区圈子加入到社区圈子集合。
(step4)判断所有节点都已经访问完毕,如果没有,跳到step2,否则进入step5
(step5)输出社区圈子集合,算法结束。
以下部分讲述算法的推导过程和理论基础。
本发明首先证明两个定理,这是本发明方法的理论基础。
定理1:如果集合s是v的子集,如果
φ(s)<φ(s∪{u})。
证明:根据(2-6),可以得到:
让s′=s∪{u},(2-2)表明cs<cs′,同时(2-1)表明ms=ms′,从而可以得到以下推导:
从定理1可得知,如果想要使得conductance更小,节点的非邻居节点,不应该被加入到社区之中。
定理2:如果集合s是v的子集,并且u不是集合s的节点,那么定义:
那么可得到:
证明:首先使得u∈v\s,可以得到s′=s∪{u},可以得到以下推导:
假设
φ(s)≥φ(s′),(2-12)
有:
可以得到:
直接根据(2-6)来判断集合s是否为一个社区,是很困难的,那么接下来根据定理1和定理2,用以下的条件来判断一个结合s是否为一个社区:如果
其核心原理在于,从集合s的邻居节点之中寻找可以使得conductance变小的节点,如果集合s不能被扩充,那么集合s就是一个社区。
结合以上推导过程,本发明设计了一种面向大规模复杂网络的密集的可重叠社区划分方法,算法的伪代码如下所示:
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。