通常网络中各节点的地位或重要性是不同的,社区通常也会以多个节点围绕某一个或几个比较重要节点的形式出现。本文参考万雪飞等人给出的一种在无向网络中,重叠社区发现的启发式算法,同样采用启发式策略提出了一种有向网络中的社区发现算法。PageRank算法是Google搜索引擎用来衡量网页重要性的算法,本文用PageRank值来刻画节点在网络中的重要性程度,帮助寻找重要性节点,也即中心节点。然后依次以中心节点为核心逐层向外扩展,达到设定的终止条件(如适应度函数)后形成以该中心节点为核心的局部社区,最后对不同的局部社区进行合并,观察模块度值的变化,取模块度值最大的划分为最终结果。由于节点可以属于不同的局部社区,所以该算法对于寻找重叠社区同样适用。最后,分别利用人工合成数据和真实网络数据进行了测试,并与一些其他社区发现算法做了比较,说明了本文算法的可行性和有效性。
Google搜索引擎是目前世界上使用最多的搜索引擎工具,它可以为用户提供优秀的搜索结果。而这些高质量的搜索结果极大地取决于PageRank算法个网页排序的闻效算法。在计算机网络发展的初期,并没有PageRank这些优秀的算法来对网页进行排序,通常都是用用户所要搜索的关键词在一个网页中出现的次数来衡量。但是这种方法有一个缺点,它并不能区分出垃圾网页和广告网页,因为这些网页会故意多次出现这些关键词,以提高被搜索到的概率,搜索结果的质量并不理想。之后,链接人气值的概念引出了网页的入度与出度。从此,就用网页的入度来表示网页的重要性。但是也会存在许多网站故意设置许多指向该网站的链接,而这些链接并没有多大意义,从而也影响了搜索的质量。
与网页的入度不同,PageRank算法在衡量网页重要性的时候,并不是只考虑网页的入度,同时还要考虑网页的出度。PageRank值就被Google搜索引擎用来衡量万维网中网页的重要程度。下式为一个网页的PageRank值的计算公式,即PageRank算法:
式中:PR(A)为网页A的PageRank值;PR(T)为链接到A的网页不的PageRank值;C(T)为网页不的出度;d为阻尼系数,0<d<1,是一个可调参数。
从上式可以看出,网页A的PageRank值取决于那些指向A的网页的PageRank的递归值。
PR(劝值并不是均等影响网页A的,指向A的一个网页C(助对A的PageRank值的影响还要考虑这个网页的出度。也就是说,C(T,.)的出度越大,它对A的影响就越小。如果A的入度为。,则由式((4.1)知PR(A)=1-d
图4.1所示是一个有向图,它由12个节点构成,图中给出了d = 0.85时,各个节点的PangRank值。从图中可以看出,PageRank值最大的节点,它的度并不一定也是最大的,而PageRank值对节点在网络中重要性程度的刻画更为准确,从而可以帮助我们寻找到中心节点。
网络中的社区通常是由某些节点围绕着一个或多个中心节点形成的,中心节点在社区中都有比较重要的作用,如充当领导或组织协调的作用。本文把某个社区中PageRank值最大的节点作为中心节点。参照Sun等人在文章中对边界点(Outlier)和桥接节点(Hub)的定义,本文给出了下面几种定义。
局部社区
定义4.1 (局部社区)给定一个中心节点后,就可以围绕这个中心节点逐层向外扩展,当达到某一终止条件后,如适应度函数,停止扩展,此时形成的小社区,称为局部社区。
整体网络是由若干个PageRank值较大的局部核心而形成的局部社区相互连接而组成,每个局部社区内呈现明显的逐层节点PageRank值不断下降的趋势,最终到达网络的边缘,形成一个自然的局部区域内节点连接比较紧密且区域间节点连接比较稀疏的社区结构。
如图4.2所示的网络,其PageRank值如图4.1所示。节点7的PageRank值最大,则选其为中心节点,作为初始社区:{7}。经过第一层扩展,将初始社区内节点的邻居节点加入,形成临时社区:{7,6,8,12}。若此时达到局部社区扩展的终止条件,则:{7,6,8,12}即形成为一个局部社区。
主要成员
定义4.2 (主要成员)以PageRank值最大的节点为局部中心节点,逐层向外扩展其邻居节点,形成该社区内节点的影响力不断逐层衰减的趋势,该局部社区所覆盖的节点,即为该局部社区的主要成员,它们受到中心节点的紧密作用与影响,同时也反作用于该局部社区的中心节点,表示为:,其中C",表不第i个局部社区,Vci表示第i个局部社区内的节点,
为该局部社区的中心节点,members为其扩展的主要成员节点集合。
边际节点
边际节点以局部中心节点进行扩展的过程中发现的没有被覆盖的节点,且他们又与该局部社区存在着关联,通常处于社区结构的边际位置,对网络中其他节点的影响较小,表示为:,其中Ci表示第i个局部社区,brims为其扩展的边际节点集合。
重叠节点
重叠节点以局部中心节点进行向外扩展的过程中,被两个以上局部社区同时覆盖的节点,体现了不同局部社区之间的强连接关系,同样可以进行社区间的信息传递,表示为:,其中表示属于第i个局部社区内的主要成员节点,为i,j两个局部社区的临时重叠节点集合。但是局部社区并不代表最终的社区划分结果,之后还要对局部社区进行合并,在确定最终的社区结构后,仍然属于两个以上社区的节点,我们称之为重叠节点。
适应度函数
![](https://i-blog.csdnimg.cn/blog_migrate/ef8ef98ddaa0584dea5a43e1326d0590.png)
节点适应度
局部社区相似度
基于pagerank的复杂网络社区发现算法
传统的社区发现方法通常只能对节点归属于哪个社区进行判断,不能发现节点之间的差异性信息。在网络拓扑结构中,每个节点由于其位置和特征参数的差异,它们在网络中的地位也是不同的。本文算法采用启发式思想,首先通过计算PageRank值找到局部中心节点,再以此节点为核心,利用适应度函数逐层向外扩展,寻找到局部社区,然后通过局部社区相似度不断合并社区,直到所有节点都被合并到一个社区为止,再通过有向模块度的判断找到最终的网络划分,在此过程中,也寻找到了边际节点、连接节点、重叠节点等,更好的区分了网络中节点的不同地位,对于理解网络结构与功能有很大帮助。
给定一个子图,我们把与该子图内节点存在连边且在该子图外的节点叫做他的邻居节点,记为neighbours(G)。在整个网络图中,我们把已经分配到某个局部社区中的节点叫做已覆盖节点,记为VF,尚未分配到局部社区的节点叫做未覆盖节点,记为Vunf。
算法的详细过程分为两个阶段,第一阶段为求取网络中的局部社区,如下所示:
第二个阶段为对所求得的局部社区进行合并,并用模块度来判断最终结果。
简单的社区计算
以上为PageRank实现社区发现算法的详细过程。