从纬度/经度数据(以弧度为单位)开始,我尝试有效地找到最近的 n 个邻居,最好是测地线 (WGS-84) 距离。
现在我正在使用sklearn 球树使用半正矢距离(KD-Tres 仅采用 minkowskian 距离),这很好而且快速(3-4 秒即可在 7500 个可能的匹配中为 1200 个位置找到最近的 5 个邻居),但不如accurate如我所需要。代码:
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 树,但我不确定这是否真的更准确。
如何保持当前方法的速度,同时提高距离精度?
您的指标缓慢的主要原因是它是用 Python 编写的,而 sklearn 中的其他指标是用 Cython/C++/C 编写的。
例如所讨论的here对于随机森林或here你必须在 Cython 中实现你的指标,派生你自己的版本BallTree并在其中包含您的自定义指标。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)