LOUVAIN——社交网络挖掘之大规模网络的社区发现算法

article/2025/9/27 19:56:02

LOUVAIN——社交网络挖掘之大规模网络的社区发现算法

===

算法来源

该算法来源于文章Fast unfolding of communities in large networks,简称为Louvian。

算法原理

Louvain算法是基于模块度(Modularity)的社区发现算法,该算法在效率和效果上都表现比较好,并且能够发现层次性的社区结构,其优化的目标是最大化整个图属性结构(社区网络)的模块度。

其中需要理解的核心点有:

  • a、模块度Modularity的定义,这个定义是描述社区内紧密程度的值Q;
  • b、模块度增量delta Q,即把一个孤立的点放入一个社区C后,计算Modularity的变化,其中计算过程的要点是,首先计算1个点的Modularity,和社区C的Modularity,再计算合并后新社区的Modularity,新社区的Modularity减去前两个Modularity就是delta Q。

对上述公式的理解是,将delta Q展开其等价于1/2 *( k_i,in/m - Sum_tot/m *ki/m ),其中k_i,in/m表示的是将孤立的节点和社区C放在一起对整个网络Modularity的影响,而Sum_tot/m和ki/m分别表示孤立的节点和社区C分开式分别对整个网络Modularity的影响,所以他们的差值就反应了孤立的节点放入社区C前后对整个网络Modularity的影响。

算法的计算过程如下:

  • a、每个点作为一个community,然后考虑每个community的邻居节点,合并到community,然后看delta Q;找到最大的正delta Q,合并点到community;多进行几轮,至不再变动,那么结束;
    其中存在的问题是,不同的节点访问顺序将导致不同的结果,试验中发现这个顺序对结果影响不大,但是会在一定程度上影响计算时间。

  • b、将新的community作为点,重复上述过程。那么如何确定新的点之前的权重呢?答案是将两个community之间相邻的点之间的权重和作为两个community退化成一个点后的新的权重。

该算法的优点主要有3个:a、易于理解;b、非监督;和c、计算快速,最后我们可以得到的结果是层次化的社区发现结果。

spark实现

https://github.com/Sotera/spark-distributed-louvain-modularity

Louvain结果示意图

社区结果发现示意图一
社区结果发现示意图二

算法的改进

还有其加速实现的论文,文章的题目是:A New Randomized Algorithm for Community Detection in Large Networks,其实现方式比较直接,就是考虑一个点周围的百分之多少点进行归并。可以在spark下面通过类似于多路归并来实现。

其他参考资料

  • http://www.cnblogs.com/allanspark/p/4197980.html
  • https://www.quora.com/Is-there-a-simple-explanation-of-the-Louvain-Method-of-community-detection

http://chatgpt.dhexx.cn/article/cDU88MEh.shtml

相关文章

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

图论-图论算法之Louvain 社区发现算法简介之Louvain算法 在本次文章中,我们将会介绍经典的社区发现方法,也就是Louvain算法。这种算法在社群发现等应用的效果较好,是比较经典的图挖掘类算法,在金融风控行业挖掘诈骗团伙等应用…

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…