聚类地理位置坐标(纬度,经度对)

数据挖掘 机器学习 Python 聚类 k-均值 地理空间
2021-10-02 20:05:43

什么是地理定位聚类的正确方法和聚类算法?

我正在使用以下代码对地理位置坐标进行聚类:

import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster.vq import kmeans2, whiten

coordinates= np.array([
           [lat, long],
           [lat, long],
            ...
           [lat, long]
           ])
x, y = kmeans2(whiten(coordinates), 3, iter = 20)  
plt.scatter(coordinates[:,0], coordinates[:,1], c=y);
plt.show()

使用 K-means 进行地理定位聚类是否正确,因为它使用欧几里德距离,而不是Haversine 公式作为距离函数?

4个回答

K-means 不是这里最合适的算法。

原因是 k-means 旨在最小化方差当然,这是从统计和信号处理的角度来看的,但您的数据不是“线性的”。

由于您的数据采用纬度、经度格式,因此您应该使用可以处理任意距离函数的算法,尤其是大地距离函数。层次聚类、PAM、CLARA 和 DBSCAN 是这方面的流行示例。

建议使用 OPTICS 集群。

当您考虑接近 +-180 度环绕的点时,很容易看出 k-means 的问题。即使你破解了k-means来使用Haversine距离,在更新步骤中,当它重新计算平均值时,结果也会被严重搞砸。最坏的情况是,k-means 永远不会收敛!

在这种情况下,K-means 应该是正确的。由于 k-means 尝试仅根据对象之间的欧几里德距离进行分组,因此您将获得彼此靠近的位置集群。

要找到最佳聚类数,您可以尝试绘制组内平方和距离的“弯头”图。可能会有所帮助

GPS 坐标可以直接转换为geohashGeohash 根据位数将地球划分为不同大小的“桶”(短 Geohash 代码创建大区域,较长代码用于较小区域)。Geohash 是一种可调整的精度聚类方法。

我的回答可能很晚,但如果您仍在处理地理聚类,您可能会发现这项研究很有趣。它处理了两种截然不同的地理数据分类方法的比较:K-means 聚类和潜在类增长建模。

研究中的一张图片:

在此处输入图像描述

作者得出的结论是,最终结果总体上是相似的,并且在某些方面 LCGM 优于 K-means。