集群的经度和纬度的GPS数据
问题描述:
我有400辆多万辆汽车GPS位置,如:集群的经度和纬度的GPS数据
[ 25.41452217, 37.94879532],
[ 25.33231735, 37.93455887],
[ 25.44327736, 37.96868896],
...
我需要空间聚类点< = 3米之间的距离。
我试过使用DBSCAN
,但它似乎不适用于geo(longitude, latitude)
。
此外,我不知道群集的数量。
答
DBSCAN是一个合理的选择,但使用OPTICS和HDBSCAN *等分层聚类算法可能会获得更好的结果。
我做了一个博客帖子前段时间聚类23000000个分享Tweet地点:
http://www.vitavonni.de/blog/201410/2014102301-clustering-23-mio-tweet-locations.html
这里也是聚集GPS点的博客。她采用了非常相似的方法,并给出更详细信息:
https://doublebyteblog.wordpress.com/
从本质上说,OPTICS很适合这样的数据,你真的需要向使用索引如R *树或封面树在ELKI。两者都与Haversine距离一起工作,速度非常快。
答
可以使用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)
希望这有助于。
Gengyu
请出示到目前为止,你已经尝试代码:[MCVE] – Adib
DBSCAN适用于纬度,经度 - 只要选择适当的*距离功能*(并确保你知道它是否使用米,码,...) –