具有最大集群大小的集群

Posted

技术标签:

【中文标题】具有最大集群大小的集群【英文标题】:Clustering with max cluster size 【发布时间】:2015-11-21 11:50:25 【问题描述】:

我有一组 n 个节点,它们具有与它们相关的特定权重 w。此外,我有一个矩阵来存储每对这些点之间的差异。

我想要实现的是将这些节点划分为固定大小的组,以便距离最小。作为附加约束,每个组都有一定的关联容量,该容量对于每个组都是相等的,因此属于该组的节点的权重之和不能大于该容量。

我对此进行了一些研究,但发现只有像 this one 这样的论文,它只会在每个集群中产生同样多的点,而不是增加每个点的权重。

我的问题是,有没有解决这个问题的算法?

【问题讨论】:

对于额外的容量限制,是否所有组都有一个容量?如果不是,您是否知道您将拥有多少个聚类组以及如何识别这些组?除此之外,对我来说,这听起来像是一个可以使用 LP/QP 解决的问题。例如具有约束 sum(w_i,g) 即基本上有能力的设施位置。 【参考方案1】:

一种可能的方法是遵循与 K-means 相同的原则,同时确保满足约束条件。为此,您必须在步骤 2-3 之间进行迭代:

    将数据点分配给集群(随机) 计算每个集群的质心 将点分配给集群,这样: 点到质心的距离平方总和最小化 每个集群中节点的权重总和不超过容量

保证该算法在每一步都有改进。但是,与 k-means 一样,它会收敛到局部最优值。与 K-means 的主要区别在于,K-means 中的第 3 步是一个可以在 O(n) 中执行的简单操作,而在您的情况下,第 3 步是一个 NP 完全优化问题。但是,根据数据集,这个问题有可能在合理的时间内得到解决。

我有这个算法的pythonimplementation。您可以在您的数据上尝试一下,看看这是否适用于您的情况。

【讨论】:

【参考方案2】:

除了将其建模为线性规划问题之外,还可以寻找“图形切割措施”来创建“平衡分区”,并寻找最大化“模块化”的算法。这是一个活跃的学术研究领域。根据 Parthasarathy 和 Faisal 的论文(Aggarwal 和 Reddy 的教科书第 17 章“数据聚类、算法和应用”),优化这些目标函数中的任何一个都是 NP 难的(尤其是有额外的约束,比如你的)。

【讨论】:

【参考方案3】:

集群,看看索引批量加载策略

聚类通常与结构化数据集有关。

面向磁盘的索引通常具有要满足的块大小。在 8k 页面上,您只能存储 8k 数据,因此您需要将数据集拆分成这个最大大小的块。

也看看 戴安娜。这种经典的聚类算法是一种自上而下的方法。它从完整的数据集开始,并反复对其进行拆分。您可以使用它并继续拆分,直到达到所需的最大集群大小。

【讨论】:

以上是关于具有最大集群大小的集群的主要内容,如果未能解决你的问题,请参考以下文章

Apache Pulsar 主题复制随着集群大小的增加

调整 Container Engine 集群上的实例类型大小

为 GKE kubernetes 集群选择节点大小

griddb 集群大小评估算法

合并树中的零件是不是有最大“健康”大小?

通过 Terraform 设置用于自动扩展 kubernetes 集群的启动磁盘大小