我一直在使用METIS
来群集社交媒体用户。
默认情况下,它输出的是每侧具有相同顶点数的集群,这在现实世界中并不理想。所以,我试图找到方法来放松相同数量的顶点"并且可以通过最小化切割值获得不平衡分区。
我在手册中找到了一个参数ufactor
,这对我的情况来说是合适的(我认为),但我并没有理解它到底在做什么。我有大图,并试用了ufactor
的某些值。对于一个数据集ufactor=1000
非常有效,但对于另一个数据集,它甚至无法对图形进行分区。我无法解释这个结果,因为我不明白它真正在做什么。以下是我在手册中找到的内容:
指定分区之间允许的最大负载不平衡。值x表示该值 允许的负载不平衡是(1 + x)/ 1000。第j个约束的负载不平衡定义为 max_i(w [j,i])/ t [j,i]),其中w [j,i]是第j个约束的总权重的一部分 被分配给第i个分区,t [j,i]是第j个约束的期望目标权重 分区(即通过-tpwgts指定的分区)。对于-ptype = rb,默认值为1(即加载 不平衡1.001)和-ptype = kway,默认值为30(即负载不平衡为1.03)。
有人可以帮我解释一下吗?在这里,jth
约束是什么?什么是-ptype=rb/kway
?
答案 0 :(得分:1)
首先,我要提一下,我认为METIS是错误的工具,因为它用于图形分区,其中重点是最小化分区之间的边数,保持分区平衡(或多或少大小相同)
您可能想要做的是社交网络中的社区检测,即搜索最大化内部连接的群集(来自同一群集的节点之间的大量边缘) )和最小化外部连接(不同群集之间的边数较少) 这可以通过最大化所谓的Modularity聚类
来实现有几种方法可以解决这个问题,一种流行的启发式方法是Label propagation 如果您不想自己实施该算法,我建议使用像NetworKit这样的框架(不幸的是,我还不知道其他任何此类框架),它实现了Label propagation ,一些modularity-based algorithms和许多有用的工具。
但回到原来的问题:
什么是-ptype=rb/kway
?
有多种方法可以解决图分区问题:您可以尝试直接将图分区到所需的分区数(k-way分区),也可以将图重复分成两半,直到您拥有所需的分区数(递归二分,rb)
什么是第j个约束?
METIS允许您同时尝试和优化多个平衡约束,即如果您在图表上有多种类型的计算,这些计算应该在计算节点之间或多或少地平衡。
参见手册:
许多重要类型的多相和多相 物理计算要求多个量同时进行负载平衡。 [...]
METIS包括分区例程,可用于在存在这种多重平衡的情况下对图形进行分区 限制。现在为每个顶点分配一个m个权重的向量,并且分区例程的目标是 最小化边缘切割受制于m个权重中的每一个权重均匀分布的约束 域。
编辑:既然您澄清了想要查看固定数量的群集,我会看到图分区在这里有用。让我来说明ufactor
的含义:
分区图的不平衡(在这个简单的情况下)计算为每个分区的不平衡的最大值,大致是商partition size / average partition size
。因此,如果我们允许最大不平衡为2,这意味着最大分区是平均分区的两倍。但请注意,ufactor
并未直接指定不平衡,它指定允许的不平衡量与1相比有多少permille。
所以ufactor=143
实际上意味着你的最大允许不平衡是1.143,这是有道理的,因为你的集群彼此之间的距离不是很远。因此,在您的情况下,您可能会使用较大的ufactor值来允许组的大小完全不同。
大不平衡的后果
如果您的不平衡太大,可能会发生所有强连接部分都落在同一分区中,而只有隔离节点放在其他分区中。这是因为算法试图最小化不同分区之间的切割边的数量,如果我们将所有高度节点放在同一个分区中,这将会更低。
光谱分区怎么样,......?
METIS的一般方法如下:
大多数输入图形太大而无法直接分区,这就是使用所谓的多级方法的原因:
我的个人推荐
但是我应该注意到,虽然图形分区可能是您案例的有效模型,但METIS本身可能不适合您:
正如您可以在METIS主页上看到的那样,它主要用于相当稀疏的图形(有限元方法,线性规划,VLSI和运输等),而社交网络则更密集且具有不同的结构(度数遵循幂律分布)
METIS的粗化方法使用重边匹配来组合节点,这些节点在某种程度上紧密相连,这对于预期的应用程序非常有用,对于社交网络而言,基于聚类的粗化技术可能会更有效率 另一个通常稍微慢一点的库,但是为社交网络实现了一些预设,KaHIP,请参阅manual了解详细信息。
(但我应该提一下,我在这方面有偏见,因为我与这个图书馆一起工作;-))