【问题标题】:Efficient Geodesic Nearest Neighbors高效测地线最近邻
【发布时间】:2018-11-29 22:59:33
【问题描述】:

从纬度/经度数据(以弧度表示)开始,我试图有效地找到最近的 n 个邻居,最好是测地线 (WGS-84) 距离。

现在我正在使用带有半正弦距离的sklearn’s BallTree(KD-Tres 只采用 minkowskian 距离),它既好又快(在 7500 个可能的匹配中为 1200 个位置找到最近的 5 个邻居需要 3-4 秒),但是不像我需要的那样准确。代码:

tree = BallTree(possible_matches[['x', 'y']], leaf_size=2, metric='haversine')
distances, indices = tree.query(locations[['x', 'y']], k=5)

当我用自定义函数替换度量 (metric=lambda u, v: geopy.distance.geodesic(u, v).miles) 时,它需要“不合理”的长时间(与上述相同的情况下为 4 分钟)。据记录,自定义函数可能需要很长时间,但并不能帮助我解决我的问题。

我研究了使用带有 ECEF 坐标和欧几里德距离的 KD-Tree,但我不确定这是否更准确。

如何在保持当前方法的速度的同时提高距离精度?

【问题讨论】:

    标签: python scipy scikit-learn geospatial


    【解决方案1】:

    您的指标运行缓慢的主要原因是它是用 Python 编写的,而 sklearn 中的其他指标是用 Cython/C++/C 编写的。

    例如讨论 here 用于随机森林或 here,您必须在 Cython 中实现您的指标,派生您自己的 BallTree 版本并在其中包含您的自定义指标。

    【讨论】:

      猜你喜欢
      • 2012-04-19
      • 2014-10-31
      • 1970-01-01
      • 2013-07-22
      • 2013-08-12
      • 2011-04-27
      • 1970-01-01
      • 2011-08-10
      • 2016-06-06
      相关资源
      最近更新 更多