我一直在探索和学习 KNN 的 KD 树(K 最近邻问题),什么时候搜索不起作用?或者是否值得或不改进天真的搜索。这种方法有什么缺点吗?
问问题
1498 次
3 回答
2
这取决于您的距离函数。
您不能使用具有任意距离函数的 kd 树。闵可夫斯基规范应该没问题。但在很多应用程序中,您会希望使用更高级的距离函数。
另外,随着维数的增加,kd-trees 的工作效果会大大降低。
原因很简单:kd-trees 避免查看到边界的一维距离已经大于所需阈值的点,即欧几里得距离的位置(其中 z 是最近的边界,y 是最近的已知点):
(x_j - z_j) <=> sqrt(sum_i((x_i - y_i)^2))
equivalently, but cheaper:
(x_j - z_j)^2 <=> sum_i((x_i - y_i)^2)
你可以想象,这个修剪规则成立的机会随着维度的数量而急剧下降。如果您有 100 个维度,那么单个维度的平方差几乎不可能大于平方差的总和。
于 2013-02-17T13:18:12.863 回答