Le Clustering de géo-localisation coordonnées (lat,long paires) à l'aide de l'algorithme KMeans avec Python
En utilisant le code suivant cluster les coordonnées géographiques des résultats en 3 groupes:
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()
Est-il le droit d'utiliser Kmeans pour l'emplacement de clustering, car il utilise La distance euclidienne et pas Haversine formule comme une fonction de distance?
OriginalL'auteur user1264304 | 2014-07-15
Vous devez vous connecter pour publier un commentaire.
Il dépend fortement de votre demande:
Si vous avez vraiment besoin de la Haversine formule, vous voudrez peut-être regarder dans cette discussion. Comme Anony-Mousse dit:
OriginalL'auteur Falko
k-means est pas un bon algorithme à utiliser pour l'agrégation spatiale, pour les raisons que vous meantioned. Au lieu de cela, vous pourriez faire de ce regroupement d'emploi à l'aide de scikit-learn DBSCAN avec le haversine métrique et de billes d'algorithme d'arbre.
Ce tutoriel montre clustering de latitude-longitude de données spatiales avec DBSCAN/haversine et évite tous ces Euclidienne distance des problèmes:
Noter que cette utilise spécifiquement scikit-learn v0.15, comme certains plus tôt/tard versions semblent exiger une pleine matrice de distance pour être calculé. Notez également que l'eps valeur est en radians et que .ajustement() prend les coordonnées en radian unités pour la haversine métrique.
OriginalL'auteur eos