有没有办法对向量进行排序/排序?

数据挖掘 k-nn
2022-03-10 16:43:23

我正在研究最近邻算法的 KD-Tree,在树的每一级,我们任意选择一个维度进行切割,并根据该选择的维度值对点进行排序,之后我们可以选择中点进行分割从该中间点划分点将为我们提供一棵平衡树(在任一子树中具有相同数量的点)。在每个级别选择一个维度并重复该过程。

例如:对于具有维度 (x,y,z) 的数据,假设在切割维度选择树的第一级“X”,在第二级选择“Y”,在第三级选择“Z”,然后再次使用“X”重复再次在第四级,依此类推。因此,对于第一级,所有点都根据维度“X”进行排序,并根据排序数据的中间值拆分为左右子树。

我相信你已经明白了它的要点。否则,请在此处阅读更多内容。KD树(维基)

现在我想尝试的不是在不同级别使用每个维度,而是在同一级别使用所有维度。即我将点 p(x,y,z) 作为向量。但是你可以猜到,如果我这样做,我无法对向量(点)进行排序(我不知道),这样我就可以找到一个向量来划分,因此仍然保持我的树有点平衡。

PS:我不太关心它实际上是更好或更坏的做事方式。现在更多的是关于是否有可能这样做,然后找出它为什么更好或更差。

请询问我是否应该提供更多信息,或者我是否提到了错误。我感谢您的帮助。

如果合适,请添加更多标签,我找不到任何标签。

编辑:只是为了说清楚。基本上我希望能够有一个不会破坏基于距离的订单的订单。即,如果一个点/向量 A 与另一个点 P 的距离更短,它在顺序上比某个更远的点排在第一位,比如说 B。我的最终目标是使用它来尝试创建某种最近邻算法。

1个回答

如果我正确理解了您的问题,那么您正在寻找另一种(KD-trees 之外)标准空间分区算法所做的事情。这称为BSP 树(用于二进制空间分区),它使用向量而不是维度进行空间细分/分区。您可以在幻灯片 29(预览如下)和本演示文稿的其他部分中看到它与 KD-trees 的对比

算法中使用的标准旨在平衡树分支中的数据。这指导了向量订单的定义,这似乎也是您的目的。

否则,更一般地说,在向量空间上定义总阶的一种方法是识别阶向量。然后,您的排序由具有此向量的点积定义。这表示将整个空间投影到由向量定义的线上,从而使用它定义的一维空间的总阶。有关点积的更详细说明,请查看此视频