为什么我们不使用空间填充曲线进行高维最近邻搜索?

数据挖掘 机器学习 降维
2021-10-08 14:12:32

一些空间填充曲线(如希尔伯特曲线)能够将 n 维空间映射到一维线,同时保留局部性。这是否意味着我们可以将高维点的数据集映射到一条线并期望保留最近邻居的顺序?

如果是这样,那不是比构建 Ball 树更有效吗?

2个回答

空间填充曲线有时用于最近邻搜索。请参阅Z 阶曲线希尔伯特曲线的这些应用

思路如下。f是一条空间填充曲线。给定一个点x, 将其索引为 f1(x).* 给定一个查询点 y,返回在一个区间内索引的所有点 f1(y). 如果y 接近 x, 很有可能 x 将被退回,只要 f1倾向于保留局部性。不同的空间填充曲线在不同程度上具有这种性质。

* 请注意,空间填充曲线不是单射的,因此逆不是唯一定义的。但在实践中,我们选择一个有限网格[0,1]n 和一个适当的双射迭代,所以我们没有问题。

保持“局部性”是空间填充曲线的理想属性,尤其是在这种情况下。但是我们不能希望真正保留所有点的最近邻居的顺序。(希尔伯特曲线的离散版本将相邻单元几乎放在曲线的两端;在维基百科的插图中,请参见顶部中心区域。)

这个想法可能仍然有用,作为一种 k 近似最近邻算法;但我不相信为数据集生成适当的(离散版本)空间填充曲线并在该曲线上查询新点实际上会比球树快得多。另一个问题是“最近”的近似值的误差取决于沿曲线的位置,因此您选择条曲线将对不同样本点的近似值的正确性产生重大影响。