社区发现算法——COPRA算法.pdfVIP

  • 2
  • 0
  • 约4.17千字
  • 约 4页
  • 2023-06-03 发布于江苏
  • 举报
社区发现算法——COPRA算法 COPRA算法 LPA 算法简单直观 ,易于理解。⽽且求解准确性很⾼(指的 运⽓好的时候,毕竟随机性太⼤了hh)⽆需指定社区个数等其他任何参数.最 主要 算法时间复杂度很低.接近线性但 LPA 算法存在两个问题 : 第⼀,其稳定性较差,原因 社区间标签易传播 ,当⼀个节点存在多个可选标签时.随机地选择其中⼀个 . 对于不同的随机选择会产 ⽣不同的社区发现结果 第⼆ ,在现实⽣活中,很多节点可能同时属于多个标签 .⽽ LPA 算法 ⽆法挖掘出重叠社区结构的. 对此,基于LPA算法,引⼊了新的标签结构(c,b),其中,c表⽰社区标识符(它可能属于哪个社区), b表⽰节点 x在社区c中的从属系数(它 属于该社区的可能性),且 0≤b≤ 1。顶点x的所有从属系数之和等于1,通过b (c,b)表⽰迭代次数t时的顶点x对于社区c的从属系数,N(x) t 表⽰顶点x的邻接顶点集。具体计算公式为: ∑ y∈N (x) bt−1(c, y) b (c, x) = ∣N (x) ∣ t 每次传播过程都 将邻居节点的归属系数取并集进⾏归⼀化。 其中,N(x) 节点x的所有邻居节点。t 迭代次数。该公式的意义 计算x节点所有邻居节点属于c社区的⾪属度之和与邻居节点数的⽐值。 迭代t中⼀个顶点的标签总 基于迭代t−1中它相邻的标签。 因为我们需要⼀个节点保存多个社区标识符信息,⽽不 所有的社区标识符信息。所以我们会删除那些低于阈值 1/v的社区信息,v 超参 数,表⽰⼀个节点最多可以属于⼏个社区。 从标签向量中删除社区对之后,将剩余的⾪属度进⾏归⼀化 (分别乘(除)以⼀个常数,使其之和为 1)。 假设v为2,故阈值为 1/v=0.5,低于此阈值的标签信息都会被删除,如果⼀个节点中所有的标签都低于此阈值就随机选择⼀个。删除标签 后的⽹络信息为 : ⽐如上图节点b三个从属系数都为 1/3,都⼩于阈值 1/2,所以都删除,并且随机选择⼀个,这⾥假如选择了c,然后归⼀化,从属系数为 1,b的标签变为(c,1)。 对于节点c,从属系数都为 1/2⼤于阈值,都合格,按公式计算{(c,1)+(c,1)}/2 所以结果为{(c,1}. 其它节点也类似,然后⽹络信息就变成了下图。 对于v2时,COPRA算法就变成了LPA算法。 与LPA算法⼀样,COPRA可能具有⾼度的不确定性,⼀个顶点的社区通常 由随机选择决定的。然⽽,在真实的⽹络中,COPRA通常⽐ 其他测试算法产⽣更好的结果(就模块化⽽⾔)。 算法流程如下 : 评价指标 :扩展Q函数 Dolphin 数据集 D.Lusseau 等⼈使⽤长达 7 年的时间观察新西兰 Doubtful Sound海峡 62 只海豚群体的交流情况⽽得到的海豚社会关 系⽹络。这个⽹络具有 62 个节点,159 条边。节点表⽰海豚,⽽边表⽰海豚间的频繁接触 代码与数据下载 Python代码如下 : class COPRA: def __ init__ (self, G, T , v) : :param G:图本⾝ :param T : 迭代次数T :param r:满⾜社区次数要求的阈值r self._G = G self._ n = len(G.n des(False)) # 节点数 ⽬ self._T = T self._v = v def execute(self) : # 建⽴成员标签记录 # 节点将被分配⾪属度⼤于阈值的社区标签 lablelist = {i:

文档评论(0)

1亿VIP精品文档

相关文档