2016-07-04 81 views
-1

我嘗試創建WGS84座標的KD樹和一定的半徑蟒蛇sklearn KDTree

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中的半束縛距離?

回答

0

k-d-tree可以(據我所知)只能與Minkowski規範一起使用。

還有其他樹木,如sklearn中的球樹,或ELKI中與Haversine距離一起工作的covertree,因爲它是一個度量標準。

+0

您也可以使用KDTree,但必須將經度,緯度對轉換爲carthesian/euclidean值,並將距離值轉換回英里或公里以上。據我所知,您還可以將經度和緯度轉換爲弧度,從而爲您提供直接以公里爲單位的距離。但還沒有測試過。 – Matthias

0

KDTree.valid_metrics

輸出 -

['p', 
'l1', 
'chebyshev', 
'manhattan', 
'minkowski', 
'cityblock', 
'l2', 
'euclidean', 
'infinity'] 

告訴,你不能KDTree使用haversine。其背後的原因是haversine距離給你Orthodromic距離,這是當你的點表示在一個球體中時使用的距離度量。但是在kdTree中,點被組織在樹中,使其無效。

+0

感謝您的解釋。任何想法如何使其運行速度比O(n^2)(計算所有距離對)? – user307380

+1

有與haversine一起工作的樹木。但是kd-tree沒有。在python中,球樹就是一個例子。 –

+0

哦,我完全沒有意識到這一點。謝謝(你的)信息。我會讀一讀。 – hashcode55