我尝试创建一个WGS84坐标的KD树,并找到某个半径范围内的邻居
from sklearn.neighbors.dist_metrics import DistanceMetric
from sklearn.neighbors.kd_tree import KDTree
T = KDTree([[47.8665, 8.90123]], metric=DistanceMetric.get_metric('haversine'))
但是得到以下错误:
ValueError: metric HaversineDistance is not valid for KDTree
如何在KD-Tree中使用hasrsine距离?
答案 0 :(得分:2)
k-d-tree可以(据我所知)仅与Minkowski规范一起使用。
还有其他一些树,例如sklearn中的球树,或ELKI中使用Haversine距离的covertree,因为它是一个指标。
答案 1 :(得分:0)
KDTree.valid_metrics
输出 -
['p',
'l1',
'chebyshev',
'manhattan',
'minkowski',
'cityblock',
'l2',
'euclidean',
'infinity']
这告诉您,您不能将haversine
与KDTree一起使用。其背后的原因是haversine
距离为您提供Orthodromic距离,这是您的点在球体中表示时使用的距离度量。但是在kdTree中,这些点被组织在树中,这使得它无法使用。