识别事件数

时间:2018-11-12 17:52:41

标签: algorithm cluster-analysis

我有很多射线,所有射线的起点都在3D球体上,并且方向矢量指向内。有些射线指向点A,另一些射线指向点B,等等,但有一些噪音(即,射线在它们对应的点A,B等处并不完全相交)。

是否有一种算法可以让我确定A,B等的点数?甚至更好,这些点位于何处?我不知道点A,B等的位置,仅知道射线的起点和方向矢量。

例如,in this picture](![in this picture是一个示例设置,但是在2D模式下,我不知道哪些光线指向哪个点(即,我不知道哪些光线是红色或蓝色)。我如何找到他们指向的点数(在此示例中为两个)或他们指向的点的位置?

我尝试了earlier question中建议的几种不同算法,但是当这些点彼此靠近时,它们似乎都无法准确识别出这些点的位置。我的头等大事就是即使它们靠得很近,也要准确地识别出点的数量。即使我不得不牺牲位置的准确性,这是否可能?

Edit :如果我们将球体的半径设为1000个单位,则方向矢量的误差约为10-20个单位,而点之间的最小距离可与目前运作的演算法约为50个单位。我认为这似乎无法克服,但我很可能是错的。

1 个答案:

答案 0 :(得分:1)

我建议您将其视为点集群问题的变化形式。

首先,提出一些要点。选择一个进近阈值:在您怀疑两条光线指向同一点之前,应该将它们靠近多近?对于满足此阈值的每对射线,在最接近的线段的中点插入一个点。这是简单的(?)3D线性代数。

现在,使用您喜欢的群集计数算法来确定这些点中群集的数量。您的进近阈值对于区分附近的点非常重要(请参阅我的评论)。

编辑:感谢您提出的问题。与10-20单位误差相比,数据中的50单位分隔应允许您使用密度敏感型聚类算法来区分“近”质心。也许一种光谱聚类方法将为您完成这项工作。

您现在已经有k个已识别的集群。调整k均值聚类算法。

  1. 选择每个簇的中点作为质心。
  2. 删除您在上一次迭代中提出的所有“最接近方法”。保持质心。
  3. 确定每个射线所属的簇:您的距离函数是射线与每个质心最接近的方法。
  4. 在对每条射线进行分类时,将该射线最接近质心的点添加到该簇中。

重复步骤1-4,直到根据所具有的epsilon准则收敛为止。重心是目标点(A,B等)

  • 如果您有任何个异常值,请怀疑您是一个短质心。
  • 如果形心太近(按照您可以提取的任何接近度标准),请合并它们。