gpt4 book ai didi

python - 使用 Python 的 KMeans 算法聚类地理位置坐标(lat,long 对)

转载 作者:太空狗 更新时间:2023-10-29 21:28:59 25 4
gpt4 key购买 nike

使用以下代码对地理位置坐标进行聚类会产生 3 个聚类:

    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()

使用 Kmeans 进行位置聚类是否正确,因为它使用 Euclidean distance而不是 Haversine formula作为距离函数?

最佳答案

出于您提到的原因,k-means 不是用于空间聚类的好算法。相反,您可以使用 scikit-learn 的 DBSCAN 以及半正弦度量和球树算法来完成此聚类作业。

本教程演示了 clustering latitude-longitude spatial data使用 DBSCAN/haversine 并避免所有这些欧氏距离问题:

df = pd.read_csv('gps.csv')
coords = df.as_matrix(columns=['lat', 'lon'])
db = DBSCAN(eps=eps, min_samples=ms, algorithm='ball_tree', metric='haversine').fit(np.radians(coords))

请注意,这特别使用了 scikit-learn v0.15,因为一些较早/较晚的版本似乎需要计算完整的距离矩阵。另请注意,eps 值以弧度为单位,并且 .fit() 采用半正弦度量的以弧度为单位的坐标。

关于python - 使用 Python 的 KMeans 算法聚类地理位置坐标(lat,long 对),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24762435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com