【问题标题】:Clustering algorithm for rays光线的聚类算法
【发布时间】:2019-03-02 21:42:36
【问题描述】:

我知道显然有针对点的聚类算法,但我有不同的情况。我有许多射线,所有射线的起点都在 3D 球体上,其方向向量指向球体的内部。一些光线指向 A 点,其他光线指向 B 点,依此类推,带有一些噪声(即光线彼此不完美相交)。是否有一种聚类算法可以让我根据光线指向的点对光线进行聚类?我不知道 A、B 等点的位置,只知道光线的起点和方向向量。

例如,in this picture 是一个示例设置,但在 2D 中,我不知道一开始哪些光线是红色或蓝色。我如何将光线聚集成红色和蓝色?或者,我如何找到他们指向的点的位置?

我想到的一个解决方案是采用一对光线,找到这两条光线之间的最近点(在 2D 中,如果您延长光线,这是交点),然后对每对光线都执行此操作(所以我d 得到 n(n-1)/2 个点,其中 n 是射线的数量)。然后,我可以在这些点上使用常规聚类算法。但是,这似乎不起作用 - 我在原点只得到一大块点,我不知道为什么会这样。

【问题讨论】:

    标签: algorithm cluster-analysis


    【解决方案1】:

    我建议如下:

    给定一条射线,找出它的终点——如果箭头延伸,将与球体相交的点。这可以使用例程来完成,例如this

    收集所有交点集合(x1, y1, z1),...,(xp, yp, zp)

    现在,一旦您掌握了这些要点,您就可以运行多源 Weber problem (MWP) 的 3 维版本。

    如果您正在寻找 m 集群,请解决 m 源的 MWP。这将产生 最佳 m 集群。

    顺便说一句:解决 MWP 是一个 NP-Hard 问题。您可能必须使用某种枚举算法来解决它。 Here 是一种方法。

    【讨论】:

      【解决方案2】:

      你可以试试Hough transform这样的方法

      制作具有一定像元大小的 3d 网格(在球体内?)(应选择在精度和计算空间/时间之间进行折衷)

      对于它所接触的所有单元格的每个射线增量计数器(如果您有足够的可用内存,可能会将射线 id 添加到该单元格的射线列表中)

      选择票数最多的最佳候选单元格(大计数器)(可能将它们聚集在一起)。

      建立细胞(或簇)和通过它的射线的对应关系,对这些射线进行分组(如果已经建立,它们已经在列表中)

      【讨论】:

        【解决方案3】:

        这里有一些可以尝试的东西,大致基于https://en.wikipedia.org/wiki/Random_sample_consensushttps://en.wikipedia.org/wiki/K-means_clustering。它会尝试爬山找到解决方案,因此您可能需要尝试多次以不同的随机开始。

        我们尝试找到点和簇的排列方式,以最小化从每个簇中的光线(扩展为线)到与每个簇相关的点的距离平方和。我们知道从点到线的距离的平方是二次方 (https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line),所以如果您知道哪些线进入哪个集群,您可以找到该集群的点,该点使其平方距离之和最小.

        如果您知道点,但不知道哪些线在哪些集群中,您可以将每条线分配给离它最近的点的集群。

        因此,首先将线随机分配到集群中。现在找到最小化距离平方和的每个簇的点。现在你有了点,将每条线放入点最近的集群中,进一步减少平方距离的总和。现在你有不同的线排列成簇,重新计算点,再次减少平方距离的总和。显然,您可以重复这个过程,减少每一步的距离平方和,直到收敛到某个局部最小值。

        我建议您尝试多次,每次从不同的随机开始开始,并查看最后是否多次出现相同的答案,在这种情况下,您可能会找到接近全局的答案最优,或者至少是一个非常突出的局部最小值。

        【讨论】:

        • 要做到这一点,我需要事先知道集群的数量吗?因为情况不同,我不知道。是否可以在不知道集群数量的情况下运行此算法?
        • 刚刚用固定数量的集群实现了它——效果很好!谢谢您的帮助!现在我只需要找出一种不必输入集群数量的方法。我注意到的是,如果实际上有 n 个簇,并且我输入 n+1 作为簇的数量,我经常会在我的 n+1 个预测点列表中得到一个重复点,或者两个点非常接近彼此。也许我只是从 clusters = 1 开始并增加直到我得到一个重复?不知道有没有更有效的方法……总之,谢谢!
        • 集群编号很棘手 (en.wikipedia.org/wiki/…)。作为第一次尝试,我倾向于尝试解决集群编号 1..N 的问题,其中 N 是一些常识上限,然后选择具有最佳(我认为最低)AIC 的模型。由于您有平方和,因此您应该能够像 en.wikipedia.org/wiki/… 一样计算 AIC,每次尝试的参数数量以及指定聚类中心所需的参数数量。
        猜你喜欢
        • 2023-03-12
        • 2012-06-08
        • 2013-08-03
        • 2017-10-28
        • 2020-06-18
        • 2012-05-24
        • 1970-01-01
        • 1970-01-01
        • 2013-11-26
        相关资源
        最近更新 更多