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

article/2025/9/27 22:09:19

引言:

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

一:louvain算法的大体介绍:

我们这里用到的把网络划分成若干个集群的算法就是louvain算法。

它有几个优势:

(1):louvain算法被广泛应用。

(2):它可以快速实现集群的划分。

(3):集群的结果很好。

(4):在实践中的表现很好。

二:实现louvain算法的两个步骤:

(1):最大化Modularity(也就是Q函数)

首先,我们输入进一个原始网络,将其中的每一个节点看做是一个‘community’。

然后,对于其中任意一个节点,louvain算法将做以下两个步骤:

(1):假如选定节点i,对节点i的每一个邻居节点j计算出\Delta Q(下面详细步骤会说明这个计算)

(2):   把节点i移动到计算出最大的\Delta Q的邻居节点j当中,使节点i,j成为一个新的‘community’。

(2):把识别出来的‘community’聚合

三:具体步骤实现:

(1):最大化Modularity(也就是Q函数)

如下图:

 

\DeltaQ的计算就是把节点i从集群D转移到集群C对网络Modularrity(Q函数在作者(一)中讲到的目标函数)的变化,其中可分成两个公式,一个是把节点i移除集群D中的Q变化,另一个是将节点i移到新的集群C中Q的变化。(因为这两个步骤相似,所以下文中只提到将节点i移到新的集群C中Q的变化的实现)。

如下图:

计算要𝜟𝑸 (𝒊 → 𝑪)首先我们要定义两个新的量

𝜮𝒊𝒏:就是在集群c内部的边有几条

𝜮𝒕𝒐𝒕:就是在集群c内部所有节点的边数

(具体形式如图中的黑粗边)

然后我们有如图中的公式:

ps:第一个恒等于号后面的函数是我们在(‘network communites’(一))中定义的对每个集群的的模块化程度(Modularity),而第二个等于号后面的式子是将前面的式子的展开,而第三个等于号后面用我们上面的定义替换。

以上第一步算出来了Q(C)接下来还需要定义两个量:

如图:

𝒌𝒊,𝒊𝒏:你要添加进集群C的节点i与集群c中节点的连接边的数量。

𝒌𝒊 :指节点i所有的边的数量

(具体形式如图中的黑粗边)

这样我们就可以得出如下图公式:

Q(before)Q(after)是节点i插入集群C前后的模块化程度的变化,

Q(C)中我们上文已经得到

Q({i})是由目标函数Q定义而来,第一项因为把节点i作为一个小的‘community’其内部没有边,所以为0,第二项因为小‘community’内部只有i一个节点所以没有k_j,只有k_i.

Q(C+{i})中绿色框的位置是因为节点i的加入而导致集群c中的内部边𝜮𝒊𝒏和全部边𝜮𝒕𝒐𝒕的变化导致的变化

所以我们可以得到下图中第一个式子:

然后将第一个式子和第二个式子相加得到第三个式子。

最后将节点i对每个集群计算的结果进行比对,结果最大的就把节点i加入到那个集群中。

(2):把识别出来的‘community’聚合

在(1)步骤中,我们已经把集群都展示出来了,在(2)步骤中,我们就把属于每一个集群的所有节点都融入到一个‘super node’(超级节点)(每一个集群一个)。

四:效果图

如下图是经过一轮louvain算法后的集群效果图:

五:系列传送门:

‘ network communites’(网络社区)(一)(介绍和目标函数的建立)_小林学编程的博客-CSDN博https://blog.csdn.net/weixin_57643648/article/details/123545748?spm=1001.2014.3001.5501

    https://blog.csdn.net/weixin_57643648/article/details/123652501icon-default.png?t=M276https://blog.csdn.net/weixin_57643648/article/details/123652501


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

相关文章

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

社区发现算法——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后&…