泛运筹理论初探——Louvain算法简介

article/2025/9/27 20:03:16

图论-图论算法之Louvain

社区发现算法简介之Louvain算法
    在本次文章中,我们将会介绍经典的社区发现方法,也就是Louvain算法。这种算法在社群发现等应用的效果较好,是比较经典的图挖掘类算法,在金融风控行业挖掘诈骗团伙等应用里有比较显著的效果。社区发现方法的目标是在整个图里面发现一些有聚集性特征的群体,这些群体的特征是内部的互相联系较为紧密,外部和其他点的联系较为稀疏。下面我们对算法思路和步骤进行介绍。
    Louvain算法的核心就是模块度的计算,它每一次将模块度变化更大的邻居团伙作为当前点的目标团伙,反复计算迭代后可以得到最终的社团发现结果。其中模块度的计算公式如下所示,我们发现其中A其实就是全图的邻接矩阵的某个位置的元素,而m其实是A矩阵所有元素的求和结果,这个公式的最后面有一个0-1函数,它的作用是如果两个点不属于同一个社区,那么将设置Q值为0,也就是不需要计算。
在这里插入图片描述
    在得到了模块度的公式后,我们进一步求模块度的变化结果,也就是计算当新的点加入到社区的时候,对于原有两个社区的变化,而公式也是用新的模块度Q值去减去原有两个旧的模块度Q值,经过化简后得到下述的式子。其中K(i,in) 指的是当前社区内部的所有节点和新的节点i所连接的边的权值之和;而K(i) 则是所有和节点i直接相连的边的权值之和;Σtot 的含义是当前社区边内部的权重之和再加上当前社区和其他社区相连接的边的权值之和的结果。
在这里插入图片描述
    根据上述的公式,我们只需要不断的计算模块度变化值就可以了,直到迭代计算的次数达到了最大上限的次数,或者整体的模块度已经不发生变化的时候就可以结束算法。那么根据上述公式和思路,我们总结的Louvain算法步骤如下:
    1)初始化参数设置,比如最大迭代次数,每个点的模块度初始值等参数。
    2)遍历每个节点,比较每个节点和周围相邻社区(最开始周围社区是节点,后续的迭代中可能变成多个点聚集的社区),计算当前节点和周围社区的模块度变化,也就是ΔQ,将每个节点加入到模块度大于0并且具有最大模块度增量的社区之中,如果周围的社区计算得到的模块度增量都是小于0的,则无需操作,保留当前节点并且不加入到任意社区中。
    3)对上一步骤得到的结果进行重构,也就是将各个社区重新合并,把原有的图转化为新的超图,可以认为新的社区是一个大的“节点”,而两个大的“节点”之间的边的权重就是社区内部所有节点互相的边的距离权重之和,从而构建新的超图后,再次进行迭代计算模块度变换。
    4)反复重复上述步骤后,直到整体的模块度不再变化或者达到了最大的迭代次数后,停止该算法。
在这里插入图片描述
    总的来说,本文提及的Louvain算法是比较经典和实用的算法,在真实场景中经常被使用,因为它本身的原理比较经典,而且算法的核心思路是符合图自身结构的聚类趋势的,但是需要注意的是Louvain算法针对的是无向图,如果是有向图则无法使用,或者尽量弱化为无向图。Louvain算法是初学者需要掌握的,可以帮助在后续学习其他算法的过程中打好基础,并且解决真实应用里的问题。


http://chatgpt.dhexx.cn/article/2kaKWqj1.shtml

相关文章

Louvain社区划分算法及Java语言实现

Louvain社区划分算法及Java语言实现 社区划分算法处理的对象Louvain社区发现算法全局模块度单层算法过程多层算法过程Java代码实现图实现模块度计算单层louvain实现多层louvain实现运行入口,使用方法 社区划分算法处理的对象 社区划分算法又称社区发现算法&#xf…

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

本文结构安排 图聚类简介 正则化割 Louvain 非负矩阵分解(NMF) 其他常见方法 图(graph):是一种由点和边集构成的结构 G ( V , E ) G(V,E) G(V,E) 图聚类(graph clustering) : 将点划分为不同的簇,使得簇内的边尽量多,簇之间…

Louvain算法在反作弊上的应用

作者 | ANTI 一、概述 随着互联网技术的发展,人们享受互联网带来的红利的同时,也面临着黑产对整个互联网健康发展带来的危害,例如薅羊毛、刷单、刷流量/粉丝、品控、诈骗、快排等等,反作弊作为打击黑产的中坚力量,持…

community_louvain社群划分方法

第一、 这个方法是一个典型的EM算法。定义了一个“模块度”的量化评价指标,然后结合上优化方法,不断地优化模块度,最终得到社群划分的结果。 第二、模块度的定义,具体如下: 对于图中任意两个节点,i和j 1、…

Louvain 社团发现算法学习(我的java实现+数据用例)

为了大家方便,直接把数据放在github了: https://github.com/qq547276542/Louvain 算法介绍: Louvain 算法是基于模块度的社区发现算法,该算法在效率和效果上都表现较好,并且能够发现层次性的社区结构,其…

‘ network communites’(网络社区)(二)(louvain算法实现)

引言: 在(一)中我们学习到了什么是‘network communites’(网络社区)及其目标函数Q的求取,接下来我们要说明的是,我们要通过怎样的算法来实现将你的网络分成若干个集群。 一:louva…

neo4j实现Louvain算法

文章目录 例子一:创建一个属性图(无权)一、属性图如下二、实现算法1.stream模式执行Louvain算法(匿名图)2.结果如下 总结一:例子二:创建一个属性图(有权)一、属性图如下二…

社区发现系列03-Louvain算法分辨率

1、分辨率局限 louvain算法存在的问题:分辨率局限。就是说当通过优化模块度来发现社区结构时,网络在存在一个固有的分辨率局限,导致一些规模较小但是结构显著的社区淹没在大的社区中,无法被识别到。 造成这个问题的根本原因是模块…

(Leiden)From Louvain to Leiden:guaranteeing well-connected communities

Leiden算法 论文地址 Leiden算法是近几年的SOTA算法之一。 Louvain 算法有一个主要的缺陷:可能会产生任意的连接性不好的社区(甚至不连通)。为了解决这个问题,作者引入了Leiden算法。证明了该算法产生的社区保证是连通的。此外证明了当Leiden算法迭代应…

社区发现不得不了解的库,包含Louvain 算法、Girvan-Newman 算法等多种社区发现算法,还具有可视化功能

熟知社区发现算法,你不能错过这个 Python 库。它涵盖 Louvain 算法、Girvan-Newman 算法等多种社区发现算法,还具有可视化功能。 网络是由一些紧密相连的节点组成的,并且根据不同节点之间连接的紧密程度,网络也可视为由不同簇组成…

【积】有向图中的louvain社区检测(二)

有向图中的louvain社区检测 请学着自己长大,参考连接《无向louvain社团算法》 无向到有向的修改真的很简单。如果你连这个都做不到,建议不要用了。每个算法与数据匹配的时候,都会对数据或者算法小修。如果你连小修都做不到的话,…

Louvain算法实现

谢谢平台提供-http://bjbsair.com/2020-04-13/tech-info/65263.html 社区查找找的算法 Louvain是一种无监督算法(执行前不需要输入社区数量或社区大小),分为两个阶段:模块化优化和社区聚集[1]。 第一步完成后,接下来…

Louvain 算法原理 及设计实现

模块度: Louvain算法是一种基于图数据的社区发现算法。原始论文为:《Fast unfolding of communities in large networks》。 算法的优化目标为最大化整个数据的模块度,模块度的计算如下: 其中m为图中边的总数量,k_i表示所有指向节点i的连边权重之和,k_j同理。A_{i,j} 表…

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值的…