如何对存储在SQL中的附近纬度和经度位置进行分组

我正在尝试分析英国自行车事故的数据,以找出统计上的黑点。这里是来自另一个网站的数据示例。http://www.cycleinjury.co.uk/map

我目前使用SQLite存储大约10万个纬度/经度位置。我希望将附近的位置分组在一起。这项任务被称为聚类分析

我希望通过忽略孤立的事件来简化数据集,只显示在小区域内发生过多次事故的聚类起点。

我需要克服三个问题。

  1. 性能 – 如何确保快速找到附近的点。例如,我是否应该使用SQLite的R-Tree实现

  2. 链条 – 如何避免选择附近点的链条?

  3. 密度 – 如何考虑自行车人口密度?伦敦的自行车人口密度远高于布里斯托尔,因此伦敦似乎有更多的黑点。

我希望避免像这样的“链条”场景:

enter image description here

相反,我希望找到聚类:

enter image description here

伦敦截图(我手绘了一些聚类)…

enter image description here

布里斯托尔截图 – 密度低得多 – 如果不考虑相对密度,运行在该区域的同一程序可能找不到任何黑点。

enter image description here

任何建议都将非常有帮助!


回答:

嗯,你的问题描述听起来完全像是DBSCAN聚类算法(维基百科)。它避免了链条效应,因为它要求至少有minPts个对象。

至于跨区域的密度差异,OPTICS(维基百科)应该可以解决这个问题。不过,你可能需要使用不同的方式来提取聚类。

嗯,可能不是100% – 你可能希望有单一的热点,而不是“密度连接”的区域。当考虑OPTICS图时,我认为你只对小而深的谷感兴趣,而不是大的谷。你可以使用OPTICS图并扫描“至少10起事故”的局部最小值。

更新:感谢你提供数据集的指引。这真的很有趣。所以我没有将数据过滤到仅限自行车手,而是目前使用所有120万条带坐标的记录。我将它们输入到ELKI进行分析,因为它速度非常快,而且它实际上可以使用地理距离(即基于纬度和经度)而不是欧几里得距离,以避免偏差。我启用了R*-树索引和STR批量加载,因为这应该能大大降低运行时间。我使用OPTICS运行,设置Xi=.1,epsilon=1(公里)和minPts=100(仅寻找大型聚类)。运行时间大约为11分钟,还不错。当然,OPTICS图将有120万像素宽,因此不再适合完整可视化。考虑到巨大的阈值,它识别了18个聚类,每个聚类有100-200个实例。我将尝试下一步可视化这些聚类。但在你的实验中,尝试使用较低的minPts值。

所以这里是找到的主要聚类:

  • 51.690713 -0.045545 伦敦北部A10上的一个十字路口,刚过M25
  • 51.477804 -0.404462 “Waggoners Roundabout”
  • 51.690713 -0.045545 “Halton Cross Roundabout”或其南侧的十字路口
  • 51.436707 -0.499702 A30和A308 Staines By-Pass的分叉
  • 53.556186 -2.489059 M61出口到A58,曼彻斯特西北部
  • 55.170139 -1.532917 A189,North Seaton Roundabout
  • 55.067229 -1.577334 A189和A19,就在这以南,一个四车道的环岛
  • 51.570594 -0.096159 Manour House,Piccadilly线
  • 53.477601 -1.152863 M18和A1(M)
  • 53.091369 -0.789684 A1,A17和A46,一个复杂的结构,A1两侧都有环岛
  • 52.949281 -0.97896 A52和A46
  • 50.659544 -1.15251 怀特岛,桑当

请注意,这些只是从聚类中随机选取的点。计算例如聚类中心和半径可能更合理,但我没有这样做。我只是想一窥这个数据集,它看起来很有趣。

这里是一些截图,minPts=50,epsilon=0.1,xi=0.02:

伦敦市中心的一些聚类

请注意,使用OPTICS,聚类可以是层次结构的。这里是一个细节:

嵌套聚类 - OPTICS产生一个层次结构

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注