python sklearn KDTree与hasrsine距离

时间:2016-07-04 16:22:39

标签: python scikit-learn kdtree

我尝试创建一个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距离?

2 个答案:

答案 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中,这些点被组织在树中,这使得它无法使用。