neo4j实现Louvain算法

article/2025/9/26 22:50:05

文章目录

  • 例子一:创建一个属性图(无权)
  • 一、属性图如下
  • 二、实现算法
    • 1.stream模式执行Louvain算法(匿名图)
    • 2.结果如下
  • 总结一:
  • 例子二:创建一个属性图(有权)
  • 一、属性图如下
  • 二、算法实现
    • 1.stream模式执行Louvain算法(命名图)
    • 2.结果如下
    • 3.带权值计算
    • 4.结果如下
    • 5.含原始社区属性计算
    • 6.结果如下
  • 总结二:


例子一:创建一个属性图(无权)

这次用的方法是本地load导入的,两个代码块分别导入节点、节点间关系。

    load csv with headers from "file:///sw-nodes.csv" as rowmerge (place:Place{id:row.id})
    load csv with headers from "file:///sw-relationships.csv" as rowmatch (origin:Place{id:row.src})match (destination:Place{id:row.dst})merge (origin) - [r:DEPENDS_ON]->(destination)

一、属性图如下

在这里插入图片描述

二、实现算法

1.stream模式执行Louvain算法(匿名图)

CALL gds.louvain.stream({nodeProjection: 'Place',relationshipProjection: {TYPE: {type: 'DEPENDS_ON',orientation: 'undirected',aggregation: 'NONE'}},includeIntermediateCommunities:True
}) YIELD nodeId, communityId
RETURN gds.util.asNode(nodeId).id AS name, communityId
ORDER BY name ASC

参数<>includeIntermediateCommunities:True,为真的时候,显示划分时出现的中间社团,结果最后一列表示该节点都曾被划分到哪个社团。中间一列表示节点最后所在社团。

2.结果如下

在这里插入图片描述

在这里插入图片描述

总结一:

如果你熟悉其他算法,会发现这个结果和连通分量算法(Connected components algorithm)结果一样,因为这是属性图中只包含了三个独立的社团,很容易区分开来。而且这个属性图本身是无权的。

例子二:创建一个属性图(有权)

CREATE(nAlice:User {name: 'Alice', seed: 42}),(nBridget:User {name: 'Bridget', seed: 42}),(nCharles:User {name: 'Charles', seed: 42}),(nDoug:User {name: 'Doug'}),(nMark:User {name: 'Mark'}),(nMichael:User {name: 'Michael'}),(nAlice)-[:LINK {weight: 1}]->(nBridget),(nAlice)-[:LINK {weight: 1}]->(nCharles),(nCharles)-[:LINK {weight: 1}]->(nBridget),(nAlice)-[:LINK {weight: 5}]->(nDoug),(nMark)-[:LINK {weight: 1}]->(nDoug),(nMark)-[:LINK {weight: 1}]->(nMichael),(nMichael)-[:LINK {weight: 1}]->(nMark);

一、属性图如下

在这里插入图片描述

二、算法实现

1.stream模式执行Louvain算法(命名图)

图命名:myGraph

CALL gds.graph.create('myGraph','User',{LINK: {orientation: 'UNDIRECTED'}},{nodeProperties: 'seed',relationshipProperties: 'weight'}
)

结果如下:

在这里插入图片描述

执行算法:

CALL gds.louvain.stream('myGraph',{includeIntermediateCommunities: true}
)
YIELD nodeId, communityId, intermediateCommunityIds
RETURN gds.util.asNode(nodeId).name AS name, communityId, intermediateCommunityIds
ORDER BY name ASC

2.结果如下

在这里插入图片描述

这里划分两个社团

3.带权值计算

CALL gds.louvain.stream('myGraph',{ relationshipWeightProperty: 'weight' ,includeIntermediateCommunities: true}
)
YIELD nodeId, communityId, intermediateCommunityIds
RETURN gds.util.asNode(nodeId).name AS name, communityId, intermediateCommunityIds
ORDER BY name ASC

4.结果如下

在这里插入图片描述

带权值之后,划分了三个社团

5.含原始社区属性计算

参数<>seedProperty:Used to set the initial community for a node. The property value needs to be a number.
用于设置节点的初始社区。属性值必须是数字。


CALL gds.louvain.stream('myGraph',{ seedProperty: 'seed',relationshipWeightProperty: 'weight' ,includeIntermediateCommunities: true}
)
YIELD nodeId, communityId, intermediateCommunityIds
RETURN gds.util.asNode(nodeId).name AS name, communityId, intermediateCommunityIds
ORDER BY name ASC

6.结果如下

在这里插入图片描述

其实仅带有seedProperty属性,去掉关系权重“relationshipWeightProperty: ‘weight’ ,”这句话,该属性图可以直接划分为两个社区,结果和本例子初次执行结果一致,社团【2】【5】。因为有权重的影响Alice被划分出去,最终三个社团,这更加符合现实情况。

总结二:

这个算法的最优解还是需要考虑权重、迭代次数等等因素,从而符合最终预期目标,如果有需要可以参考文档(有需要请留言)。


http://chatgpt.dhexx.cn/article/3MC5F0DI.shtml

相关文章

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

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

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

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

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

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

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

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

Louvain算法实现

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

Louvain 算法原理 及设计实现

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

Louvain算法介绍

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

Python社区发现—Louvain—networkx和community

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

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

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

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

一、社区发现概述 根据图论&#xff0c;加权网络表示为&#x1d43a;(&#x1d449;,&#x1d438;,&#x1d44a;)&#xff0c;未加权网络表示为&#x1d43a;(&#x1d449;,&#x1d438;)&#xff0c;其中&#x1d449;和&#x1d438;表示节点和边的集合&#xff0c;&…

社区发现算法之——Louvain

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

python-louvain

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

louvain算法

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

社区发现算法——Louvain 算法

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

Win10系统导入证书私钥

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

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

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

Win10下安装 Redis

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

win10 安装配置Git

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

win10系统激活遇到的问题

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

Win10添加ssh公钥

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