我有一个图网络,它是here中可用的Email-Eu网络。
此数据集具有实际的数据集,它是大约1005个节点的图,这些图的边缘形成了这个巨型图。它还具有节点及其对应社区(部门)的地面真相标签。这些节点中的每个节点都属于42个部门之一。
我想在图形上运行社区检测算法,以找到每个节点的相应部门。我的主要目标是在最大的社区中找到节点。
因此,首先我需要找到前42个部门(社区),然后在其中最大的一个节点中找到节点。
我从Girvan-Newman算法开始寻找社区。 Girvan-Newman的优点在于易于实现,因为每次我需要找到具有最高中间性的边并移除它,直到找到想要的42个部门(社区)。
我正在努力寻找其他的社区检测算法,这些算法使我可以选择指定将图分解成多少个社区/分区。
我可以使用任何社区检测功能/技术,这使我可以选择指定从图表中发现多少社区?任何想法都非常感谢。
我正在使用Python和NetworkX。
答案 0 :(得分:1)
您的问题的(非常)部分答案(和解决方案)是将Networkx实现的Fluid Communities algorithm用作asyn_fluidc
。
请注意,它适用于连接的,无向的,未加权的图形,因此,如果图形具有n个连接的组件,则应运行n次。实际上,这可能是一个重要的问题,因为您应该对每个组件都有某种初步的知识,以便选择相应的k。
无论如何,值得一试。
答案 1 :(得分:1)
您可能想尝试pysbm。它基于networkx
,并实现了随机块模型和推断方法的不同变体。
如果您考虑从networkx
切换到其他基于python的图形包,则可以考虑使用graph-tool,在此处您可以为clustering task使用随机块模型。另一个值得注意的包是igraph,可能需要看看How to cluster a graph using python igraph。
networkx中直接可用的方法已经过时了。如果您打算使用最新的聚类方法,则可以考虑使用光谱聚类或Infomap。选择取决于您对推断社区的期望用法。从网络推断地面真相的任务属于(近似)无自由午餐定理,即(几乎)没有算法存在,因此,如果我们对结果求平均值,它会比任何其他算法返回“更好”的社区。所有可能性。
答案 2 :(得分:0)