Ich verwende den Birch-Algorithmus aus dem Python-Paket scipy-learn, um eine Reihe von Punkten in einer kleinen Stadt in 10er-Gruppen zu gruppieren.
Ich benutze folgenden Code:
no = len(list_of_points)/10
brc = Birch(branching_factor=50, n_clusters=no, threshold=0.05,compute_labels=True)
In meiner Idee würde ich immer mit Sätzen von 10 Punkten enden. In meinem Fall habe ich jetzt 650 Punkte für Cluster und n_clusters ist 65.
Mein Problem ist jedoch, dass ich bei einem zu niedrigen Schwellenwert 1 Adresse pro Cluster habe, nur einen winzigen größeren Schwellenwert - 40 Adressen pro Cluster.
Was mache ich hier falsch?
python
clustering
scipy.spatial
Kaboom
quelle
quelle
Antworten:
Ich habe einige Nachforschungen angestellt. Ich habe einige Punkte in zwei Koordinatensystemen ohne Metrik (WGS84) und Metrik (Polen 1992) genommen.
Ich habe diesen Code verwendet:
Dann passe ich unser Modell mit metrischen Daten an:
Und zeichnen Sie die Ergebnisse auf, wobei Kreuze meine Punkte und Kreise meine Subcluster waren:
Das habe ich bekommen:
Sie können sehen, dass dieser Schwellenwert zu klein war, weil er in jedem Punkt einen Subcluster gefunden hat.
Definition der Schwelle:
In diesem Fall müssen wir diesen Wert erhöhen.
Zum:
es war viel besser:
Und die WGS84-Punkte für den Schwellenwert 0,5:
Nur ein Subcluster, nicht gut. In diesem Fall sollten wir jedoch den Schwellenwert verringern, also für 0,05:
Wir haben schöne Ergebnisse.
Fazit:
CRS ist wichtig. Sie müssen einen geeigneten Schwellenwert finden, der von Ihren Datenkoordinatensystemen und dem Abstand zwischen Punkten abhängt. Wenn Sie nicht metrisches CRS haben, sollte der Schwellenwert relativ kleiner sein als beim metrischen System. Sie müssen den Unterschied zwischen Metern und Grad kennen. Wenn der Abstand zwischen zwei Punkten 10000 m beträgt, beträgt er in WGS84 weniger als 1 Grad. Überprüfen Sie Google auf genauere Werte.
Es gibt auch mehr Punkte als den Wert von n_clusters. Es ist in Ordnung, es gibt keine Schwerpunkte von Clustern, sondern Subcluster. Wenn Sie versuchen, etwas vorherzusagen oder Beschriftungen zu drucken, wird Ihr Punkt in einen der Bereiche n_clusters (oder Druckpunkte, die als Beschriftung 0,1,2, ..., n_clusters klassifiziert sind) klassifiziert.
Wenn Sie keine anderen Parameter ausprobieren möchten, können Sie jederzeit einen anderen Algorithmus verwenden. Sehr einfacher und gebräuchlicher Algorithmus für das Clustering ist der K-Mittelwert-Algorithmus.
http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
Es sollte n Cluster für Ihre Daten finden, ohne auf Schwellenwerte usw. zu achten.
quelle