为了账号安全,请及时绑定邮箱和手机立即绑定

高效测地最近的邻居

高效测地最近的邻居

翻阅古今 2021-04-01 17:14:18
从纬度/经度数据(以弧度为单位)开始,我试图有效地找到最接近的n个邻居,理想情况下是测地线(WGS-84)的距离。现在,我使用sklearn的BallTree与半正矢距离(KD-特雷斯只需要minkowskian距离),这是很好的和快速(3-4秒内找到最近的5个邻居在7500个可能的匹配1200个位置),但不准确的我需要。代码:tree = BallTree(possible_matches[['x', 'y']], leaf_size=2, metric='haversine')distances, indices = tree.query(locations[['x', 'y']], k=5)当我用自定义函数代替metric(metric=lambda u, v: geopy.distance.geodesic(u, v).miles)时,将花费“不合理的”长时间(在与上述相同的情况下为4分钟)。据记载,自定义函数可能会花费很长时间,但是并不能帮助我解决问题。我看过使用带有ECEF坐标和欧几里得距离的KD-Tree,但是我不确定这是否更准确。如何保持当前方法的速度,但提高距离精度?
查看完整描述

1 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

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

因此,例如在此处针对“随机森林”进行的讨论或在此处,您将必须在Cython中实现指标,派生自己的BallTree版本,并在其中包含自定义指标。


查看完整回答
反对 回复 2021-04-09
  • 1 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号