聚类经度和纬度 GPS 数据



我有超过40万辆汽车GPS位置,例如:

[ 25.41452217,  37.94879532],
[ 25.33231735,  37.93455887],
[ 25.44327736,  37.96868896],
... 

我需要使用点之间的距离进行空间聚类 <= 3 米。
我尝试使用DBSCAN,但似乎它对geo(longitude, latitude)不起作用。

另外,我不知道集群的数量。

您可以使用pairwise_distances来计算与纬度/经度的地理距离,然后通过指定metric='precomputed'将距离矩阵传递到DBSCAN中。

要计算距离矩阵:

from sklearn.metrics.pairwise import pairwise_distances
from sklearn.cluster import DBSCAN
from geopy.distance import vincenty
def distance_in_meters(x, y):
    return vincenty((x[0], x[1]), (y[0], y[1])).m
distance_matrix = pairwise_distances(sample, metric=distance_in_meters)

要使用矩阵运行 DBSCAN,请执行以下操作:

dbscan = DBSCAN(metric='precomputed', eps=3, min_samples=10)
dbscan.fit(distance_matrix)

希望这有帮助。

耿宇

DBSCAN是一个合理的选择,但使用分层聚类算法(如OPTICS和HDBSCAN*)可以获得更好的结果。

前段时间我写了一篇关于聚类 2300 万个推文位置的博客文章:

http://www.vitavonni.de/blog/201410/2014102301-clustering-23-mio-tweet-locations.html

这里也是一个用于聚类 GPS 点的博客。她使用了一种非常相似的方法,并提供了更多细节:

https://doublebyteblog.wordpress.com/

从本质上讲,OPTICS 适用于此类数据,并且您确实需要使用 ELKI 中的 R* 树或覆盖树等索引。两者都使用Haversine距离并且非常快。

相关内容

  • 没有找到相关文章

最新更新