包名称是community,但在pypi上引用为python-louvain

由Louvain算法生成的树状图的最高分区

community.best_partition(graph, partition=None, weight='weight', resolution=1.0, randomize=None, random_state=None)

使用Louvain启发式算法计算最大化模块度图节点的分区(或尝试…)

这是最高模块度的分区,即由Louvain算法生成的树状图的最高分区。

  • graph:networkx.Graph
    要进行分解的networkx图

  • partition:dict,可选
    算法将使用此节点的分区。它是一个字典,其中键是节点,值是社区。

  • weight:str,可选
    在图中用作权重的键。默认为’weight’。

  • resolution:double,可选
    更改社区的大小,默认为1。

    表示在“Laplacian Dynamics and Multiscale Modular Structure in Networks”中描述的时间,R. Lambiotte,J.-C. Delvenne,M. Barahona

  • randomize:boolean,可选
    随机化节点评估顺序和社区评估顺序以获得每次调用时的不同分区

  • random_state:int,RandomState实例或None,可选(默认=None)
    如果是int,则random_state是随机数生成器使用的种子;

    如果是RandomState实例,则random_state是随机数生成器;如果是None,则随机数生成器是np.random使用的RandomState实例。

  • partition:字典
    分区,其中社区编号从0到社区数
  • NetworkXError
    如果图不是无向图
  • generate_dendrogram
    获取所有分解级别
  • 使用Louvain算法
  • 参考文献:

  • large networks. J. Stat. Mech 10008, 1-12(2008).
  • # 基本用法
    import community as community_louvain
    import networkx as nx
    G = nx.erdos_renyi_graph(20, 0.1)
    partition = community_louvain.best_partition(G)
    

    基本用法:

  • 导入communitynetworkx
  • 创建一个随机的Erdos-Renyi图
  • 使用best_partition函数计算图节点的最优分区,并将结果保存在partition变量中
  • partition
    Out[7]: 
    {0: 0,
     1: 3,
     2: 2,
     3: 3,
     4: 0,
     5: 3,
     6: 1,
     7: 2,
     8: 2,
     9: 2,
     10: 2,
     11: 0,
     12: 2,
     13: 2,
     14: 0,
     15: 1,
     16: 3,
     17: 2,
     18: 3,
     19: 1}
    

    显示带有其社区的图:

    # 显示带有其社区的图:
    # 由于Erdos-Renyi图没有真正的社区结构,
    # 所以加载karate俱乐部图代替
    import community as community_louvain
    import matplotlib.cm as cm
    import matplotlib.pyplot as plt
    import networkx as nx
    G = nx.karate_club_graph()
    # 计算最佳分区
    partition = community_louvain.best_partition(
    项目地址:https://gitcode.com/taynaud/python-louvain Python-Louvain 是一个由 Thomas Aynaud 开发Python 库,专门用于执行网络中的社区检测。基于著名的 Louvain 方法,这个库提供了简洁、高效的接口,使得在大规模图数据上查找社群结构变得简单。 技术分析... import community as community_louvain import matplotlib.cm as cm import matplotlib.pyplot as plt import networkx as nx # load the karate club 如果一张图是对一片区域的描述的话,将这张图划分为很多个子图。当子图之内满足关联性尽可能大,而子图之间关联性尽可能低时,这样的子图可以称之为一个社区社区发现算法 社区发现算法有很多,例如LPA,HANP,SLPA以及Louvain,不同的算法划分社区的效果不尽相同。Louvain算法是基于模块社区发现算法,该算法在效率和效果上都表现较好,并且能够发现层次性的社区结构,其优化目标是最大化... 一、社区发现概述根据图论,加权网络表示为𝐺=(𝑉,𝐸,𝑊),未加权网络表示为𝐺=(𝑉,𝐸),其中𝑉和𝐸表示节点和边的集合,𝑊分别表示𝐸相应的权重,以连接的强或容量为单位。在未加权的网络中,𝑊被视为1。子图𝑔⊆𝐺是保留原始网络结构的图划分。子图的划分遵循预定义(pre-define)的规则,不同的规则可能会导致不同形式的子图。社区是代表真实社会现象的一种子图。换句话说,社区是一组具有共同特征的人或对象。 奇技指南在海量的信息流中,通过精准的算法给用户推荐其感兴趣的内容,已经成为了一个产品吸引用户,获取收益的极其重要的方式。本篇为算法系列文章,将为大家分享360的算法团队在实践中积累的算法知识及经验,欢迎大家交流分享~Louvain算法是一种基于多层次优化Modularity的算法,具有快速、准确的优点,在效率和效果上都表现比较好,并且能够发现层次性的社区结构,被认为是性能最好的社区发现算法之一。模... ​ GenLouvain 实现的基本框架参考了 https://github.com/xmweijh/CommunityDetection ,用一个 Vertex 类来表示、保存节点的节点编号、社区编号和权重等,并用一个 GenLouvain 类负责核心算法的实现。从算法步骤可以看出,计算耗时比较多的是第一层的社区划分,之后随网络的重建,节点的数目大大减少,计算好时不断缩短。视一个社区为下一阶段的网络中的一个节点,社区内节点之间的边的权重转化为新节点的内部权重,社区之间的边的权重转为为新节点之间的边权。