我有一定数量的点(云),并在其上定义了一个指标。我想在此云中找到最大数量的群集,以便:
1)一个群集中任意两点之间的最大距离小于给定的epsilon( const )
2)每个群集中都有k( const )点
我研究了各种不同的聚类方法,并且对内部最大距离的限制不是一个问题(基于密度)。 2)限制和要求找到“最大数量的簇s.t.”但似乎有问题。有效解决方案的任何建议吗?
谢谢你, A〜
答案 0 :(得分:1)
鉴于您的限制,可能没有解决方案。实际上,这可能经常发生......
最明显的情况是你没有多个k
点。
但是,如果epsilon
设置得太低,可能会有一些点无法再进入群集。
我认为您需要重新考虑您的要求和问题,而不是寻找一种算法来解决可能无法满足的不合理要求。
还要考虑您是否真的需要找到保证的最大值,或者只是一个好的解决方案。
有一些相当明显的方法至少可以快速找到一个好的近似值。
答案 1 :(得分:1)
我和@ 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
基本上是多余的问题。