一种重叠社区集合质量度量指标的计算方法及装置与流程

文档序号:16089488发布日期:2018-11-27 22:50阅读:251来源:国知局

本发明属于计算机技术领域,尤其涉及一种重叠社区集合质量度量指标计算方法及装置。



背景技术:

一般情况下,社交网络图可以抽象为节点和边构成的集合,其中节点表示网络中的个体,而边表示个体与个体之间的某种关联关系。社交网络图具有社区结构,其中,社区是由网络图中紧密连接节点构成,社区之间则通过稀疏的节点进行连接。社区发现即为对一个网络进行社区结构的刻画和划分,社区发现的结果则被称为社区集合。若社区集合中的节点仅属于一个社区,则该社区集合则被称为非重叠社区集合,否则被称为重叠社区集合。需要理解的是,通过不同的社区发现算法产生的社区集合是不同的,获知某一算法得到的社区集合与标准社区集合之间相似性或差异性,可通过计算相应的社区集合质量度量指标进行度量。对于重叠社区集合,可以通过Measures based on Mutual Information(基于交互信息的度量)这类指标进行度量,在现有的算法中,仅能通过串行算法计算得到该类度量指标。但是随着经济的快速发展和互联网2.0的到来,网络规模不断的增长,社区集合的规模也随之增长,通过串行算法计算得到的度量指标已经不适用于度量现有的大规模社区集合,因此,提供一种适用于大规模社区集合的度量指标计算方法是亟需解决的。



技术实现要素:

本发明的主要目的在于提供一种重叠社区集合质量度量指标计算方法及装置,旨在解决现有算法不适用于大规模社区集合质量度量指标计算的技术问题。

本发明提供的一种重叠社区集合质量度量指标计算方法包括:

步骤1、获取社区集合X={X1,X2,...XK}、Y={Y1,Y2,...YK'},及包含社区集合X、Y中各社区的顶点集合V={v1,v2,...vn};所述K、K'、n分别表示社区集合X、Y以及顶点集合V中的元素个数;

步骤2、根据所述顶点集合V={v1,v2,...vn}中的每个顶点vi,分别遍历社区集合X={X1,X2,...XK}、Y={Y1,Y2,...YK'}中的各社区,记录各顶点vi在社区集合X、Y中所属社区的标签,得到标签集合ListXid[i]、ListYid[i],i为大于0小于n的整数;

步骤3、根据DicList[i]=ListXid[i]×ListYid[i],构建对应于每个顶点vi的社区标签笛卡尔乘积数据集DicList[i];

步骤4、按照元素类型(key,value),将各顶点vi对应的((DicList[i][j].1,0),DicList[i][j].2)、((DicList[i][j].2,1),DicList[i][j].1)元素添加至社区标签数据集合LidList,所述key为(key,value)类型的复合key;所述j为社区标签笛卡尔乘积数据集DicList[i]中元素的标签;

步骤5、基于贪心算法和负载均衡,对所述社区标签数据集合LidList进行切分,并将切分得到的元素分发至多个进程;由各进程根据分发得到的元素进行运算处理,得到计算各指标的所需数值;

步骤6、将所述各进程的所述各指标相关数值发送至单一进程,由所述单一进程进行运算,输出所述社区集合X、Y的度量指标。

可选的,在步骤5中,所述基于贪心算法和负载均衡,对所述社区标签数据集合LidList进行切分,并将切分得到的元素分发至多个进程的步骤包括:

构建各进程对应的新建社区标签数据集合NewLidList;

基于贪心算法和负载均衡,将所述社区标签数据集合LidList进行划分至各进程对应的新建社区标签数据集合NewLidList。

可选的,在步骤5中,所述由各进程根据分发得到的元素进行运算处理,得到计算各指标的所需数值的步骤包括:

将所述新建社区标签数据集合NewLidList中的各元素对key按字典序排序,并统计同一key中,不同value出现的次数;

根据所述新建社区标签数据集合NewLidList中的元素以及所述元素个数进行运算处理,得到计算各指标的所需数值。

进一步地,本发明还提供了一种社区集合质量度量指标计算装置,所述社区集合质量度量指标计算装置包括处理器、存储器及通信总线;

所述通信总线用于实现处理器和存储器之间的连接通信;

所述处理器用于执行存储器中存储的社区集合质量度量指标计算程序,所述社区集合质量度量指标计算程序包括:

获取模块,用于获取社区集合X={X1,X2,...,XK}、Y={Y1,Y2,...,YK'},及包含社区集合X、Y中各社区的顶点的集合V={v1,v2,...,vn};所述K、K'、n分别表示社区集合X、Y以及顶点集合V中的元素个数;

处理模块,用于根据所述顶点集合V={v1,v2,...,vn}中的每个顶点vi,分别遍历社区集合X={X1,X2,...,XK}、Y={Y1,Y2,...,YK'}中的各社区,记录各顶点vi在社区集合X、Y中所属社区的标签,得到标签集合ListXid[i]、ListYid[i],i为大于0小于n的整数;

构建模块,用于根据DicList[i]=ListXid[i]×ListYid[i],构建对应于每个顶点vi的社区标签笛卡尔乘积数据集DicList[i];

添加模块,用于按照元素类型(key,value),将各顶点vi对应的((DicList[i][j].1,0),DicList[i][j].2)、((DicList[i][j].2,1),DicList[i][j].1)元素添加至社区标签数据集合LidList,所述key为(key,value)类型的复合key;

分发模块,用于基于贪心算法和负载均衡,对所述社区标签数据集合LidList进行切分,并将切分得到的元素分发至多个进程;

运算模块,用于将所述各进程的所述各指标相关数值发送至单一进程,由所述单一进程进行运算,输出所述社区集合X、Y的度量指标。

可选的,分发模块还用于构建各进程对应的新建社区标签数据集合NewLidList;

基于贪心算法和负载均衡,将所述社区标签数据集合LidList进行划分至各进程对应的新建社区标签数据集合NewLidList。

可选的,分发模块还用于将所述新建社区标签数据集合NewLidList中的各元素对key按字典序排序,并统计同一key中,不同value出现的次数;

根据所述新建社区标签数据集合NewLidList中的元素以及所述元素个数进行运算处理,得到计算各指标的所需数值。

有益效果

本发明提供一种重叠社区集合质量度量指标计算方法、装置,通过获取社区集合X、Y中各社区中的元素得到顶点集合V,根据顶点集合V中各顶点vi,分别遍历社区集合X、Y,记录各顶点vi在社区集合X、Y中所属社区的标签,得到标签集合ListXid[i]、ListYid[i],并构建社区标签笛卡尔乘积数据集DicList[i],之后基于贪心算法和负载均衡,将DicList[i]集合中的元素切分并分发至各个进程,由各进程运算处理得到计算各指标的所需数值,最后合并各指标相关数值至单一进程进行运算,得到关于社区集合X、Y的度量指标。由于该社区集合质量度量指标计算方法采用并行算法,从而可加速社区集合质量度量指标的运算速度,同时通过该社区集合质量度量指标计算方法计算出的重叠社区集合质量度量指标更加丰富,从而适用于大规模社区集合质量度量指标的计算。

附图说明

下面将结合附图及实施例对本发明作进一步说明,附图中:

图1为本发明实施例提供的重叠社区集合质量度量指标计算方法流程图;

图2为本发明实施例提供的重叠社区集合质量度量指标计算方法与现有度量指标计算方法,在不同数据上NMI_MAX指标运行时间的比较示意图;

图3为本发明实施例提供的重叠社区集合质量度量指标计算装置的结构示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

在介绍本发明社区集合质量度量指标的计算方法之前,先在此对各个指标进行介绍:需要理解的是,社区集合的度量指标分为非重叠社区集合质量度量指标和重叠社区集合质量度量指标,其中,非重叠社区集合质量度量指标分为Measures based on Counting Pairs,Measures based on Cluster Matching和Measures based on Mutual Information三类,重叠社区集合质量度量指标则只有Measures based on Mutual Information一类,下面将对重叠社区集合质量度量指标的度量指标进行介绍:

需要理解的是,社区集合X={X1,X2,...,XK}、Y={Y1,Y2,...,YK'}中的元素Xk、Yk'分别表示社区集合X、Y中的各个社区,其中K、K'分别表示社区集合X、Y中元素的个数,即社区的个数。集合社区集合X、Y中各个社区的顶点vi可以得到顶点集合,以V={v1,v2,...,vn}表示,其中n表示顶点集合V中元素的个数,即顶点的个数,i为大于0小于n的整数。

对于重叠社区集合的度量,有两个基于NMI的指标,NMI_LFK和NMI_MAX,具体的:

1.1、NMI_LFK指标:

该指标涉及的计算公式如下:

H(Xr)=h(a+b,n)+h(c+d,n)

a=|V-(Xr∪Ys)|

b=|Ys-Xr|

c=|Xr-Ys|

d=|Xr∩Ys|

需要理解的是,如果社区Xr和Ys完全一样,则H(Xr,Ys)=H(Ys),此时H(Xr|Ys)=0;如果社区Xr和Ys互补,即且Xr∪Ys=V,此时也存在H(Xr|Ys)=0。为了避免这种情况,重新定义条件熵H*(Xr|Ys),条件熵H*(Xr|Ys)越小,表示社区Xr和Ys与接近。进一步的,将社区集合Y中与社区Xr最接近的条件熵定义为H(Xr|Y)。

1.2、NMI_MAX指标:

对NMI_LFK指标进行改造,具体包括:定义社区集合的条件熵而无需归一化,定义社区集合的熵H(X)以及社区集合X和Y之间的互信息I(X:Y),其具体的计算公式如下:

将NMI_MAX定义为:

基于上述各度量指标的计算公式,提出本发明方法各个实施例。

第一实施例

现有计算重叠社区集合质量度量指标的计算方法有两种,包括mutul3(NMI_LFK提出者设计的算法)和onmi(NMI_MAX提出者设计的算法),mutul3可计算NMI_LFK,onmi可同时计算NMI_LFK和NMI_MAX。但是这些算法均是串行计算。基于此,本发明新提出了一种重叠社区集合质量度量指标的计算方法MPI-POCMC(MPI-Parallel Overlapping Community Metric Computation,基于MPI标准的并行社区度量计算),该算法是并行分布式框架的算法,相比现有的算法,本发明的计算方法速度更快。

本发明第一实施例所提供非重叠社区集合质量度量指标的计算方法的流程图可参见图1,具体包括:

步骤1、获取社区集合X={X1,X2,...XK}、Y={Y1,Y2,...YK'},及包含社区集合X、Y中各社区的顶点集合V={v1,v2,...vn};所述K、K'、n分别表示社区集合X、Y以及顶点集合V中的元素个数。

需要理解的是,社区集合的数据是以文件存储的,因此在获取到社区集合后,可以直接获取到社区集合中,各社区的顶点,因此可以直接获取到顶点集合V。在该步骤中,所述K、K'、n分别表示社区集合X、Y以及顶点集合V中的元素个数。

步骤2、根据所述顶点集合V={v1,v2,...vn}中的每个顶点vi,分别遍历社区集合X={X1,X2,...XK}、Y={Y1,Y2,...YK'}中的各社区,记录各顶点vi在社区集合X、Y中所属社区的标签,得到标签集合ListXid[i]、ListYid[i],i为大于0小于n的整数。

由于社区集合X、Y是重叠社区集合,即一个顶点不只属于一个社区,因此一个顶点在将会出现在社区集合中的多个社区中,该顶点在社区集合X、Y中所属社区的标签不仅有一个而为多个,对应于该顶点在社区集合X、Y中所属社区的标签,将得到标签集合ListXid[i]、ListYid[i]。

步骤3、根据DicList[i]=ListXid[i]×ListYid[i],构建对应于每个顶点vi的社区标签笛卡尔乘积数据集DicList[i]。

在此举例说明步骤3,若步骤2中得到顶点v0的标签集合分别为ListRid[0]={1,2},ListSid[0]={1},则根据DicList[i]=ListXid[i]×ListYid[i],将得到顶点v0的社区标签笛卡尔乘积数据集DicList[0]={(1,1),(2,1)}。

步骤4、按照元素类型(key,value),将各顶点vi对应的((DicList[i][j].1,0),DicList[i][j].2)、((DicList[i][j].2,1),DicList[i][j].1)元素添加至社区标签数据集合LidList,所述key为(key,value)类型的复合key;所述j为社区标签笛卡尔乘积数据集DicList[i]中元素的标签。

需要理解的是,j为社区标签笛卡尔乘积数据集DicList[i]中元素的标签,由于社区标签数据集合LidList的元素类型为(key,value),因此将DicList[i][j].1、DicList[i][j].2分别表示DicList[i]集合中,第j个元素的key值和value值。承接上列,顶点v0对应的社区标签数据集合LidList={((1,0),1),((1,1),1),((2,0),1),((1,1),2)}。

步骤5、基于贪心算法和负载均衡,对所述社区标签数据集合LidList进行切分,并将切分得到的元素分发至多个进程;由各进程根据分发得到的元素进行运算处理,得到计算各指标的所需数值。

具体的,该步骤5中,基于贪心算法和负载均衡,对所述社区标签数据集合LidList进行切分,并将切分得到的元素分发至多个进程的步骤包括:

构建各进程对应的新建社区标签数据集合NewLidList;

基于贪心算法和负载均衡,将所述社区标签数据集合LidList进行划分至各进程对应的新建社区标签数据集合NewLidList。

其中,步骤5由各进程根据分发得到的元素进行运算处理,得到计算各指标的所需数值的步骤包括:

将所述新建社区标签数据集合NewLidList中的各元素对key按字典序排序,并统计同一key中,不同value出现的次数;

根据所述新建社区标签数据集合NewLidList中的元素以及所述次数进行运算处理,得到计算各指标的所需数值。

可以理解的是,在MPICH编程模型中,一个算法程序拥有多个进程,每个进程可以独立的处理数据。在本实施例中步骤5切分及分发的过程为:算法程序中的各进程构建其NewLidList,并独立的通过Network File System(NFS,网络文件系统)读取LidList中所有的元素,之后各进程判断LidList中的元素是否符合贪心算法和负载平衡规则,将符合的元素加入进程的NewLidList中。每个进程将NewLidList中的各个元素对key按字典序降序排序,并计数相同元素的个数,并进一步的对NewLidList中的元素以及计算得到的相同元素的个数进行运算处理,得到计算各指标的所需数值。

一般情况下字典序指按照字母顺序,或者数值小大顺序进行排列,本发明实施例中所述的字典序为数字小大顺序进行排序。社区标签数据集合LidList中的元素类型为(key,value),因此此处的对key按字典序降序排序的含义为:将元素的key值按照数值小大顺序进行降序排列。需要注意的是,社区标签数据集合LidList中元素类型的key为(key,value)类型的复合key,在排序时是依次对复合key,即(key,value)中的key、value进行排序。

在排序之后,统计具有相同复合key的元素的个数,最后根据NewLidList中的元素以及元素个数进行运算处理,得到计算各指标的所需数值。该处计算得到计算各指标的所需数值的算法可根据现有的计算算法计算得到,在此不再赘述。需要理解的是,该处的各指标相关数值表示一个进程根据NewLidList中的元素而计算得到的多个指标相关数值,该处的指标相关数值表示计算度量指标所需要的数值

步骤6、将所述各进程的所述各指标相关数值发送至单一进程,由所述单一进程进行运算,输出所述社区集合X、Y的度量指标。

通过步骤5的计算,各个进程将能计算出多个指标相关数值,此时将各进程计算得到计算各指标的所需数值发送至单一进程,最后由单一进程按照预定算法进行计算,得到社区集合X、Y的度量指标。

参见图2,图2展示了本发明实施例提出的算法与现有算法mpi-dcs和onmi,mutual3在不同重叠社区数据集上计算得到NMI度量指标的比较,纵坐标是对数标度(log scale),横坐标表示不同非重叠社区数据集,包括:

DBLP:数据库系统与逻辑编程数据集。

Amazon:亚马逊数据集。

Youtube:Youtube数据集。

Wiki:多人协作的写作系统数据集。

Orkut:社交服务网络数据集。

需要理解的是,图2中的红叉表示该算法在在对应的数据集下,无法在10000秒以内计算出结果。由图2中可知本文提出的算法效果显著,在所有的数据集下都比其他算法要快。

第二实施例

本发明所提供的第一种重叠社区集合质量度量指标计算装置可参见图3所示,其包括处理器301、存储器302及通信总线303,其中:

通信总线303用于实现处理器301和存储器302之间的连接通信;

处理器301用于执行存储器302中存储的社区集合质量度量指标计算程序,所述社区集合质量度量指标计算程序包括:

获取模块,用于获取社区集合X={X1,X2,...,XK}、Y={Y1,Y2,...,YK'},及包含社区集合X、Y中各社区的顶点集合V={v1,v2,...,vn};所述K、K'、n分别表示社区集合X、Y以及顶点集合V中的元素个数;

处理模块,用于根据所述顶点集合V={v1,v2,...,vn}中的每个顶点vi,分别遍历社区集合X={X1,X2,...,XK}、Y={Y1,Y2,...,YK'}中的各社区,记录各顶点vi在社区集合X、Y中所属社区的标签,得到标签集合ListXid[i]、ListYid[i],i为大于0小于n的整数;

构建模块,用于根据DicList[i]=ListXid[i]×ListYid[i],构建对应于每个顶点vi的社区标签笛卡尔乘积数据集DicList[i]

添加模块,用于按照元素类型(key,value),将各顶点vi对应的((DicList[i][j].1,0),DicList[i][j].2)、((DicList[i][j].2,1),DicList[i][j].1)元素添加至社区标签数据集合LidList,所述key为(key,value)类型的复合key;所述j为社区标签笛卡尔乘积数据集DicList[i]中元素的标签;

分发模块,用于基于贪心算法和负载均衡,对所述社区标签数据集合LidList进行切分,并将切分得到的元素分发至多个进程;

运算模块,用于将所述各进程的所述各指标相关数值发送至单一进程,由所述单一进程进行运算,输出所述社区集合X、Y的度量指标。

分发模块还用于构建各进程对应的新建社区标签数据集合NewLidList;基于贪心算法和负载均衡,将所述社区标签数据集合LidList进行划分至各进程对应的新建社区标签数据集合NewLidList。

上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1