我可以使用任意指标来搜索KD树吗?

时间:2009-04-01 05:56:48

标签: algorithm math search data-structures machine-learning

我刚刚完成了kd-tree实施快速最近邻搜索。我有兴趣使用除Euclidean distance以外的不同距离指标。我对kd-tree的理解是,如果度量是非欧几里德,那么快速的kd-tree搜索不能保证给出精确的搜索,这意味着如果我想尝试我可能需要实现一个新的数据结构和搜索算法我的搜索新指标。

我有两个问题:

  1. 使用kd-tree永久性地将我绑定到Euclidean distance
  2. 如果是这样,我应该尝试使用其他类型的算法来处理任意metrics?我没有太多时间来实现许多不同的数据结构,但我正在考虑的其他结构包括cover treesvp-trees

2 个答案:

答案 0 :(得分:9)

您链接到的维基百科页面上描述的最近邻搜索程序当然可以推广到其他距离指标,前提是您将“超球面”替换为给定指标的等效几何对象,并测试每个超平面与此交叉点对象

示例:如果您正在使用曼哈顿距离(即矢量分量中所有差异的绝对值之和),则您的超球面将成为(多维)钻石。 (这在2D中最容易可视化 - 如果当前最近邻居距离查询点 p 的距离 x ,则不同超平面后面的任何近邻都必须相交钻石形状,宽度和高度为2x,以 p 为中心。这可能会使超平面交叉测试更难编码或更慢运行,但一般原则仍然适用。

答案 1 :(得分:4)

我不认为你与欧几里德的距离有关 - 正如j_random_hacker所说,你可以使用曼哈顿距离 - 但我很确定你与可以用笛卡尔坐标表示的几何相关联。因此,您无法使用kd树来索引度量标准空间,例如。