【问题标题】:How to cluster latitude-longitude data based on fixed radius from centroid as the only constraint?如何根据质心的固定半径作为唯一约束对经纬度数据进行聚类?
【发布时间】:2016-09-26 18:51:06
【问题描述】:

我有大约 20 万个纬度和经度数据点。如何对它们进行聚类,使每个聚类的纬度和经度点严格在距离质心 = 1 公里的半径范围内?

我在 R 中尝试了leadercluster 算法/包,但即使我指定半径 =1 公里,它也没有严格执行它,即它给集群提供了很多点,比如在同一个集群中距离集群质心 5 到 10 公里。所以它不符合我的要求。

集群中的点数可以变化,这不是问题。

有没有办法在层次或其他聚类算法中强制执行严格的半径约束?我正在寻找 R/python 中的步骤和实现。 我尝试在 stackoverflow 中搜索,但在 r/python 中找不到解决方案。

聚类完成后如何在谷歌地图中可视化聚类质心?

编辑

我在 ELKI 中使用的参数。请验证

【问题讨论】:

    标签: google-maps cluster-analysis geospatial latitude-longitude hierarchical-clustering


    【解决方案1】:

    这不是一个聚类,而是一个set cover类型的问题。至少如果您正在寻找一个好的封面。聚类算法是关于在数据中寻找结构;但您正在寻找一些强制量化。

    无论如何,您可以尝试以下两种策略,例如在 ELKI 中:

    • T1=T2=您的半径的树冠预聚簇。这应该会产生一个覆盖场景的贪婪近似值。
    • 完整的链接层次凝聚聚类,在所需的高度切割。这是相当昂贵的 (O(n^3))。同一个簇中的任意两点最多有这个距离,所以这比你的要求要严格一些。

    请注意,您应该使用半正弦(“geo”)距离,而不是欧几里得!

    【讨论】:

    • 谢谢。在分层中,您的意思是说设置高度 = 半径(即 1 公里),因为我使用的是半正弦距离?我尝试了分层,但即使我有 16 GB 的 RAM,它的内存也用完了。
    • 您能解释一下使用 T1=T2 进行 Canopy 预聚类的作用吗?我是 ELKI 的新手。当我访问 ELKI 时,我找不到任何 Windows 安装程序。它是 GUI 还是我需要用 Java 编程?你能分享一下windows安装程序的链接吗?
    • T1,T2 是树冠聚类的属性,请参阅出版物中的定义。它们并不意味着相同,但您可以通过这种方式滥用它。 ELKI 不需要安装程序,只需下载并运行 jar(尽管要获得完整功能,您最终还是需要使用源代码 - GUI 有限制)。
    • K.在 Hierarchical Clustering 中,您的意思是说 set height =radius?
    • 对于完整的链接,height=radius 是一个安全的选择,height=2*radius 应该是有效的,但你不会知道确切的中心。但它的可扩展性不是很好。如果您在 ELKI 中启用覆盖树,第一种方法可能会快得多
    猜你喜欢
    • 2015-02-11
    • 1970-01-01
    • 2015-05-25
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 2019-08-03
    • 1970-01-01
    相关资源
    最近更新 更多