基于度量/密度的聚类/分组

Posted

技术标签:

【中文标题】基于度量/密度的聚类/分组【英文标题】:Metric/density based clustering/grouping 【发布时间】:2013-01-31 19:50:33 【问题描述】:

我有有限数量的点(云),并在其上定义了一个度量。我想在这个云中找到最大数量的集群,这样:

1) 一个簇中任意两点之间的最大距离小于给定的 epsilon (const)

2) 每个簇中恰好有 k (const) 个点

我查看了各种不同的聚类方法,限制内部最大距离的聚类不是问题(基于密度)。 2)约束和要求找到“最大数量的簇 s.t.”不过似乎有问题。对有效解决方案有何建议?

谢谢你, 啊~

【问题讨论】:

K-means algorithm variation with equal cluster size 的可能重复项 不是重复的。这个问题实际上是完全不同的。 【参考方案1】:

鉴于您的限制,可能没有解决方案。实际上,这种情况可能经常发生……

最明显的情况是当您没有多个 k 点时。

但如果epsilon 设置得太低,可能会有一些点无法再放入集群中。

我认为您需要重新考虑您的要求和问题,而不是寻找一种算法来解决可能无法满足的不合理的硬要求。

还要考虑您是否真的需要找到保证的最大值,或者只是一个好的解决方案。

有一些相当明显的方法至少可以快速找到一个好的近似值。

【讨论】:

你能具体说明一下明显的方法吗?对我来说,它们(不幸的是)并不明显。此外,如果不满足约束(无解),则 epsilon 值将增加并重新运行查询(如果超过 k 点)。【参考方案2】:

其实我和@Anony-Mousse 的印象是一样的:你还没有理解你的问题和需求。

如果您希望集群大小为k,那么您将获得多少集群是毫无疑问的:显然是n /k。所以你可以尝试使用一个 k-means 变体来产生与例如相同大小的集群。在本教程中描述:Tutorial on same-size k-means 并将所需的集群数设置为 n/k

请注意,这不是一个特别明智或好的聚类算法。它做一些事情来满足约束,但集群从集群分析的角度来看并没有真正意义。这是约束满足,而不是聚类分析。

为了也满足您的 epsilon 约束,您可以从这个初始解决方案开始(这可能是 @Anony-Mousse 所说的“显而易见的方法”)并尝试执行相同类型的优化 -交换元素以满足 epsilon 条件。

您可能需要多次重启,因为可能没有解决办法。

另见:

Group n points in k clusters of equal size

K-means algorithm variation with equal cluster size

对于本质上多余的问题。

【讨论】:

感谢您的回复。大多数点不属于任何集群,因此集群到 k 个相同大小的集群对我没有帮助(我实际上发现了你之前链接的那些问题)。我也许可以将 DBScan 与我的 epsilon 值一起使用,然后拆分 >= 2*k 的集群。听起来它可以工作! 我得到的印象是您不是在寻找聚类分析,而是在寻找Maximum set cover problem 的变体。请参阅:聚类试图找到结构,而您有一个预定义的结构,并使用此结构寻找可能的最大覆盖。 谢谢!最后的回复确实帮助我更好地理解了我的问题。

以上是关于基于度量/密度的聚类/分组的主要内容,如果未能解决你的问题,请参考以下文章

基于密度的聚类方法

简单易学的机器学习算法——基于密度的聚类算法DBSCAN

基于密度的聚类方法 Density-based clustering

聚类:层次聚类基于划分的聚类(k-means)基于密度的聚类基于模型的聚类

DBSCAN 算法

基于密度的图聚类算法 SCAN