Louvain 算法原理 及设计实现

article/2025/9/27 22:10:41

模块度:

Louvain算法是一种基于图数据的社区发现算法。原始论文为:《Fast unfolding of communities in large networks》。

算法的优化目标为最大化整个数据的模块度,模块度的计算如下:


其中m为图中边的总数量,k_i表示所有指向节点i的连边权重之和,k_j同理。A_{i,j} 表示节点i,j之间的连边权重。

有一点要搞清楚,模块度的概念不是Louvain算法发明的,而Louvain算法只是一种优化关系图模块度目标的一种实现而已。

Louvain算法的两步迭代设计:

最开始,每个原始节点都看成一个独立的社区,社区内的连边权重为0.

  1. 算法扫描数据中的所有节点,针对每个节点遍历该节点的所有邻居节点,衡量把该节点加入其邻居节点所在的社区所带来的模块度的收益。并选择对应最大收益的邻居节点,加入其所在的社区。这一过程化重复进行指导每一个节点的社区归属都不在发生变化。
  2. 对步骤1中形成的社区进行折叠,把每个社区折叠成一个单点,分别计算这些新生成的“社区点”之间的连边权重,以及社区内的所有点之间的连边权重之和。用于下一轮的步骤1。

该算法的最大优势就是速度很快,步骤1的每次迭代的时间复杂度为O(N),N为输入数据中的边的数量。步骤2 的时间复杂度为O(M + N), M为本轮迭代中点的个数。

算法实现:

数据结构设计:

算法数据结构的设计主要有两方面的考虑:

1.  如何高效地存储图中的节点和节点之间的关系

2. 如何在设计的数据结构上高效地扫描数据、进行算法迭代。
当前一些开源的算法实现主要通过hash表或set的结构来存储节点和节点之间的关系。
主要有两个缺点:
1.  维护hash 或 集合结构本身就需要不少内存开销
2. 遍历过程中需要不断地创建、销毁、清空对应的Hash 或 Set 结构,尤其是在遍历不同的节点的邻居节点以及社区这点时。
而且,在遍历过程中,结构对元素的访问也并不是严格O(1)的。

出于以上考虑,我们设计一种更高效的数据结构来存储图中的节点和边&

http://chatgpt.dhexx.cn/article/042giuQW.shtml

相关文章

Louvain算法介绍

Louvain算法 一种基于模块度的图算法模型,与普通的基于模块度和模块度增益不同的是,该算法速度很快,而且对一些点多边少的图,进行聚类效果特别明显。 算法流程: 1、初始时将每个顶点当作一个社区,社区个数与…

Python社区发现—Louvain—networkx和community

社区 如果一张图是对一片区域的描述的话,将这张图划分为很多个子图。当子图之内满足关联性尽可能大,而子图之间关联性尽可能低时,这样的子图可以称之为一个社区。 社区发现算法 社区发现算法有很多,例如LPA,HANP&am…

关于在networkx中使用louvain算法报错的问题

module ‘networkx.algorithms.community’ has no attribute ‘louvain_communities’ Networkx是复杂网络科学中常用的python包,louvain也是常用的社团发现算法之一。在networkx的文档中也有描述。louvain_communities — NetworkX 2.8.5 documentationhttps://n…

【知识图谱】Louvain、LPA等5类经典社区发现算法 Python 实战

一、社区发现概述 根据图论,加权网络表示为𝐺(𝑉,𝐸,𝑊),未加权网络表示为𝐺(𝑉,𝐸),其中𝑉和𝐸表示节点和边的集合,&…

社区发现算法之——Louvain

1、什么是社区 如果一张图是对一片区域的描述的话,我们将这张图划分为很多个子图。当子图之内满足关联性尽可能大,而子图之间关联性尽可能低时,这样的子图我们可以称之为一个社区。 2、社区发现算法及评价标准 社区发现算法有很多&#xf…

python-louvain

安装 louvain当前最新版本:0.14 pip install python-louvain由于是处理社区的数据,这里还是安装networkx pip install networkx使用 不妨来运行下一个案例: import community as community_louvain import matplotlib.cm as cm import m…

louvain算法

简介 louvain算法由比利时鲁汶大学的 Vincent D.Blondel 等人于 2008 年提出,因其能以较高的效率计算出令人满意的社区识别结果,是近年来最多被提及和使用的社区识别算法。 Louvain算法是一种基于模块度(模块度越大则表明社区划分效果越好。Q值的…

社区发现算法——Louvain 算法

Louvain 算法 原始论文为:《Fast unfolding of communities in large networks》。 所以又被称为Fast unfolding算法。 Louvain算法是一种基于模块度的社区发现算法。其基本思想是网络中节点尝试遍历所有邻居的社区标签,并选择最大化模块度增量的社区…

Win10系统导入证书私钥

一、Win10系统导入证书私钥 二、直接点击“下一步”即可 三、输入私钥密码,“导入选项”按下图所示选择,点击“下一步” 四、默认选择“自动选择证书存储”,点击“下一步” 五、点击“完成”,弹出“导入成功”窗户,则私…

解决Win10无法安装没有数字签名驱动的问题

建议按如下步骤操作后,手动安装没有数字签名的驱动,亲测可以使用,之前也为没办法安装没有数字签名的驱动烦躁的不行,修改完启动项后,就安装成功了。 1.第一步打开开始菜单,选择设置 2.第二步打开更新和安全…

Win10下安装 Redis

Win 10下安装 Redis 一、安装环境二、下载windows版本的Redis三、安装Redis四、安装服务五、启动服务六、测试Redis 写在前面 Redis 是一个开源使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。 Redis 通常被称作数据结构数据库&…

win10 安装配置Git

1、下载Git: 官网下载地址:Git - Downloading Package 选择相应的版本下载git 百度地址:链接:https://pan.baidu.com/s/1Y_P_ek1Pb9Zt04n3wsAlzA 提取码:3p60 2、 安装: 环境:Windows 10 6…

win10系统激活遇到的问题

1. 0xC004F069 提示“0xC004F069 在运行 Microsoft Windows 非核心版本的计算机上,运行“slui.exe 0x2a 0xC004F069”,多半是因为当前的windows系统不是最新的,需要更新(更新win10) 2. 0xFFFFFFFF 我这里在解决1后&…

Win10添加ssh公钥

1,创建ssh-key ssh-keygen.exe 2,运行ssh-agent Start-Service ssh-agent PS C:\Users\Administrator\.ssh> Start-Service ssh-agent Start-Service : 由于以下错误无法启动服务“OpenSSH Authentication Agent (ssh-agent)”: 无法启动计算机“…

Win10 PowerToys官方免费效率小工具集

文章目录 颜色选择器​FancyZones 窗口增强管理器PowerToys Run 应用启动器Keyboard Manager 键盘映射管理器 / 键位修改工具PowerRename 强力批量文件重命名工具File Explorer (Preview Pane) 文件管理器“预览窗格”Image Resizer 批量图片处理器 (尺寸修改/缩放/转换格式)Wi…

关于如何获取Win10 蓝牙Link Key的方法

本文记录如何获取Win10 蓝牙Link Key信息: 使用Win10 Notebook打开蓝牙, 配对连接上设备后,蓝牙Link Key的显示位置在: 计算机 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys 但执行”rege…

win环境下SSH key 配置

从Gitlab上拉取代码报错: Warning: Permanently added gitlab.wang.cn,47.94.8.13 (ECDSA) to the list of known hosts. Connection closed by 47.94.148.123 port 22 Could not read from remote repository. Please make sure you have the correct access rig…

Win10系统Git安装,及ssh key配置

文章目录 前言一、安装Git1. 下载并安装2. 报错及解决方法 二、生成SSH key1. 鼠标右键点击 Git Bash here2. 依次执行以下命令: 三、Gitlab中配置SSH key1. 用笔记本打开 C:\Users\Administrator\\.ssh\id_rsa.pub,复制全部内容2. 打开Gitlab中 user se…

在Win10下使用AutoHotKey为软件指定默认输入法

引子 最近使用MathType较为频繁,然MathType每次打开都是系统默认的中文输入法,导致打公式时必须先切换成英文输入法才好使用,由此萌生了为其指定默认输入法的想法。 经验借鉴 通过在搜索引擎上检索后,我找到:根据不…

win10本地安装部署ClickHouse

ClickHouse可以在任何具有x86_64,AArch64或PowerPC64LE CPU架构的Linux,FreeBSD或Mac OS X上运行。 目前在win10系统上面运行,需要安装win10的ubuntu子系统。需要开通,勾选,如图。 勾选以后,直接在microso…