将一组点平分为两个最佳子集


9

我想将一组点分成两个大小相等的子集,以使簇内平方和最小。我们可以假设这些点在二维欧几里得空间中。考虑到k = d = 2,我希望比一般的k-均值聚类算法更快。谁能为此指出一个好的算法的方向?

如果我们有一个很好的近似值,则不需要精确的解决方案。

谢谢!

Answers:


10

如果坚持精确分区,则需要用一条线计算平面中一组点的所有平衡分区(最佳分区是Voronoi分区,因此两个点集用一条线隔开)。这样的分区称为ķ集。目前已知这项工作中最快的算法Øñ4/3日志ñ 用于在对偶[即 ķ级别的一组 ñ 线,用于 ķ=ñ/2]。拥有所有可能的分区后,只需检查每个分区。使用标准技巧,可以在每个分区的固定时间内完成此操作。

(更新:证明最佳分区是通过 ķ设置 ķ=ñ/2,并非完全无关紧要。对于感兴趣的读者,我会将其作为一项可爱的练习。提示:请考虑穿过两个最佳中心的线以及与之垂直的方向。)

如果您不关心确切的解决方案,那么一种更简单的方法是对 ķ-表示聚类。这将导致Øϵ-2日志ñ 在这种情况下的加权分数,总重量 ñ。然后,您只需要解决加权点集上的问题。最简单的解决方案是为中心生成一组候选位置,然后在加权点上尝试所有对。本文描述了核心集构建以及生成候选中心:

http://sarielhp.org/p/03/kcoreset/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.