代码之家  ›  专栏  ›  技术社区  ›  Mikos

多组二维坐标的适当相似性度量

  •  2
  • Mikos  · 技术社区  · 15 年前

    我有一个二维坐标集的集合(每个集合中100K-500K点的比例),我正在寻找最有效的方法来测量1个集合与另一个集合的相似性。我知道常用词:cosine、jaccard/tanimoto等,但是我希望对任何快速/有效的相似性度量方法提出一些建议,尤其是那些可以通过相似性进行聚类的方法。

    编辑1:图片显示了我需要做的事情。我需要将所有的红色、蓝色和绿色按它们的形状/方向聚集在一起,等等。

    alt text http://img402.imageshack.us/img402/8121/curves.png

    3 回复  |  直到 13 年前
        1
  •  0
  •   Sparr    15 年前

    任何解决方案的第一步似乎都是找到每个形状的形心或其他参考点,以便无论绝对位置如何,都可以对它们进行比较。

    想到的一种算法是从离质心最近的点开始,走到离质心最近的点。比较正在比较的集之间这些相邻点(从质心)的偏移。继续走到质心的下一个最近的邻居,或之前比较的最近的尚未比较的邻居,并跟踪总差(可能是rms?)在两个形状之间。此外,在这个过程的每个步骤中,都要计算旋转偏移量,以使两个形状最接近对齐[镜像是否也会影响它?]完成后,每对集合都有三个值,包括它们的直接相似性、它们的相对旋转偏移量(仅当它们在旋转后紧密匹配时才有用)以及它们在旋转后的相似性。

        2
  •  0
  •   Boolean    15 年前

    尝试k-means算法。它动态计算每个簇的质心,计算到所有指针的距离,并将它们关联到最近的簇。

        3
  •  0
  •   Liudvikas Bukys    14 年前

    由于集群是基于接近形状度量的,所以可能需要某种形式的连接组件标签。联合查找可以为您提供一个快速的基本集原语。

    仅对于联合,从不同集合中的每一个点开始,如果它们满足某种近邻标准,则合并它们,因为这对您来说似乎很重要,因为它们受局部共同近邻的影响。然后继续合并,直到您通过一些超过阈值的条件,了解合并有多困难。如果您将其视为线增长(只在其末端连接事物),那么一些数据结构将变得更简单。你所有的星团都是开放的直线和曲线吗?没有闭合的曲线,比如圆?

    交叉线更难纠正,要么你必须找到某种方法合并然后分割,要么你设置合并标准以非常有利于共线性,然后你在交叉线上运气好。