如何强制图社区检测输出仅两个社区的划分结果
基于igraph强制输出2个社区的实现方案
该需求完全可以实现。你之前使用的fastgreedy、walktrap均属于层次聚类类社区检测算法,本身支持输出指定数量的聚类结果,未达到预期是因为没有调用对应的层级裁剪方法,具体实现方式如下:
方法1:对层次聚类社区结果做层级裁剪
你已经尝试过的两类算法都可以通过cut_at方法直接指定输出2个社区:
- fastgreedy 算法示例代码:
library(igraph) # g为你的图对象 fc <- fastgreedy.community(g) # 直接裁剪为2个社区 two_communities <- cut_at(fc, k=2)
- walktrap 算法示例代码:
wc <- walktrap.community(g) two_communities <- cut_at(wc, k=2)
方法2:使用天然支持二分类的社区检测算法
也可以直接选择专门的二分社区检测算法,比如谱二分法,igraph内置实现可直接指定社区数量:
# 直接指定输出2个社区 sc <- spectral.community(g, no.communities = 2) two_communities <- membership(sc)
注意:如果你的图属于非连通图,算法默认会将每个孤立连通组件识别为独立社区,若要强制合并为2个社区,需要提前对组件权重做自定义调整,避免最终结果超出预期数量。
内容的提问来源于stack exchange,提问作者Raul Gutierrez Meave
相关产品推荐
相关产品推荐

