对具有最小尺寸的组中的项目进行最佳分组/聚类

时间:2016-06-02 10:23:50

标签: algorithm cluster-analysis stable-marriage

我正在寻找一种解决以下问题的算法:

  • 给定:一组项目及其相似度矩阵。
  • 目标:将这些项目分组到"群集"最小尺寸 m
  • 条件:
    • 数据集中没有类似群集的结构,如图所示 Figure 1
    • 无论如何,组中的项目应该彼此相似。因此,全球相似性会很高。

动机不是识别好的聚类,而是将数据集分成高相似性和最小尺寸的组。在medoids周围进行分区并不是开箱即用的,它会产生很多1项集群。分层方法(AGNES,DIANA)也无济于事。

这个问题在某种程度上类似于稳定的婚姻问题:人们试图通过相似性对相邻的项目进行排名。但在这里,一组/一组婚姻中至少有 m 项目。

提前致谢!

Figure 1.

2 个答案:

答案 0 :(得分:1)

这不是聚类。聚类算法应该告诉您那里没有聚类。您的任务听起来更像是装箱,knapsack以及类似的优化问题。

没有任何进一步的限制,你的问题也没有明确说明。

为什么不尝试贪婪的启发式(这对于类似问题的背包来说很常见)。随机选择任意点,添加足够的点以满足最小尺寸约束。

然后从中选择最远点,再添加足够的点以满足您的最小尺寸。重复(使用距离总和进行排名),直到您不再能够满足最小尺寸。然后将每个剩余点添加到最近的簇中。最后,只要满足最小尺寸,优化是否会将点移动到其他簇?

答案 1 :(得分:0)

虽然这不是典型的群集任务(请参阅@ Anony-Mousse),但您可以修改群集算法以满足您的需求。

您可以关注此Tutorial for Same-Size K-Means,或者只是使用ELKI中的tutorial包/模块中的此算法(从GitHub构建最新版本,因为我刚修复了一个错误)。

本质上,此算法执行k均值样式最小二乘优化,但所有群集必须具有相同的大小(如果N / k不是整数,则群集大小可能会变化1)。

如果你转到上面的教程并滚动到底部,你可以看到示例结果。