社区发现

这篇文章汇总了一些常见的社区发现概念和算法,包括

  1. Modularity Q
  2. Fast Unfolding(Louvain Algorithm)
  3. LPA
  4. SLPA
  5. KL算法
  6. GN算法

社区: a group of nodes that are well-connected to each other

常用的社区发现方法和计算复杂度:


1. Modularity Q (衡量指标)

Modularity Q 是用来衡量发现的社区的好坏的指标:

理解上是,实际在group s中的边的数量减去随机的图中,可能在group s中的边的数量。其中 |expected edges within group s| 的计算需要一个null model。

Null Model G'

  1. 和原图有相同的度的分布, 但边使用随机连接
  2. 可以是multigraph
  3. 拥有度
    的节点i和节点j中间的边的个数满足::

Q的计算

m: G中边的个数

  • m:总边数,2m:总度数
  • A:边权矩阵,
    表示i和j的边权,
    表示i的度数,
    表示i所属的社区
  • 在i和j属于相同社区时为1,否则为0。

可以转化为:

  • m: 图中的总边数
  • : 社区为c的点之间的总度数 (1-2, 1-3, 2-3)内连接度数为6
  • : 社区为c的点的总度数之和

Q的数值

Q 大于0.3-0.7表示有意义的社区结构。Q的取值范围为[-1, 1],我们可以以最大化Q为社区发现任务的目标。


2. Fast Unfolding (Louvain Algorithm)

  1. O(nlogn)
  2. 支持weighted graphs
  3. hierarchical partitions 分层分区
  4. 适合大图:fast, rapid convergence properties, high modularity output

步骤

  1. 通过局部的更改节点社区分类来优化Modularity:先将每个节点指定到唯一的一个社区,然后按顺序将节点在这些社区间进行移动。以节点 i 为例,它有三个邻居节点 j1, j2, j3,我们分别尝试将节点 i 移动到 j1, j2, j3 所在的社区,并计算相应的 modularity 变化值,哪个变化值最大就将节点 i 移动到相应的社区中去,如果最大的变化值也为负,则不移动。
  2. 按照这个方法反复迭代,直到网络中任何节点的移动都不能再改善总的modularity值为止。
  3. 1,2两个步骤看做第一阶段。把第一阶段得到的社区视为一个新的节点。重新构造子图,两个节点之间边的权值为相应两个社区之间各边的权值的总和。
  4. 重复1,2,3步骤的操作,直到Modularity不再增加为止。

在这个过程中,把计算Modularity Q的变化的计算方法如下。

比如一孤立的节点i移到社区C中时:

  • : sum of the weights of the links inside C
  • , sum of the weights of the links from i to nodes in C
  • :sum of the weights of the links incident to nodes in C
  • : sum of the weights of the links incident to node i
  • : sum of the weights of all the links in the network

实际上,我们在计算时需要把节点i从社区D中移除,所以,还需要计算从社区D中移除节点i得到的Q的增量。一次移动给Q带来的变化为:


3. LPA 标签传播

Label Propagation Algorithm

算法:

  1. 为所有节点指定一个唯一的标签;
  2. 逐轮刷新所有节点的标签,直到达到收敛要求为止。
    对于每一轮刷新,节点标签刷新的规则如下:
    对于某一个节点,考察其所有邻居节点的标签,并进行统计,将出现个数最多的那个标签赋给当前节点。当个数最多的标签不唯一时,随机选一个。

问题:

  1. 随机性太大,更新顺序和初次迭代的时候选择的标签很大程度影响了结果

4. SLPA

Speaker-listener Label Propagation Algorithm

一个节点可以属于多个社区,比LPA鲁棒。

算法:

  1. LPA的加强版,记录更新序列
  2. 当迭代停止时,对每一个节点历史标签序列中各把标签出现的频率做统计,按照某一个给定的阈值过滤掉出现概率小的标签。
  3. 根据阈值,得到重叠性社区标签

5. K-L算法

将已知网络划分为已知大小的两个社区的二分方法,它是一种贪婪算法。它的主要思想是为网络划分定义了一个函数增益Q,Q表示的是社区内部的边数与社区之间的边数之差,根据这个方法找出使增益函数Q的值成为最大值的划分社区的方法。具体策略是,将社区结构中的结点移动到其他的社区结构中或者交换不同社区结构中的结点。从初始解开始搜索,直到从当前的解出发找不到更优的候选解,然后停止。

K-L算法的缺陷是必须先指定了两个子图的大小,不然不会得到正确的结果,实际应用意义不大。


6. GN算法

介数:betweenness

  1. 节点介数定义为网络中所有最短路径中经过该节点的路径的数目占最短路径总数的比例,
  2. 边介数定义为网络中所有最短路径中经过该边的路径的数目占最短路径总数的比例。

GN算法的步骤如下:

  1. 计算每一条边的边介数;
  2. 删除边界数最大的边;
  3. 重新计算网络中剩下的边的边阶数;
  4. 重复(3)和(4)步骤,直到网络中的任一顶点作为一个社区为止。

GN算法的缺陷:

  1. 不知道最后会有多少个社区;
  2. 在计算边介数的时候可能会有很对重复计算最短路径的情况,时间复杂度太高;GN算法不能判断算法终止位置。

参考资料

cs224W​web.stanford.edu社区发现(Community Detection)算法​blog.csdn.net

社区发现算法总结(一)​www.cnblogs.com复杂网络社区发现算法​cfonheart.github.ioMonsterGroup:第二期(下):Graph Clustering和Community Detection(附代码)​zhuanlan.zhihu.com

标签传播算法_复杂网络社区发现算法汇总相关推荐

  1. 基于BAS算法实现复杂网络社区发现问题——附python代码

    基于智能优化算法的复杂网络社区发现问题 第一章 基于天牛须算法求解复杂网络社区发现问题 文章目录 基于智能优化算法的复杂网络社区发现问题 前言 一.基本天牛须算法 二.关于社区发现 基本问题 总结 前 ...

  2. Network of Thrones --基于社区发现算法和图分析Neo4j解读《权力的游戏》(详细!)

    一.概要 数学家 Andrew Beveridge 和Jie Shan在数学杂志上发表过一篇名叫<权力的网络>的论文,主要分析畅销小说<冰与火之歌>第三部<冰雨的风暴&g ...

  3. SLAP(Speaker-Listener Label Propagation Algorithm)社区发现算法

    其中部分转载的社区发现SLPA算法文章 一.概念 社区(community)定义:同一社区内的节点与节点之间关系紧密,而社区与社区之间的关系稀疏. 设图G=G(V,E),所谓社区发现是指在图G中确定n ...

  4. 基于PageRank的复杂网络社区发现

    尽管许多真实世界网络节点间包含有向的连接,如互联网中各个网页之间的超链接,都是带有方向的,但是过去在有向网络中寻找社区通常都是忽略边的方向性,而直接应用无向网络中的方法.这种做法可能会损失一些包含在连 ...

  5. 附源码|复杂网络社区发现——标签传播算法(LPA)

    本文通过Python 3.7实现了标签传播算法的两个代码(1.自己写的,2.调包实现),并通过空手道俱乐部的例子进行可视化显示. 标签传播是一种半监督机器学习算法,它将标签分配给以前未标记的数据点.在 ...

  6. fastunfolding算法_社区发现算法综述—part1

    目前我能在arxiv上找到的最新的关于社区发现算法系列的综述文了. 正文从这里开始: 2.2 社区发现 现代网络在规模.多样性和复杂性上呈指数增长. 由于网络的变化,各种各样呈现出网络结构的不同类型的 ...

  7. 复杂网络之社区发现算法

    GN算法 2002年Girvan等提出了GN(Girvan - Newman ,命名是取自两位提出作者名)算法<Community Structure in Social and Biologi ...

  8. 图算法(十三):Louvain算法【适用场景:用于社团发掘、层次化聚类等场景】【基于模块度的社区发现算法,其优化目标是最大化整个社区网络的模块度】

    一.概述 Louvain算法是基于模块度的社区发现算法,该算法在效率和效果上都表现较好,并且能够发现层次性的社区结构,其优化目标是最大化整个社区网络的模块度. 适用场景:Louvain算法适用于社团发 ...

  9. 社区发现算法-Community Detection-NormalizeCut/Louvain/NMF/LPA

    本文结构安排 图聚类简介 正则化割 Louvain 非负矩阵分解(NMF) 其他常见方法 图(graph):是一种由点和边集构成的结构 G = ( V , E ) G=(V,E) G=(V,E) 图聚 ...

最新文章

  1. Voice LAB-1 CUBE Cisco Unified Border Element
  2. Go语言defer详解
  3. java ntpudpclient_Java代码获取NTP服务器时间
  4. 快速上手sqlserver profiler
  5. 鸿蒙关键技术研究,华为鸿蒙 2.0 系统主题演讲公布,详细架构 9 月 11 日揭晓
  6. Mybatis输入映射和输出映射
  7. 金蝶云系统服务器,金蝶系统云服务器已离线
  8. 多个vue项目合并成一个_再见Vlookup,合并多个表格发现一个最简单方法
  9. 学习 ASP.NET MVC (第五回)理论篇
  10. ubuntu中wps字体添加
  11. 分解质因数_java
  12. Android游戏破解练习-大圣降魔录
  13. 跨境电子商务( Cross-Border Electronic Commerce )是什么?
  14. Android超声波识别技术,超声波指纹识别or光学指纹识别?屏下指纹识别技术大比拼-传感技术-与非网...
  15. 幸运彩票 分数 15作者 陈越单位 浙江大学
  16. 字符分割函数strtok
  17. Quotes on Learing(求知若渴)
  18. Mac安装PL2303驱动
  19. Python兔子繁衍问题
  20. linux关闭笔记本自带键盘

热门文章

  1. Bitbucket免费的私有仓库
  2. 华御密盾智能防信息泄密系统
  3. GridView 72般绝技(转载)
  4. BS-GX-018 基于SSM实现在校学生考试系统
  5. SparkSQL介绍
  6. 根据应用程序池名称获得第一个站点的物理路径
  7. PHP数组函数总结与使用
  8. 获取一篇新闻的全部信息
  9. IcmpBackDoor
  10. 6. 函数参数 与 展开运算符