社区检测算法leiden

社区检测算法leiden

1 介绍

Leiden 算法是一种用于在复杂网络中进行社区检测(Community Detection)的先进图聚类算法。它是在经典的 Louvain 算法基础上改进而来,旨在更高效、更高质量地识别网络中紧密连接的节点群组(即“社区”)。

# leidenalg开发文档
https://leidenalg.readthedocs.io/en/latest/index.html

# Github地址Python实现
https://github.com/vtraag/leidenalg

# Github地址C++实现
https://github.com/vtraag/libleidenalg

graspologic是一个图统计算法包(早期由微软维护),主要包括以下功能。

  • 图嵌入 (Graph Embedding):将网络中的节点映射到低维向量空间,便于进行可视化和后续分析。支持单图和多图的多种嵌入方法。

  • 统计推断 (Statistical Inference):提供假设检验工具,例如用于比较两个图是否存在显著差异的半参数检验

  • 数据预处理 (Preprocessing):包含针对图数据的清洗、规范化等操作,为后续分析做好准备。

  • 聚类分析 (Clustering):提供适用于节点或图群体的聚类方法。

  • 可视化 (Visualization):内置了用于展示图结构和高维数据的绘图函数。

# graspologic开发文档
https://graspologic-org.github.io/graspologic/latest/

# Github地址
https://github.com/graspologic-org/graspologic

2 使用leidenalg实现leiden算法

import igraph as ig
import leidenalg as la

# 1. 创建一个图 (这里使用igraph内置的Zachary空手道俱乐部图作为示例)
g = ig.Graph.Famous('Zachary')

# 2. 运行Leiden算法进行社区发现
# 这里使用基于模块度优化的分区方法
partition = la.find_partition(g, la.ModularityVertexPartition)

# 3. 查看结果
# partition.membership 是一个列表,表示每个节点所属的社区ID
print("节点社区归属:", partition.membership)

# 可以计算并打印此次划分的模块度,值越高代表社区结构越好
print("模块度:", partition.quality())

3 使用graspologic实现leiden算法

import networkx as nx
from graspologic.partition import hierarchical_leiden

# 1. 创建一个示例图 (这里使用 NetworkX 自带的空手道俱乐部数据)
graph = nx.karate_club_graph()

# 2. 使用 graspologic 进行层次化 Leiden 聚类
# max_cluster_size 控制每个社区的最大节点数,数值越小社区划分越细
community_mapping = hierarchical_leiden(
    graph,
    max_cluster_size=10,
    random_seed=123
)

# 3. 查看结果
for partition in community_mapping:
    # partition.node: 节点ID
    # partition.cluster: 所属社区ID
    # partition.level: 层级(0为最底层,数字越大层级越高)
    print(f"节点 {partition.node} 属于社区 {partition.cluster}, 层级 {partition.level}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值