技术领域 本发明涉及一种在社会网络中发现社团结构的具体方法,尤其与网络中顶点之间的差异性、利用边移除结合贪婪方法发现社团的方法相关。 背景技术 在当今社会生活中,随着经济的发展和社会的进步,人与人之间进行交流的手段越来越多样化,处于社会中的个人都会根据自己的需要建立其不同的社会关系网络,同时个体之间联系的愈加紧密也导致了“个人”这一概念在社会网络中的淡化,有着共同兴趣或是目的的“个人”往往会形成网络中的社团结构。 目前在网络中发现社团结构有多种方法,基于图论的谱分割方法与Kernighan-Lin,基于顶点相似性的层次聚类方法以及近年来发展起来的边移除方法。基于图论的方法在应用上往往会受多诸多的限制,比如需要提前指定社团的数目或是大小或是只能将原有社团分割成两个小社团等等;层次聚类方法聚集于顶点之间的相似性,将最相似的顶点放到一个社团中,但是却会忽略原有网络的结构,进而导致发现的社团并不十分“自然”;近年来的边移除方法可以从原始网络出发得到任意数目的社团,并且是原有网络的自然划分。 但当前的边移除方法利用边的中介度,算法复杂度很高,这直接限制了此方法在实际数据中的应用。这个复杂度主要来自于中介度的计算与边移除后的重新计算,如果不重新计算,会严重影响最终社团发现的结果。因此我们需要从两方面来重新考虑基于边移除的社团发现方法:减小中介度的计算复杂度与减少计算中循环的次数,针对这两点我们提出了顶点之间的差异性以及使用此差异性的基于贪婪方法的边移除方法。 发明内容 本发明目的是:提供一种基于顶点差异性的边移除(即边删除)社团发现方法,以提高在社会网络中发现社团结构的效率。 本发明的技术方案是:基于顶点差异性的社团发现方法包括如下步骤: 1)网络构建阶段: 11)原始数据预处理过程; 12)扫描得到并去掉不必要的分量的过程; 13)扫描各个分量得到分量的邻接矩阵的过程; 14)结束; 2)社团发现阶段: 21)初始化过程; 23)发现网络中的社团结构; 24)社团合并过程; 25)结束; 步骤1为网络构建阶段,即将原始数据抽象成为我们在社会网络分析中的网络,其具体过程如下: 步骤11)为为数据预处理过程: 111)去掉无效数据:通过对现在实际数据的一次扫描,去掉数据中的不完整信息; 112)有效数据编号:鉴于现实数据的多种多样,所以在我们的方法中要按顺序对所有的研究顶点进行编号; 步骤12)为通过一遍扫描数据得到当前所有分量,并且去掉较小的,不必进行社团发现的分量,具体方法,即是从一个顶点出发找到其所在的分量,直到所有的顶点均被扫描;然后去掉大小未达到标准的分量。 步骤13)得到各个分量的邻接矩阵:对每个分量进行扫描,根据数据点之间的联系得到邻接矩阵; 步骤2为社团发现阶段,即运用差异性、边移除与贪婪方法得到社会网络中存在的社团结构,其具体步骤如下: 21)初始化过程:初始化方法中用到的量。初始归属向量V1=(1,1,1…1),评价标准Modularity的值Q=0,Q的增量DQ值为正无穷大,邻接矩阵W及其备份CW,在方法中我们使用Wxy与(CW)xy来表示W、CW中第x行,第y列的元素。 步骤22)是使用差异性、边删除并结合贪婪方法来发现社团结构的过程,它又可以分为如下的几个步骤: 221)利用CW进行差异性的计算:计算所有相邻顶点之间的差异性如下: 引入以下两个量:Axy,表示顶点x,y之间的吸引力;Rxy表示顶点x,y之间的排斥力;如果用(CW)xy表示x,y之间的权值,可以定义: 于是对于相邻的顶点对x与y,二者之间的差异性如下计算: 在计算中利用最大堆记录当前所有顶点对的差异性,二元组(x,y)记录当前差异性最大的顶点对。 222)根据顶点差异性的值移除边的过程:令(CW)xy=0,(CW)yx=0。 223)社团结构评估过程:判断是否有新的社团产生,通过计算Modularity值将新的社团结构与原有社团结构比较。 224)判断是否有新的社团产生NewCommunityExists:空队列Queue,将顶点x加入Queue中,开始如下循环过程: 在Queue不为空的情况下,取出队列头元素v,加入到集合Sold中,取网络中使(CW)uv>0的所有顶点u,如果u尚未被访问,则加入到队列Queue中,队列元素计数currentCount的值加1; 循环过程结束后,在向量Vk中找到顶点i所对应在的元素Vki,并在Vk中找到值为Vki的元素个数,记为originalCount,如果currentCount=originalCount表示没有产生新的社团结构,评估过程终止,直接转入步骤221)来重新计算顶点之间的差异性;否则,表明产生了新的社团结构,需要依次进行以下步骤来到达步骤227) 225)产生新社团结构后更新归属向量过程Update Vector,空队列Queue,n维零向量Vk+1=(0,0,0…0),顶点y加入Queue中,开始如下循环过程: 在Queue不为0的情况下,取出队列头元素v,加入到集合Snew中,取网络中使(CW)uv>0的所有顶点u,如果u尚未被访问,则加入到Queue中,并更新归属向量Vk+1:V(k+1),j=k+1; 循环过程结束后,将Vk+1中为零的元素置为Vk中相应的元素值。 226)计算新社团结构的Modularity的增量DQ:ComputeModularityIncreasing:利用Sold与Snew中记录的顶点信息得到新产生的两个社团内部权值Told与Tnew,以及两个社团之间边的权值Tbetween,从而得到三者在所有的权值中所占的比例aold,anew与abetween,从而得到Modularity的增量DQ。 227)利用DQ的值对当前的社团结构进行评价:如果DQ大于或等于零,则对当前的Q进行更新,即Q=Q+DQ,并且令k=k+1,然后转入步骤221),否则直接转入步骤23)结束社团结构发现过程。 23)社团合并过程MergeCommunity:将大小为1的社团合并到适当的社团中去。扫描最终的归属向量Vk,得到各个社团的大小向量Vsize,扫描向量Vsize,得到每个大小为1的社团及其所包含的顶点编号,放到集合S中;对于S中的任一元素v,进行如下过程:找到v所在的社团编号Cv,找到使(CW)uv>0的所有元素u,以及其所在的社团编号Cu。找到社团Cw,使Cw中包含v的相邻顶点(即元素u)最多,合并Cv与Cw,同时根据顶点v与原始邻接矩阵CA对Q值及归属向量Vk做出更新。 24)结束过程:根据归属向量Vk得到所有顶点的社团归属,根据Q值的大小对社团结构做出评价。 本发明的有益效果是:本发明的基于顶点差异性的边删除社团发现方法: 1)应用新的差异性的度量方法:基于顶点自身的差异性,其使用局部信息进行计算,计算复杂度较低,适用于大规模数据情况下的应用。 2)在边删除方法中利用贪婪方法减少对差异性重新计算过程,进而进一步减少了社团发现方法的复杂性,使其更适用于大规模数据的应用。 附图说明: 图1为本发明的基于顶点差异性的边删除方法的流程图 图2为发现社团结构的详细流程图 图3为判断是否出现新社团过程NewCommunityExists的详细流程图 图4为更新归属向量步骤56UpdateVector的详细流程图 图5为步骤57计算Modularity增量ComputeModularityIncreasing的详细流程图 图6为社团合并过程的详细流程图 具体实施方式 下面结合附图对本发明进行详细说明。 如图1所示,我们首先独立地提出两种不同的方法来度量顶点之间的差异性,以便在边的移除过程中使用;然后我们会利用原始数据来构造我们要进行分析的社会网络,最后在此网络上进行社团结构的发现。 步骤1-3描述了网络的构建过程: 步骤1对数据进行预处理,去掉不完整信息; 步骤2通过扫描原始数据得到各个分量并且去掉不必要分量; 步骤3则是扫描各个分量得到每个分量的邻接矩阵以备社团发现使用; 步骤4-7描述了社团发现阶段的具体过程: 步骤4进行方法前的初始化过程; 步骤5利用差异性,边删除结合贪婪方法来发现网络中的社团结构: 步骤50是起始步骤; 步骤51利用DQ进行判断,如果其值大于0,跳转至51,否则直接跳转至512; 步骤52利用CW计算顶点对之间的差异性; 步骤53找到当前具有最大差异性的顶点对(x,y); 步骤54去掉边(x,y); 步骤55判断在去掉边(x,y)后是否产生新的社团结构,如果是,跳转至步骤56,否则就会跳转至步骤511; 步骤56进行归属向量的更新过程; 步骤57计算Modularity的增量DQ; 步骤58利用DQ再进行判断,如果其值大于0,则跳转至步骤59,否则跳转至步骤51,其实相当于直接退出过程到达步骤512,但为了使流程图更加清晰,故使其跳转至步骤51; 步骤59更新Modularity的值Q; 步骤510增加当前循环的计数变量; 步骤511将Snew,Sold置为空以备下一轮循环使用; 步骤512为结束步骤; 步骤6是对现有社团结构进行合并过程: 步骤60为起始步骤; 步骤61为方法的初始化过程,包括一个空集合S,合并后的归属向量NV,初始值为Vk,大小为k的零向量Vsize与Visize; 步骤62得到大小为1的社团内顶点的编号,并放到集合S中; 步骤63中判断集合中是否还有元素,如果有,则跳转到步骤64,否则直接跳转至步骤613; 步骤64得到集合中的某个元素i; 步骤65得到顶点i的相邻顶点集合K; 步骤66得到K中所有顶点的归属社团编号; 步骤67得到包含K中顶点最多的社团编号m; 步骤68将顶点i的社团归属社团更新为m; 步骤69得到合并过程中所产生的Snew与Sold; 步骤610得到合并时所产生的Modularity的增量DQ; 步骤611得到合并后Modularity的值Q; 步骤612从集合S中移除已处理的顶点i; 步骤613为步骤6的结束步骤,将向量NV的值赋予Vk; 步骤7作为整个过程的结束,我们可以从Vk中得到各个顶点的社团归属,并且用返回的值Q来评价我们所得到的社团结构。