RAK算法可以非常简单地描述。每个顶点都与一个标签相关联,标签是一个标识符,比如整数。

1.初始化时,每个顶点都有一个唯一的标签

2. 然后,重复地,每个顶点x更新它的标签,用最多邻居使用的标签替换它。如果相同最大邻居数量使用多个标签,则随机选择其中一个。经过几次迭代后,相同的标签趋向于与社区的所有成员相关联。

3.所有具有相同标签的顶点被添加到一个社区中

传播阶段并不总是收敛到这样一种状态,即在连续迭代中所有顶点具有相同的标号。为了确保传播阶段终止,Raghavan等人提出使用“异步”更新,即顶点标签根据一些邻居的先前标签和其他邻居的更新标签进行更新。节点被放置在一个随机的顺序中。在第t次迭代中,x的新标号是基于第t次迭代中x之前的邻居的标号和在第(t - 1)次迭代中x之后的邻居的标号。

算法终止时,每个顶点都有一个标签,是那些被最大数量的邻居使用的标签之一。

该算法生成包含共享相同标签的所有顶点的组。这些组不一定是连通的,因为组中的每一对顶点之间都有一条路径,该路径只通过同一组中的顶点。由于社区通常被要求是相互连接的,Raghavan等人提出了最后的阶段,将这些团体分成一个或多个相互连接的社区。

重叠社区

在RAK算法中,顶点标签标识顶点所属的单个社区。如果社区重叠,每个顶点可能属于一个以上的社区。因此,为了找到重叠的社区,我们显然需要允许顶点标签包含多个社区标识符。

我们可以用一组对(c,b)标记每个顶点x,其中c是社区标识符,b是归属系数,表示x在社区c中的成员强度,这样x的所有归属系数总和为1。

每个传播步骤都将x的标签设置为其邻居标签的并,将社区对所有邻居的归属系数求和并进行归一化。

更准确地说,假设函数bt(c,x)将顶点x和社区标识符c映射到迭代t中的归属系数,

其中N(x)表示x的邻域集合。(计算所有邻居结点属于C社区的隶属度和与邻居结点个数的比值)

在我们的算法中,迭代t中一个顶点的标签总是基于迭代t−1中它相邻的标签。

所需要的是一种在每个标签中保留多个社区标识符而不保留所有标识符的方法。我们的方法使用归属系数来达到这个目的:在传播的每个步骤中,我们首先构造如上所述的顶点标签,然后删除归属系数小于某一阈值的对。我们将这个阈值表示为倒数,1/v,其中v是算法的参数。因为每个标签中的归属系数和为1,v表示任意顶点可以属于的最大群体数。

一个顶点标号中的所有对的归属系数都有可能小于阈值。如果是这样,我们只保留拥有最大归属系数的一对,并删除所有其他的。如果超过一对有相同的最大归属系数,低于阈值,我们保留一个随机选择的其中之一。这种随机选择使算法具有不确定性。

在从顶点标签中删除对之后,我们将其重新正规化,方法是将每个剩余对的归属系数乘以一个常数,使它们的和为1。

使用这种方法,在v = 2的情况下,对上述网络的结果如图2所示。在第一次迭代中,顶点c被标记为社区标识符b和d,各归属系数为1/2。因为它不小于阈值(1/2),所以两者都保留。类似地,f被标记为e和g。其他五个顶点都至少有三个邻居,因此它们的归属系数都低于阈值。例如,先将b标为{(a,1/3), (c,1/3), (d,1/3)}:随机选择c,删除a和d,重新规整为{(c,1)}。a、d、e和g的标签同样是随机选择的。在最后一次迭代之前,a有两个邻居标记为c和两个标记为e,因此它保留了两个社区标识符:{(c,1/2), (e,1/2)}。因此,最终的解决方案包含两个重叠的社区:{a,b,c,d}和{a,e,f,g}。

我们的算法是RAK算法的一般化。如果v < 2,它们本质上是相同的:一个顶点的标签只能包含一个社区标识符,每个传播步骤保留最大数量的邻居使用的标识符。

算法思想:

与RAK算法一样,COPRA可能具有高度的不确定性,一个顶点的社区通常是由随机选择决定的。然而,在真实的网络中,COPRA通常比其他测试算法产生更好的结果(就模块化而言)。最近的工作表明,网络通常有大量的高模块化解决方案,没有明确的全局最大值,而且这些解决方案之间可能存在根本的差异,因此,这并不令人惊讶。也就是说,即使COPRA(或任何其他算法)每次运行时都找到不同的解决方案,这些解决方案也可能都是好的。

在我们的合成网络实验中,当混合或重叠相对较少时,结果是优秀且稳定的。然而,当混合或重叠增加过多时,一个不正确的随机选择可能导致社区标识符传播过多并淹没网络,性能突然下降。在这方面,LFM算法的表现与COPRA相似,而其他算法(CFinder和CONGO)往往会给出更差的结果,但随着混合或重叠的增加,结果会逐渐恶化。

COPRA在较大的网络中表现更好,在较小的社区中表现稍好。相比之下,CFinder倾向于较小的社区,但不受网络大小的影响。


更新:COPRA算法的标签传播与隶属度归一化

  • 由图可知节点 1 对 a、b、c、d 社区的从属系数分别为 1/4、7/24、5/24、1/4,

a = (1/3+2/3)/4 = 1/4

b = (1/2+2/3)/4 = 7/24

c = (1/2+1/3)/4 = 5/24

d = (1/2+1/2)/4 = 1/4

  • 假设此时的 v 设置为 2,那么结点1需要选取隶属度排序前 2 的社区并归一化:

先对a,b,  c,  d社区的隶属度进行排序(b = 7/24  ,a = 6/24 ,d=6/24,c = 5/24),会选择a,b或b,d

归一化:

a,b:a = (6/24)/ (6/24+7/24)= 6/13  ; b = (7/24)/ (6/24+7/24)= 7/13

同理b, d : b = 7/13  ; d =6/13    ,这时会随机选择一组最为结点1的标签

COPRA算法学习笔记相关推荐

  1. 大顶堆删除最大值_算法学习笔记(47): 二叉堆

    堆(Heap)是一类数据结构,它们拥有树状结构,且能够保证父节点比子节点大(或小).当根节点保存堆中最大值时,称为大根堆:反之,则称为小根堆. 二叉堆(Binary Heap)是最简单.常用的堆,是一 ...

  2. Manacher算法学习笔记 | LeetCode#5

    Manacher算法学习笔记 DECLARATION 引用来源:https://www.cnblogs.com/grandyang/p/4475985.html CONTENT 用途:寻找一个字符串的 ...

  3. 数据结构与算法学习笔记之 从0编号的数组

    数据结构与算法学习笔记之 从0编号的数组 前言 数组看似简单,但掌握精髓的却没有多少:他既是编程语言中的数据类型,又是最基础的数据结构: 一个小问题: 为什么数据要从0开始编号,而不是 从1开始呢? ...

  4. 输出dag的所有拓扑排序序列_算法学习笔记(53): 拓扑排序

    拓扑排序是对DAG(有向无环图)上的节点进行排序,使得对于每一条有向边 , 都在 之前出现.简单地说,是在不破坏节点 先后顺序的前提下,把DAG拉成一条链.如果以游戏中的科技树(虽然名字带树,其实常常 ...

  5. 算法学习笔记:对指定金额计算最少钞票数

    算法学习笔记:对指定金额计算最少钞票数 一.引出问题 财务人员给员工发工资时经常遇到这样一个问题,即根据每个人的工资额(以元作为单位)计算出各种面值的钞票的张数,且要求总张数最少.例如,某职工工资为3 ...

  6. matlab中x从0到5不含0,关于MATLAB的数学建模算法学习笔记

    关于MATLAB的数学建模算法学习笔记 目录 线性规划中应用: (3) 非线性规划: (3) 指派问题;投资问题:(0-1问题) (3) 1)应用fmincon命令语句 (3) 2)应用指令函数:bi ...

  7. 机器学习篇01:在线学习的支持向量机算法学习笔记

    在线学习的支持向量机算法学习笔记 oisvm算法实现说明 oisvm算法实现说明 % 本程序是用于实现基于在线学习的调制信号识别的程序 % % % 第一步:调制信号的生成 % 首先是7个信号:2ASK ...

  8. 数据结构与算法学习笔记之 提高读取性能的链表(上)

    数据结构与算法学习笔记之 提高读取性能的链表(上) 前言 链表(Linked list)比数组稍微复杂一点,在我们生活中用到最常见的应该是缓存,它是一种提高数据读取性能的技术,常见的如cpu缓存,浏览 ...

  9. l2-004 这是二叉搜索树吗?_算法学习笔记(45): 二叉搜索树

    二叉搜索树(Binary Search Tree, BST)是一种常用的数据结构,在理想情况下,它可以以 的复杂度完成一系列修改和查询,包括: 插入一个数 删除一个数 查询某数的排名(排名定义为比该数 ...

  10. 两个字符串的最长公共子序列长度_算法学习笔记(58): 最长公共子序列

    (为什么都更了这么多篇笔记了,这时候才讲这么基础的内容呢?因为我本来以为LCS这种简单的DP不用讲的,结果CF不久前考了LCS的变式,然后我发现由于自己对LCS一点都不熟,居然写不出来 ,于是决定还是 ...

最新文章

  1. 测试我自己的系统是大端还是小端
  2. 【ZJ选讲·字符串折叠】
  3. Oracle触发器(trigger):一般用法
  4. rust(29)-元组结构体
  5. sql group by having
  6. 数据湖 VS 数据仓库之争?阿里提出大数据架构新概念:湖仓一体
  7. 树莓派摄像头_Arducam 8MP重磅来袭,为树莓派4B构建完全同步的双摄像头方案~
  8. JavaWeb-RESTful_用SpringMVC开发RESTful
  9. javascript经典实例_一道前端经常忽视的JavaScript面试题
  10. 微软为开源计算器加入全新的图形功能
  11. linux下.a/.so/.la目标库区别-转
  12. java sqlserver 图书馆管理系统_基于JAVA+SQLServer的图书馆管理系统.doc
  13. rtd1296 mtd 设备驱动分析
  14. 怎么识别图片中的文字?这三款识别软件还不错
  15. php生成字母头像,Identicon:实现根据用户账号生成像素头像 php 版
  16. 【解救ROS】clion2022.2.2的安装永久使用教程
  17. 单目标跟踪OTB、VOT数据集介绍
  18. 全国计算机等级AJIL,全国计算机二级VB知识点2015第一次课
  19. 华硕笔记本电脑计算机专业,超详细华硕笔记本电脑重装系统图文教程
  20. html 调用idm,如何对IDM进行自定义设置

热门文章

  1. QT软件开发:基于libVLC内核设计视频播放器
  2. Spring(SpringBoot)--事务传播机制--应用/实例/详解
  3. 国内外你知道的设计网站!给你的设计找点灵感!
  4. 如何选出好用的仓库库存管理系统软件?看文章就知道了
  5. arduino制作AVRISP烧写器
  6. webssh的安装与使用
  7. 前端PDF文件转图片方法
  8. 正逻辑与负逻辑的关系
  9. BFS 算法框架套路详解
  10. JSON的4种解析方式使用以及对比