Grupowanie współrzędnych położenia geograficznego (łac., Długie pary)


51

Jakie jest właściwe podejście i algorytm grupowania dla grupowania geolokalizacyjnego?

Używam następującego kodu do grupowania współrzędnych geolokalizacji:

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

Czy słuszne jest stosowanie środków K do grupowania geolokalizacji, ponieważ wykorzystuje on odległość euklidesową, a nie formułę Haversine jako funkcję odległości?


Możesz także spojrzeć na to podobne pytanie: datascience.stackexchange.com/questions/10063/…
VividD

Myślę, że wykonalność k-średnich zależy od tego, gdzie są twoje dane. Jeśli Twoje dane zostaną rozpowszechnione na całym świecie, nie będzie działać, ponieważ odległość nie jest euklidesowa, jak już powiedzieli inni użytkownicy. Ale jeśli twoje dane są bardziej lokalne, k-średnich byłoby wystarczające, ponieważ geometria jest lokalnie euklidesowa.
Juan Ignacio Gil

Odpowiedzi:


7

Środki K powinny mieć rację w tym przypadku. Ponieważ k-znaczy próbuje grupować wyłącznie na podstawie euklidesowej odległości między obiektami, otrzymasz klastry lokalizacji, które są blisko siebie.

Aby znaleźć optymalną liczbę klastrów, możesz spróbować wykonać wykres „łokcia” sumy odległości kwadratowej w obrębie grupy. Może to być pomocne ( http://nbviewer.ipython.org/github/nborwankar/LearnDataScience/blob/master/notebooks/D3.%20K-Means%20Clustering%20Analysis.ipynb )


3
W jaki sposób obsługiwane są punkty znajdujące się blisko siebie w punkcie zawijania?
casperOne

1
Musisz znaleźć algorytm, który przyjmuje wstępnie obliczoną macierz odległości lub pozwala podać funkcję odległości, którą może wywołać, gdy musi obliczyć odległości. W przeciwnym razie to nie zadziała.
Spacedman

Wykres łokcia może w ogóle ci nie pomóc, ponieważ może nie być łokcia. Upewnij się również, aby wypróbować kilka serii K-średnich z tym samym numerem klastra, ponieważ możesz uzyskać różne wyniki.
Grasshopper

To kiepski pomysł, ponieważ wszystkie punkty będą grupowane, co rzadko jest dobrym pomysłem przy mapowaniu.
Richard

52

Średnie K nie jest tutaj najbardziej odpowiednim algorytmem.

Powodem jest to, że k-średnie ma na celu zminimalizowanie wariancji . Jest to oczywiście pozorne z punktu widzenia statystyki i przetwarzania sygnałów, ale dane nie są „liniowe”.

Ponieważ twoje dane są w formacie szerokości i długości geograficznej, powinieneś użyć algorytmu, który może obsłużyć dowolne funkcje odległości, w szczególności funkcje odległości geodezyjnych. Hierarchiczne grupowanie, PAM, CLARA i DBSCAN są popularnymi tego przykładami.

https://www.youtube.com/watch?v=QsGOoWdqaT8 zaleca klastrowanie OPTICS.

Problemy z k-średnich można łatwo dostrzec, gdy weźmie się pod uwagę punkty bliskie zawinięciu + -180 stopni. Nawet jeśli hacked k-średnich używać Haversine dystans, na etapie aktualizacji, gdy przelicza oznaczać wynik będzie źle przykręcone. W najgorszym przypadku k-oznacza nigdy się nie zbiegnie!


Czy możesz zasugerować bardziej odpowiednią metodę grupowania danych geolokalizacyjnych?
Alex Spurling,

Czy zauważyłeś trzeci akapit?
Anony-Mousse,

7

Współrzędne GPS można bezpośrednio przekonwertować na geohash . Geohash dzieli Ziemię na „wiadra” o różnej wielkości w zależności od liczby cyfr (krótkie kody Geohash tworzą duże obszary, a dłuższe kody dla mniejszych obszarów). Geohash jest regulowaną, precyzyjną metodą grupowania.


Wydaje się, że cierpi na to ten sam problem zawinięcia o 180 stopni, co K-Means według artykułu z Wikipedii, do którego link znajduje się w odpowiedzi.
Norman H

Tak! Plus kody są znacznie lepsze plus.codes
Brian Spiering

Jedną z korzyści tego rozwiązania jest to, że o ile raz obliczysz geohash, powtarzane operacje porównywania będą przebiegać znacznie szybciej.
Norman H

Geohash będzie miał problemy z przypadkami krawędzi łyżki - dwa bardzo bliskie punkty zostaną umieszczone w różnych segmentach na podstawie dowolnych krawędzi każdego segmentu.
Dan G

5

Prawdopodobnie spóźniłem się z moją odpowiedzią, ale jeśli nadal masz do czynienia z grupowaniem geograficznym, to badanie może Cię zainteresować. Zajmuje się porównaniem dwóch dość różnych podejść do klasyfikacji danych geograficznych: grupowanie metodą „K” i modelowanie wzrostu klas ukrytych.

Jeden z obrazów z badania:

wprowadź opis zdjęcia tutaj

Autorzy doszli do wniosku, że wyniki końcowe były ogólnie podobne i że były pewne aspekty, w których LCGM przerosło K-średnie.


5

Możesz do tego użyć HDBSCAN . Pakiet python ma obsługę odległości hversine, która poprawnie oblicza odległości między punktami lat / lon.

Jak wspomniano w dokumentacji , najpierw trzeba przeliczyć punkty na radiany, aby to zadziałało. Poniższy kod psuedocode powinien załatwić sprawę:

points = np.array([[lat1, lon1], [lat2, lon2], ...])
rads = np.radians(points)
clusterer = hdbscan.HDBSCAN(min_cluster_size=N, metric='haversine')
cluster_labels = clusterer.fit_predict(points)

0

Algorytm k-średnich do grupowania lokalizacji to zły pomysł. Twoje lokalizacje mogą być rozmieszczone na całym świecie, a liczba klastrów nie może być przez ciebie przewidywana, nie tylko to, że jeśli umieścisz klaster jako 1, lokalizacje zostaną zgrupowane w 1 pojedynczym klastrze. Do tego samego używam hierarchicznego grupowania.



-1

Idź z klastrem Kmeans, ponieważ HBScan zajmie wieczność. Wypróbowałem to w jednym z projektów i zakończyłem, ale korzystałem z Kmeans z pożądanymi rezultatami.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.