社区发现相关算法

目录

  • **社区检测与聚类**
  • **社区检测技术**
    • 1. Louvain 社区检测[2]
    • 2. Surprise社区检测[3]
    • 3. 莱顿社区检测[4]
    • 4. Walktrap 社区检测[5]
  • 结论
    • 5.LPA 标签传播
    • 6.K-L算法
    • 7.GN算法
    • 8.Newman快速算法
  • SlashBurn: Graph Compression and Mining beyond Caveman Communities
  • References

摘抄自:Community Detection Algorithms

社区检测与聚类

有人可能会争辩说,社区检测类似于聚类。聚类是一种机器学习技术,其中相似的数据点根据它们的属性被分组到同一个聚类中。尽管聚类可以应用于网络,但它是无监督机器学习中一个更广泛的领域,它处理多种属性类型。另一方面,社区检测是专门为网络分析量身定做的,它依赖于称为边缘的单个属性类型。此外,聚类算法倾向于将单个外围节点与其应属于的社区分开。然而,聚类和社区检测技术都可以应用于许多网络分析问题,并且可能会根据域产生不同的优缺点。

社区检测技术

社区检测方法可以大致分为两类:凝聚法和分裂法。在凝聚法中,边被一条一条地添加到只包含节点的图中。边从强边添加到弱边。分裂方法遵循与凝聚方法相反的方法。在那里,边从一个完整的图中被一条一条地移除。
在给定的网络中可以有任意数量的社区,并且它们的大小可以不同。这些特征使得社区的检测过程非常困难。然而,在社区检测领域提出了许多不同的技术。下面解释了四种流行的社区检测算法。所有这些列出的算法都可以在python cdlib 库中找到。

1. Louvain 社区检测[2]

Louvain 社区检测算法最初是在 2008 年提出的,是一种针对大型网络的快速社区展开方法。这种方法基于模块化,它试图最大化社区中实际边数与社区中预期边数之间的差异。然而,优化网络中的模块化是 NP-hard,因此必须使用启发式算法。Louvain算法分为迭代重复两个阶段;
节点的本地移动
网络聚合
该算法从 N 个节点的加权网络开始。在第一阶段,算法为网络的每个节点分配不同的社区。然后对于每个节点,它考虑邻居并评估模块化的获得通过从当前社区中删除特定节点并将其放置在邻居的社区中。如果收益为正且最大化,则该节点将被放置在邻居的社区中。如果没有正收益,节点将留在同一个社区。这个过程被重复应用于所有节点,直到没有进一步的改进。Louvain 算法的第一阶段在获得模块性的局部最大值时停止。在第二阶段,算法将第一阶段发现的社区作为节点来构建新网络。一旦第二阶段完成,算法会将第一阶段重新应用于生成的网络。重复这些步骤,直到网络没有变化并获得最大的模块化。
Louvain 社区检测算法在此过程中发现社区的社区。由于易于实现以及算法的速度,它非常受欢迎。然而,该算法的一个主要限制是在主存储器中使用网络存储。
下面给出使用python cdlib库的Louvain社区检测算法的使用。

from cdlib import algorithms
import networkx as nx
G = nx.karate_club_graph()
coms = algorithms.louvain(G, weight=’weight’, resolution=1., randomize=False)

2. Surprise社区检测[3]

由于模块化的限制,引入了一种基于经典概率的度量,称为 Surprise,以评估网络划分为社区的质量。该算法几乎类似于 Louvain 社区检测算法,只是它使用了惊喜而不是模块化。节点从一个社区移动到另一个社区,从而贪婪地改善惊喜。此方法考虑链接位于社区内的概率。惊喜的使用在许多小 社区的限制下效果很好,而模块化的使用在少数大社区的限制下效果很好。
下面给出了使用 python cdlib 库的 Surprise 社区检测算法的使用。

from cdlib import algorithms
import networkx as nx
G = nx.karate_club_graph()
coms = algorithms.surprise_communities(G)

3. 莱顿社区检测[4]

在后来的研究(2019 年)中,VA Traag 等人。表明Louvain 社区检测倾向于发现内部断开的社区(连接不良的社区)。在 Louvain 算法中,将作为社区中两个组件之间桥梁的节点移动到新社区可能会断开旧社区的连接。如果旧社区进一步分裂,这将不是问题。但根据 Traag 等人的说法,情况并非如此。旧社区中的其他节点因其强大的联系而允许其保持为单个社区。此外,据他们介绍,Louvain 倾向于每周都会发现相互关联的社区。因此,他们提出了更快的 Leiden 算法,以保证社区之间的良好连接。
图片改编自 [4]
除了 Louvain 算法中使用的阶段之外,Leiden 还使用了另一个阶段来尝试细化发现的分区。莱顿算法的三个阶段是,

  • 节点的本地移动
  • 分区的细化
  • 基于细化分区的网络聚合

在细化阶段,算法尝试从第一阶段提出的分区中识别细化的分​​区。第一阶段提出的社区可能会在第二阶段进一步分裂成多个分区。细化阶段不遵循贪婪的方法,并且可以将节点与随机选择的社区合并,从而增加质量函数。这种随机性允许更广泛地发现分区空间。同样在第一阶段,莱顿对鲁汶采用了不同的方法。莱顿不会在对所有节点的第一次访问完成后访问网络中的所有节点,而是只访问那些邻域发生变化的节点。
下面给出了使用python cdlib库的Leiden社区检测算法的使用。

from cdlib import algorithms
import networkx as nx
G = nx.karate_club_graph()
coms = algorithms.leiden(G)

4. Walktrap 社区检测[5]

Walktrap 是另一种基于随机游走的社区检测方法,其中顶点之间的距离通过网络中的随机游走来测量。Walktrap 是一种有效的算法,在最坏情况下以 O(mn²) 时间复杂度和 O(n²) 空间复杂度运行。但在大多数实际场景中,walktrap 以 O((n²) log n) 时间复杂度和 O(n²) 空间复杂度运行。该算法的基本直觉是图/网络上的随机游走倾向于陷入与社区对应的密集连接部分. Walktrap 使用随机游走的结果以自下而上的方式合​​并不同的社区。可以使用任何可用的质量标准来评估分区的质量。它可以是 Louvain 社区检测中的模块化,也可以是任何其他措施。
下面给出使用python cdlib库的Walktrap社区检测算法的使用。

from cdlib import algorithms
import networkx as nx
G = nx.karate_club_graph()
coms = algorithms.walktrap(G)

结论

社区检测非常适用于理解和评估大型复杂网络的结构。这种方法使用图或网络中边的属性,因此更适合网络分析而不是聚类方法。聚类算法倾向于将单个外围节点与其应该属于的社区分开。许多不同的算法已经提出并实现用于网络社区检测。根据网络的性质以及应用问题域,这些中的每一个都有不同的优缺点。

5.LPA 标签传播

Label Propagation Algorithm

算法:

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

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

6.K-L算法

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

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

7.GN算法

Finding and evaluating community structure in networks(Newman and Girvan)
介数:betweenness
节点介数定义为网络中所有最短路径中经过该节点的路径的数目占最短路径总数的比例,
边介数定义为网络中所有最短路径中经过该边的路径的数目占最短路径总数的比例。

GN算法的步骤如下:

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

GN算法的缺陷:
不知道最后会有多少个社区;

  • 在计算边介数的时候可能会有很对重复计算最短路径的情况,时间复杂度太高;
  • GN算法不能判断算法终止位置。

8.Newman快速算法

本算法的具体内容请参考Fast algorithm for detecting community structure in networks(Newman)。

GN算法通过模块度可以准确的划分网络,但它只适用于中小型规模的网络。Newman提出一种基于贪心的快速社区发现算法,算法的基本思想是:首先将网络中的每个顶点设为一个单独社区,然后选出使得模块度Q的增值最大的社区对进行合并;如果网络中的顶点属于同一个社区,则停止合并过程。整个过程是自底向上的过程,且这个过程最终得到一个树图,即树的叶子节点表示网络中的顶点,树的每一层切分对应着网络的某个具体划分,从树图的所有层次划分中选择模块度值最大的划分作为网络的有效划分。

设网络有n个节点,m条边,每一步合并对应的社区数目为r,组成一个r*r矩阵e,矩阵元素eij表示社区i中的节点与社区j中节点之间连边的数目在网络总变数的百分比。

主要步骤:
(1) 初始化网络,开始网络有n 个社区,初始化的eij和ai为:
在这里插入图片描述
(2)依次按照∆Q的最大或者最小的方向进行合并有边相连的社区对,并计算合并后的模块度增量∆Q:
在这里插入图片描述
(3)合并社区对以后修改对社区对称矩阵e 和社区i和j对应的行列;
(4)重复执行步骤(2)和(3),不断合并社区,直至整个网络合并成一个社区为止。

SlashBurn: Graph Compression and Mining beyond Caveman Communities

https://ieeexplore.ieee.org/abstract/document/6807798
在这里插入图片描述

References

[1] Girvan, Michelle & Newman, Mark. (2001). “Community structure in social and biological networks,” proc natl acad sci. 99. 7821–7826.
[2] Blondel, V., Guillaume, J., Lambiotte, R. and Lefebvre, E., 2008. Fast unfolding of communities in large networks. IOPscience.
[3] Traag, V., Aldecoa, R. and Delvenne, J., 2015. Detecting communities using asymptotical surprise. PHYSICAL REVIEW.
[4] V. A. Traag, L. Waltman, and N. J. van Eck, “From Louvain to Leiden: guaranteeing well-connected communities,” Sci. Rep., vol. 9, no. 1, pp. 1–12, 2019, doi: 10.1038/s41598–019–41695-z.
[5] Pons, P. and Latapy, M., n.d. Computing communities in large networks using random walks.

摘抄自:
https://www.cnblogs.com/nolonely/p/6262508.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/5331.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebSocket笔记

1. websocket介绍 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。 HTTP协议和WebSocket协议对比: HTTP是短连接W…

【EXCEL】通过url获取网页表格数据

目录 0.环境 1.背景 2.具体操作 0.环境 windows excel2021 1.背景 之前我用python的flask框架的爬虫爬取过豆瓣网的电影信息,没想到excel可以直接通过url去获取网页表格内的信息,比如下图这是电影信息界面 即将上映电影 (douban.com) 通过excel操作&…

商品信息管理-亿发商品进销存管理系统,批发行业零售门店免费试用

众所周知,批发零售行业面临着商品品类繁多、品牌众多、商品信息量庞大等挑战。同时,商品售价波动频繁,还需要管理商品批次,避免积压过期。针对这些传统批发零售行业的管理难题,加快行业数字化转型成为解决之道&#xf…

不同局域网下使用Python自带HTTP服务进行文件共享「端口映射」

文章目录 1. 前言2. 视频教程3. 本地文件服务器搭建3.1 python的安装和设置3.2 cpolar的安装和注册 4. 本地文件服务器的发布4.1 Cpolar云端设置4.2 Cpolar本地设置 5. 公网访问测试6. 结语 1. 前言 数据共享作为和连接作为互联网的基础应用,不仅在商业和办公场景有…

目标检测——FasterRCNN原理与实现

目录 网络工作流程数据加载模型加载模型预测过程RPN获取候选区域FastRCNN进行目标检测 模型结构详解backboneRPN网络anchorsRPN分类RPN回归Proposal层 ROIPooling目标分类与回归 FasterRCNN的训练RPN网络的训练正负样本标记RPN网络的损失函数训练过程实现正负样本设置损失函数 …

Apache Doris (三十):Doris 数据导入(八)Spark Load 3- 导入HDFS数据

目录 1. 准备HDFS数据 2. 创建Doris表 3. 创建Spark Load导入任务 4. 查看导入任务状态 进入正文之前,欢迎订阅专题、对博文点赞、评论、收藏,关注IT贫道,获取高质量博客内容! 宝子们订阅、点赞、收藏不迷路!抓紧…

echarts实现渐变折线图并添加点击事件

折线图点击事件代码: let myChart = this.$echarts.init(document.getElementById(trendBoxECharts))myChart.getZr().on(click, params => {console.log(params)let pointInPixel = [params.offsetX, params.offsetY]if (myChart.containPixel(grid, pointInPixel)) {//点…

【JAVA】云HIS系统功能菜单知识(一)

一、云HIS特色 云HIS滚动消息栏:质控消息、住院时长、药库结转、患者入院、医嘱停止、新开医嘱、门诊用药不良、出院审核、药品调拨、排班提醒、药品库存、药品过期、药品临期等帮助医生、护士和相关管理人员实时接收院内消息并作出处理。 二、云HIS功能菜单 【预约…

8、gateway使用和原理

一、什么是Spring Cloud Gateway 1、网关简介 网关作为流量的入口,常用的功能包括路由转发,权限校验,限流等。 2、Gateway简介 Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架,定位于取代 Netflix Zuul。相比 …

省电液晶驱动IC,VK2C22G,COG片高抗干扰抗噪系列LCD段码驱动芯片,I2C通信接口

型号:VK2C22G DICE(邦定COB)/COG(绑定玻璃用) VK2C22G概述: VK2C22G是一个点阵式存储映射的LCD驱动器,可支持最大176点(44SEGx4COM)的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据&#…

计算机网络 day7 扫描IP脚本 - 路由器 - ping某网址的过程

目录 network 和 NetworkManager关系: 实验:编写一个扫描脚本,知道本局域网里哪些ip在使用,哪些没有使用? 使用的ip对应的mac地址都要显示出来 计算机程序执行的两种不同方式: shell语言编写扫描脚本 …

C# 通过枚举类型字符串,反射到枚举上

C# 通过枚举类型字符串,反射到枚举上 通过类型字符串,反射出任意类型枚举类型通过反射调用枚举GetTypeByName(EnumName) 为空? 小结 通过类型字符串,反射出任意类型 之前老顾写过一篇博客,通过反射,使用字…

IDEA+java+spring+hibernate+jquery+mysql后台管理系统

IDEA javaspringhibernatejquerymysql后台管理系统 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.修改密码3.我的内容4.我的操作日志5. 我的登陆日志6. 我的登陆授权7. 内容管理8.标签管理9. 搜索词管理10.分类管理11.分类类型12.标签分类13.用户管理14.部门管理15.角色…

Linux系统编程(信号处理机制)

文章目录 前言一、中断,异常,信号的区别二、信号在Linux中的标识三、信号处理相关函数四、代码实验总结 前言 本篇文章我们来讲解信号的处理机制,信号处理在Linux操作系统中必不可少,这一点值得大家注意,信号又会与中…

golang 日志库zap和日志切割实践

介绍 在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能: 能够将事件记录到文件中,而不是应用程序控制台。 日志切割-能够根据文件大小、时间或间隔等来切割日志文件。 支持不同的日志级别。例如INFO,DEBUG&a…

深度学习与神经网络

人工智能,机器学习,深度学习,神经网络,emmmm,傻傻分不清楚,这都啥呀,你知道吗?我不知道。你知道吗?我不知道。 来来来,接下来,整硬菜&#xff1a…

『红外图像 数据增强』DDE(Digital Detail Enhancement)算法

DDE处理的细节 分离背景层和细节层:使用特殊的滤波器,将图像分成背景层和细节层。背景层通常包含低频信息,而细节层包含高频信息。 对背景层进行灰度增强:通过对背景层应用适当的灰度增强算法,提高背景层的对比度和视…

轻量级应用服务器开放端口

关于使用浏览器连接自己所写的TCP进程时,由于没有开放端口,而且搜索到对应的操作来进行开放端口,所以在完成开放端口后特意做个笔记,防止忘记。 登录自己所使用的服务器的网站找到控制台 找到轻量级应用服务器 找到所需要开放端口…

【机器学习】分类算法 - KNN算法(K-近邻算法)KNeighborsClassifier

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:零基础快速入门人工智能《机器学习入门到精通》 K-近邻算法 1、什么是K-近邻算法?2、K-近邻算法API3、…

最强自动化框架,Pytest自动化测试-动态切换环境实战(超细整理)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 在开始前&#xf…