首页 > 解决方案 > 具有新旧点的连续循环上的 2D 点识别/匹配

问题描述

我正在做一个飞镖项目。我正在用激光扫描仪检测飞镖。使用 K-Means 我能够检测到飞镖簇。我从玩家开始轮到他的点开始扫描。这意味着我的第一个飞镖的扫描点最多,而最后一个飞镖的扫描点最少。用振动传感器检测飞镖命中。我在循环上运行 K-Means,因此我计算的飞镖点随着时间的推移变得更加准确,因此每次运行都有更多的扫描点。

现在我想将我的集群中心分配给飞镖编号。我尝试从上次运行中照顾集群中心,以便每次都有相同的集群中心订单,但没有一种智能的方式为新飞镖生成中心我经常遇到 K-Means 将现有集群减半的问题,因为大。

我正在寻找一种允许我将中心分配给 id (0, 1, ...) 的算法。如果有一个新的集群,它会获得一个新的 id。我想在运行 K-Means 之后运行这个算法,所以它只适用于集群中心。我想我可以简单地计算新旧点之间的距离并以这种方式识别它们。剩下的一个是新的镖点。

如果有帮助,我也愿意从 K-Means 切换到另一个聚类算法。

我希望你能理解我面临的问题。谢谢您的意见。

标签: pythoncluster-analysis

解决方案


如果我的问题是正确的,您需要将一组集群中心分配给另一组并仅使用中心的位置。这个问题称为最小权重匹配或线性和分配问题。首先,需要计算成本矩阵,即两组聚类中心之间的距离矩阵。然后你使用这个矩阵来找到总距离最小的分配。Scipy 库具有解决此类问题的功能:

from scipy.spatial import distance
from scipy.optimize import linear_sum_assignment
dists = distance.cdist(centers1, centers2, 'euclidean')
indices1, indices2 = linear_sum_assignment(dists)

剩余的索引是新的集群。


推荐阅读