Ich versuche, eine sortierte Sammlung intelligent abzulegen. Ich habe eine Sammlung von Daten. Aber ich weiß, dass diese Daten in ungleich große Behälter passen. Ich weiß nicht, wie ich die Endpunkte intelligent auswählen soll, damit sie richtig zu den Daten passen. zum Beispiel:m
Angenommen, ich habe 12 Artikel in meiner Sammlung und weiß, dass die Daten in 3 Fächer passen:
Index: 1 2 3 4 5 6 7 8 9 10 11 12
Value: 1 1 1 3 3 3 3 3 3 5 5 6
Wie wähle ich intelligent meine Haltepunkte für die Fächer von ?
Die aktuelle Implementierung, die ich habe, unterteilt die Daten in gleich große Bins und verwendet dann den Durchschnitt der Endpunkte, um die Indizes für das Ende der Bins zu finden. So funktioniert es:
Index: 1 2 3 4 5 6 7 8 9 10 11 12
Value: 1 1 1 3 3 3 3 3 3 5 5 6
first break evenly: i = 1-4, 5-8, 9-12
mean endpoints: between 4 and 5: (3+3)/2 = 3
between 8 and 9: (3+3)/2 = 3
Jetzt passt alles unter 3 in Fach 1, alles über 3, aber unter 3 in Fach 2 und alles über 3 in Fach 3. Sie können sehen, was mein Problem ist. Wenn die Daten ungleiche Bins haben, schlägt meine Methode fehl.
Ein Freund erwähnte den k-Nächsten-Nachbarn-Algorithmus, aber ich bin mir nicht sicher.
quelle
Antworten:
Ich denke, was Sie tun möchten, heißt Clustering. Sie möchten Ihre "Werte" so gruppieren, dass ähnliche Werte im selben Fach gesammelt werden und die Anzahl der Gesamtfächer voreingestellt ist.
Sie können dieses Problem mit dem k-means-Clustering- Algorithmus lösen . In MATLAB können Sie dies tun, indem Sie:
Der obige Aufruf gruppiert die Werte in
Values
drei Gruppen, sodass die Varianz innerhalb der Gruppe minimal ist.quelle
k-means ist eine Option, aber für eindimensionale Daten nicht sehr sinnvoll. Bei eindimensionalen Daten haben Sie einen enormen Vorteil: Die Daten können vollständig sortiert werden.
Schauen Sie sich stattdessen die Optimierung natürlicher Pausen an :
http://en.wikipedia.org/wiki/Jenks_natural_breaks_optimization
quelle