我知道显然有点的聚类算法,但我有不同的场景。我有许多光线,它们的起点都在 3D 球体上,并且其方向矢量向内指向球体。一些光线指向 A 点,其他光线指向 B 点等,并带有一些噪声(即光线彼此不完全相交)。是否有一种聚类算法可以让我根据光线指向的点对光线进行聚类?我不知道 A、B 等点的位置,只知道光线的起点和方向向量。
例如,在这幅图片中 https://i.stack.imgur.com/yJqRq.png是一个示例设置,但在 2D 中,我不知道哪些光线一开始是红色或蓝色。我如何将光线聚集成红色和蓝色?或者,我如何找到他们指向的点的位置?
我想到的一个解决方案是采用成对的光线,找到这两条光线之间最近的点(在二维中,如果延伸光线,这就是交点),并对每对光线执行此操作(所以我会得到 n (n-1)/2 点,其中 n 是光线数量)。然后,我可以对这些点使用常规聚类算法。但是,这似乎不起作用 - 我在原点只得到一大块点,我不知道为什么会发生这种情况。
这是一些可以尝试的东西,大致基于https://en.wikipedia.org/wiki/Random_sample_consensus https://en.wikipedia.org/wiki/Random_sample_consensus and https://en.wikipedia.org/wiki/K-means_clustering https://en.wikipedia.org/wiki/K-means_clustering。它尝试爬山找到解决方案,因此您可能需要使用不同的随机开始多次尝试。
我们尝试找到点和簇的排列,以最小化从每个簇中的射线(扩展为线)到与每个簇关联的点的平方距离之和。我们知道,点到线的距离的平方是二次方(https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line)因此,如果您知道哪些线进入哪个簇,您就可以找到该簇的点,该点可以最小化它的平方距离之和。
如果您知道点,但不知道哪些线属于哪些簇,则可以将每条线分配给距离它最近的点的簇。
因此,首先将线随机分配到簇中。现在找到每个簇的点,使距离平方和最小。现在你有了点,将每条线放入距离最近的点的簇中,进一步减少距离平方和。现在您已经将线以不同的方式排列成簇,重新计算点,再次减少平方距离的总和。显然,您可以重复此过程,减少每一步的距离平方和,直到收敛到某个局部最小值。
我建议您尝试多次,每次都从不同的随机开始开始,并查看相同的答案是否在最后出现多次,在这种情况下,您可能会发现接近全局最佳值的结果,或者至少有一个非常突出的局部最小值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)