使用 R 对地理点进行聚类

Posted

技术标签:

【中文标题】使用 R 对地理点进行聚类【英文标题】:clustering on geo points using R 【发布时间】:2016-06-03 21:23:07 【问题描述】:

我有一组城市的纬度,长点。现在我想使用 R 根据 500m 半径或 1km 半径对这些点进行聚类。确切地说,我想找出该特定聚类的质心以及 500m 半径内的所有这些点。

PS:

1.我用了k个手段。但我无法在 K 中修复半径 - 意味着。 2.我尝试在R中使用Leadercluster包。在我将簇映射到点后,找到与质心的距离后,我发现Leadercluster包中有很多点被标记为超过指定半径。

我的问题与此链接中的问题完全相同: https://gis.stackexchange.com/questions/146701/convert-eps-to-geographic-distance-using-dbscan 我正在寻找 R 解决方案

请提出一种基于半径对这些点进行聚类的好方法。

提前致谢

【问题讨论】:

KV 您找到问题的答案了吗?您可以发布步骤和代码吗? +1 【参考方案1】:

使用层次聚类。

通过最大连接,在所需高度切割,您可以确保每个集群中的最大距离。

使用质心链接,到中心的距离应该是有界的,但这可能仅限于欧​​几里得距离?

【讨论】:

我是 R 新手。你能告诉我怎么做吗?我有纬度和经度点,我猜用欧几里得距离来限制距离是错误的。 我不怎么用R,它可能很慢。你需要Haversine距离。 我也在尝试使用需要距离矩阵作为输入的 DBSCAN。有没有办法可以将空间点作为输入 是的,距离矩阵可能太贵了。我所知道的唯一支持 Haversine 和加速索引的 DBSCAN 版本是 ELKI 中的版本,而不是 R。它非常快。【参考方案2】:

您可以围绕点https://gis.stackexchange.com/questions/121489/1km-circles-around-lat-long-points-in-many-places-in-world 绘制圆圈,然后将它们与gUnion 合并。新的多边形将是点彼此靠近的簇。获取质心的一种简单方法是取属于每个新多边形的点的纬度和经度的平均值。

【讨论】:

我会在大量数据上执行此操作。我有一个城市大约 20 万个位置点。通过聚类我想看看,哪个集群在 500m 半径范围内具有最大密度。我希望算法以这样的方式选择质心点,即该集群将在该范围内具有最大可用点 我做了类似的事情,成千上万的点聚集在世界各地。我发现基于距离的聚类算法花费的时间太长(因为 500m 的 lat lon 各地都不一样,需要计算)。将其转换为库(sp)类的点和多边形,然后使用它们的功能在我的情况下被证明是最快的。如果您有两个靠近的小集群和一个远离的大集群,分层集群也可能会很棘手。但当然可以。 也许这会有所帮助:***.com/questions/10108368/…>。我用 R 代码回答了。

以上是关于使用 R 对地理点进行聚类的主要内容,如果未能解决你的问题,请参考以下文章

k-means 使用 Spark/Scala 对地理定位数据进行聚类

R语言使用K-Means聚类可视化WiFi访问

R语言使用K-Means聚类可视化纽约市WiFi访问

基于R语言的分类、聚类研究

使用 Mahout 对一个点进行聚类

WGS84 坐标中的聚类或过滤点