【问题标题】:Why k-d trees is not used for high dimensional data?为什么k-d树不用于高维数据?
【发布时间】:2016-09-05 02:12:35
【问题描述】:

在 k-d 树的页面上引用维基百科:

k-d 树不适合有效地找到最近的 高维空间中的邻居。作为一般规则,如果 维数为k,数据中的点数N,应该是N>> 2k。否则,当 k-d 树与高维数据一起使用时,树中的大部分点都会被评估,效率为 不比穷举搜索好,[11] 和近似 应该使用最近邻方法。

我不明白维数 (k) 和数据中的点数 (N) 之间的区别,以及为什么关于 k-d 树何时不方便的说法是正确的。

【问题讨论】:

  • k 是数据点的维数(向量分量)。当 k 很大时,k-D 树效率低下,因为分裂不能有效地减少最小距离并且搜索会退化到穷举。
  • 好的,如果我们有一个表示为 64 位向量的图像,我们有 k=4...但是 N 是多少?
  • 64和4是什么关系???
  • 抱歉,打错了:k=64,但 N 是什么?
  • 向量的个数,还有什么?

标签: algorithm


【解决方案1】:

k数据的维度,而n数据集中的点数。所以如果你的数据集包含 1000 万个点,每个点有 3 个维度,k 是 3,n 是 1000 万。

k-d树不适合寻找高维最近邻的原因与所谓的curse of dimensionality有关。 k-d 树重复使用沿单个维度的拆分,但在处理高维数据时,了解一维中的(欧几里得)距离对整个空间中的距离几乎没有影响。

想要大于 2k 的数据集的原因非常直观:我们将数据集沿每个维度分成大小相等的两半。如果我们的数据点少于 2k 个,那么一段时间后将没有更多数据要拆分!例如,如果您在 3 维上有 4 个点,我们可以在 x 上拆分,给出两组两个点。我们在 y 上拆分它,给出四组一个点。但是现在我们不能再在 z 上分裂了!

【讨论】:

  • knowing something about the [Euclidean] distance in one dimension says very little about the distance in the full space - 它给出了一个下限,因此小于所有维度的接近度并不意味着“在整个空间中”的接近度,但即使在一个维度上也是 distant确实排除了。
  • kd-tree 工作速度慢还是准确性低?或两者 ?为高维数据构建 kd 树需要 O(nk) 时间。准确性也可能会受到影响。
猜你喜欢
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
相关资源
最近更新 更多