【问题标题】:Optimal grouping/clustering of items in groups with minimum size以最小尺寸对项目进行最佳分组/聚类
【发布时间】:2016-10-02 00:46:05
【问题描述】:

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

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

动机不是识别好的集群,而是将数据集分成高相似度和最小大小的组。围绕 medoids 进行分区不能开箱即用,它会产生很多 1-item-clusters。分层方法(AGNES、DIANA)也无济于事。

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

提前致谢!

【问题讨论】:

  • 简单的k-means怎么样?它的目标函数是最大化每个集群的同质性/相似性。它通常会找到大小相似的组,通过先验定义簇的数量,您可以粗略地获得点/簇的平均数量。另一种方法是分两步运行 k-means:i) 获取质心(局部聚类中心),ii) 根据与每个质心的距离分配点,并附加一个约束,即应分配最少数量的点。有什么想法吗?

标签: algorithm cluster-analysis stable-marriage


【解决方案1】:

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

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

你为什么不尝试一个贪婪的启发式(这通常用于类似背包的问题)。随机选择任意一点,添加足够多的点以满足您的最小尺寸限制。

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

【讨论】:

    【解决方案2】:

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

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

    本质上,此算法执行 k-means 风格的最小二乘优化,但所有集群的大小必须相同(如果 N/k 不是整数,则集群大小可能相差 1)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      相关资源
      最近更新 更多