【问题标题】:Community detection and comparison in igraphigraph 中的社区检测和比较
【发布时间】:2014-01-03 09:29:50
【问题描述】:

我正在使用igraph 中的multilevel 算法来检测同一组节点之间的社区在一段时间内(即,将产生多个且可能不同的集群)节点集)。关于检测算法的输出,我有两个问题(也可能适用于igraph中的其他检测算法):

  1. 算法如何决定成员分配?换句话说,是否有任何规则或模式来决定将哪些节点分配给结果 VertexClustering 对象的第一个子图,哪些节点将分配给第二个子图,依此类推?

  2. 如果存在某种一致的成员分配模式,是否有一种方法可以比较在不同时间检测到的两个社区的成员?

【问题讨论】:

    标签: python igraph


    【解决方案1】:

    【讨论】:

    • 感谢您的建议。关于#1,我想一个例子将阐明我的实际用例:如果节点1, 2 and 3 被分组到一个集群中,索引为VertexClustering 对象返回的第一个社区,那么包含这些节点的集群将作为第一个返回如果我稍后在同一组节点上再次调用该方法,是否会在集群对象中加入社区? (当然,图结构可能会发生变化,但我假设这里的节点 1, 2 and 3 仍然在同一个集群中)。
    • @skyork:不,不能保证;这些数字是相当随意的,具体取决于算法决定如何合并社区(即使您仅添加或删除了几个节点或边缘,最大模块化甚至可能发生在完全不同的“分辨率级别”上)。但是compare_communities 中的所有方法都对确切的编号不敏感。
    • 如果要保持编号排序一致,则需要取两个连续的聚类,计算它们的混淆矩阵(参见en.wikipedia.org/wiki/Confusion_matrix),然后使用简单的贪心算法找到两个聚类的组之间的适当分配。 (基本上,您尝试从混淆矩阵中选择最大值来获得分配)。这比看起来更棘手,因为集群可能已在时间实例之间合并或拆分。
    • 另一种方法是在两个集群中按大小对集群进行排序,然后将集群 1 中的最大集群分配给集群 2 中的最大集群,以此类推。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多