Używam algorytmu Birch z scipy-learn pakiet Python do grupowania zestawu punktów w jednym małym mieście w zestawy po 10.
Używam następującego kodu:
no = len(list_of_points)/10
brc = Birch(branching_factor=50, n_clusters=no, threshold=0.05,compute_labels=True)
W moim pomyśle zawsze kończyło mi się zestawem 10 punktów. W moim przypadku mam teraz 650 punktów do zgrupowania, a n_clusters to 65.
Ale moim problemem jest to, że przy zbyt niskim progu otrzymuję 1 adres klastra, tylko trochę większy próg - 40 adresów na klaster.
Co robię tutaj źle?
python
clustering
scipy.spatial
kaboom
źródło
źródło
Odpowiedzi:
Zrobiłem trochę badań. Wziąłem kilka punktów w dwóch układach współrzędnych niemetrycznych (WGS84) i metrycznych (Polska 1992).
Użyłem tego kodu:
Następnie dopasowuję nasz model do danych metrycznych:
I wykreślić wyniki, w których krzyże były moimi punktami, a koła - moimi podgrupami:
Oto co mam:
Widać, że ta wartość progowa była zbyt mała, ponieważ w każdym punkcie znajdowała się podgrupa.
Definicja progu:
W takim przypadku musimy zwiększyć tę wartość.
Dla:
było znacznie lepiej:
I punkty WGS84 dla progu 0,5:
Tylko jedna podgrupa, nie jest dobra. Ale w tym przypadku powinniśmy zmniejszyć wartość progową, więc dla 0,05:
Mamy dobre wyniki.
Wniosek:
CRS ma znaczenie. Musisz znaleźć odpowiednią wartość progową, zależy od układu współrzędnych danych i odległości między punktami. Jeśli masz niemetryczny CRS, próg powinien być stosunkowo mniejszy niż w systemie metrycznym. Musisz znać różnicę między metrami i stopniami, jeśli odległość między dwoma punktami jest równa 10000 m, w WGS84 będzie mniejsza niż 1 stopień. Sprawdź w Google, aby uzyskać dokładniejsze wartości.
Jest też więcej punktów niż wartość n_clusters. Jest ok, nie ma centroidów klastrów, ale podgrupy. Jeśli spróbujesz coś przewidzieć lub wydrukować etykiety, sklasyfikujesz swój punkt w jednym z obszarów n_clusters (lub wydrukujesz punkty sklasyfikowane do etykiety 0,1,2, ..., n_clusters).
Jeśli nie chcesz wypróbować różnych parametrów, zawsze możesz wziąć inny algorytm. Bardzo prostym i powszechnym algorytmem dla grupowania jest algorytm K-średnich.
http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
Powinien znaleźć n klastrów dla danych bez dbania o progi itp.
źródło