【问题标题】:Using community detection algorithm in igraph在 igraph 中使用社区检测算法
【发布时间】:2015-11-17 11:41:51
【问题描述】:

我正在研究 DBLP 数据集(包含超过 180 万份出版物的元数据,由超过 100 万位作者在数千种期刊或会议论文集中撰写),其中包含以下列 -

['id', 'title', 'authors', 'year', 'pub_venue', 'ref_id', 'ref_num', 'abstract']

我必须在给定的数据集上应用社区检测算法。我的要求是 获得重叠的社区。 为此,我使用上述数据在 igraph 中创建了一个图,其中 id 是一个顶点值, ref_id 中的 id 将用于创建边。我尝试了 igraph 中可用的不同社区检测算法,但没有得到想要的结果 -

我正在使用 -

community_multilevel()

我从这个算法得到的结果集群只给了我最好的模块化分区。我想了解如何获取不同级别或树状图的集群?

编辑:我使用了 community_multilevel(return_levels= True) 并且对于上面的数据集,它制作了一个稀疏图,我的期望是在更高级别获得密集社区,但我在每个级别获得的社区数量几乎相同减少了很多。我需要类似于 networkx 中的 parition_at_level 的东西。

Total no of vertices  : 1632441
cl =  g.community_multilevel(return_levels=True)
print len(cl[0]) , len(cl[1]) , len(cl[2]) , len(cl[3])

output is : 1207787 1164960 1162115 1161959

【问题讨论】:

    标签: python igraph


    【解决方案1】:

    请阅读community_multilevel 的文档 - 它有一个return_levels 参数;将其设置为 True 将返回一个不相交的社区结构列表,一个用于算法识别的每个相关分辨率级别。

    请注意,这不是真正的“重叠”社区结构,因为算法识别的每个级别都会有不相交的社区。​​p>

    【讨论】:

    • 感谢您的回复。我还有一个疑问,根据文档返回类型是 VertexClustering 对象的列表,每个级别对应一个。我怎样才能得到哪个级别对应于哪个顶点聚类对象?
    • 如果你使用community_multilevel(return_levels=True) 那么它会返回一个对应级别的列表。
    • @hsn 我尝试使用它,但没有减少每个级别的社区。就像稀疏图一样,这个算法没有多大帮助?我也编辑了我的查询。
    • 算法可能无法识别多个相关的分辨率级别,所以它只返回了一个。也许您应该使用真正的重叠社区检测算法(例如,CFinder)。我在这里创建了 CFinder 的幼稚实现(对于您的大小图来说可能过于幼稚)和分层链接聚类(另一种重叠聚类方法):stackoverflow.com/a/20082373/156771
    猜你喜欢
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    相关资源
    最近更新 更多