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?
Odpowiedzi:
Ś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 )
źródło
Ś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!
źródło
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.
źródło
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:
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.
źródło
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ę:
źródło
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.
źródło
Wspólna matematyka Java Apache robi to dość łatwo.
https://commons.apache.org/proper/commons-math/javadocs/api-3.1/org/apache/commons/math3/stat/clustering/DBSCANClusterer.html
źródło
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.
źródło