【发布时间】:2015-09-06 21:34:05
【问题描述】:
我正在为以下问题寻找一种有效的算法:
给定二维空间中的一组点,其中每个点由其 X 和 Y 坐标定义。需要将这组点分成一组簇,这样如果两个任意点之间的距离小于某个阈值,这些点必须属于同一个簇:
换句话说,这样的集群是一组彼此“足够接近”的点。
朴素算法可能如下所示:
- 令 R 为结果簇列表,初始为空
- 令 P 为点列表,最初包含所有点
- 从 P 中选择随机点并创建一个仅包含该点的集群 C。从 P 中删除这一点
- 对于来自 P 的每个点 Pi 4a。对于 C 的每一点 Pc 4aa。如果 distance(Pi, Pc) 则将 Pi 添加到 C 并将其从 P 中删除
- 如果在第 4 步中至少有一个点被添加到集群 C,请转到第 4 步
- 将集群 C 添加到列表 R。如果 P 不为空,则转到步骤 3
然而,幼稚的方法是非常低效的。我想知道是否有更好的算法来解决这个问题?
附注我不知道先验的簇数
【问题讨论】:
-
如果你计算一个矩阵,其中 [x][y] 位置是点 x 和点 y 之间的距离。然后,对其进行迭代,如果距离小于阈值,则将该位置标记为 1,否则标记为 0。现在我们有一个图表,我们可以使用 DFS 或 BFS 来查找所有集群。它可能效率不高,但可以将其简化为更容易的问题
-
无论您选择哪种方法,请确保将距离平方
(x2 - x1)^2 + (y2 - y1)^2与阈值平方进行比较,以避免计算平方根。 -
并考虑将点存储在空间分区树中。
-
听起来像是 linear discriminant analysis 的工作?
标签: algorithm machine-learning cluster-analysis data-mining