我正在寻找一种解决以下问题的算法:
-
给定:一组项目及其相似度矩阵 .
-
目标:将这些项目分组为最小尺寸m的"clusters"
-
条件:
-
数据集中没有类似集群的结构,如Figure 1所示
-
无论如何,组中的项目应该彼此相似 . 因此,全球相似性将很高 .
动机不是识别好的聚类,而是将数据集分成高相似性和最小尺寸的组 . 在medoids周围进行分区并不是开箱即用的,它会产生很多1项集群 . 分层方法(AGNES,DIANA)也没有帮助 .
这个问题在某种程度上类似于稳定的婚姻问题:一个人试图通过相似性对相邻的项目进行排名 . 但在这里,一组/一组婚姻中至少有m项 .
提前致谢!
2 回答
这不是聚类 . 聚类算法应该告诉您那里没有聚类 . 您的任务听起来更像是bin pack,knapsack以及类似的优化问题 .
没有任何进一步的限制,您的问题也未明确 .
你为什么不尝试一种贪婪的启发式方法(这种问题通常用于背包) . 随机选择任意点,添加足够的点以满足最小尺寸约束 .
然后从中选择最远点,再添加足够的点以满足最小尺寸 . 重复(使用距离总和进行排名),直到您不再能够满足最小尺寸 . 然后将每个剩余点添加到最近的簇中 . 最后,只要满足最小尺寸,优化是否将移动点移动到其他群集?
虽然这不是典型的群集任务(请参阅@ Anony-Mousse),但您可以 modify a clustering algorithm 以满足您的需求 .
你可以按照这个Tutorial for Same-Size K-Means,或者只是在ELKI的
tutorial
包/模块中使用这个算法(从GitHub构建最新版本,因为我刚修复了一个bug) .本质上,此算法执行k均值样式最小二乘优化,但所有群集必须具有相同的大小(如果N / k不是整数,则群集大小可能会变化1) .
如果您转到上面的教程并滚动到底部,您可以看到示例结果 .