我已经获得了n个固定点和m个查询点的坐标。我必须找到来自n个固定点的每个m个查询点的k-最近邻居。为每个查询点单独寻找距离是非常昂贵的。有没有一种有效的方法呢?
答案 0 :(得分:1)
此类问题有快速索引结构,例如 KD Tree 或 Ball Tree 。特别是 - scikit-learn(sklearn)在他们的knn例程中实现它们(http://scikit-learn.org/stable/modules/neighbors.html)
答案 1 :(得分:1)
您问题的真实答案取决于众多因素。例如,如果您没有使用欧几里德距离 - 那么您就不能使用KDTrees。还存在缩放问题(注册了多少点?尺寸大小?“聚集”“等待”等待训练的时间,如果需要将值添加到集合中,等等。
JSAT中提供了一些不太常用,胸围仍然有用的算法。其中包括VP Trees,RBC和LSH。 (偏见警告,我是JSAT的作者)
答案 2 :(得分:0)
如果你正在计算平方和的平方根以获得距离,请尝试删除计算密集的平方根。只需找到距离最近的平方距离 - 它们是相同的点。