Ich habe eine Datenbanktabelle von Datenübertragungen zwischen verschiedenen Knoten. Dies ist eine riesige Datenbank (mit fast 40 Millionen Überweisungen). Eines der Attribute ist die Anzahl der Bytes (nBytes), die zwischen 0 Byte und 2 Terabytes übertragen werden. Ich möchte die nbytes so gruppieren, dass gegebene k Cluster einige x1 Übertragungen zu k1 Cluster gehören, x2 Übertragungen zu k2 usw.
Anhand der von mir verwendeten Terminologie hätten Sie vielleicht erraten, was ich vorhatte: K-means. Dies sind 1d-Daten, da mir nur nbytes am Herzen liegen. Als ich nach anderen Methoden suchte, sah ich, dass die EM einige Male zusammen mit einem Nicht-Clustering-Ansatz erwähnt wurde. Ich würde gerne wissen, wie Sie dieses Problem angehen (insbesondere, ob Sie sich zu Clustern zusammenschließen oder nicht).
Vielen Dank!
quelle
Antworten:
Verwenden Sie in eindimensionalen Daten keine Clusteranalyse.
Die Clusteranalyse ist normalerweise eine multivariate Technik. Oder lassen Sie es mich besser andersherum sagen: Für eindimensionale Daten - die vollständig geordnet sind - gibt es viel bessere Techniken. Die Verwendung von k-means und ähnlichen Techniken ist hier eine völlige Verschwendung, es sei denn, Sie unternehmen genug Aufwand, um sie tatsächlich für den 1-d-Fall zu optimieren.
Nur um Ihnen ein Beispiel zu geben: Für k-means ist es üblich, k zufällige Objekte als Ausgangssamen zu verwenden. Für eindimensionale Daten ist es relativ einfach, die entsprechenden Quantile (1 / 2k, 3 / 2k, 5 / 2k usw.) zu verwenden, nachdem Sie die Daten einmal sortiert und dann von diesem Ausgangspunkt aus optimiert haben. 2D-Daten können jedoch nicht vollständig sortiert werden. Und in einem Gitter werden wahrscheinlich leere Zellen vorhanden sein.
Ich würde es auch nicht Cluster nennen. Ich würde es Intervall nennen . Was Sie wirklich tun möchten, ist die Intervallgrenzen zu optimieren. Wenn Sie k-means verwenden, wird für jedes Objekt geprüft, ob es in einen anderen Cluster verschoben werden soll. Dies ist in 1D nicht sinnvoll: Es müssen nur die Objekte an den Intervallgrenzen überprüft werden. Das ist natürlich viel schneller, da es dort nur ~ 2k Objekte gibt. Wenn sie nicht bereits andere Intervalle bevorzugen, werden zentralere Objekte auch nicht.
Möglicherweise möchten Sie Techniken wie beispielsweise die Optimierung von Jenks Natural Breaks untersuchen .
Oder Sie können eine Schätzung der Kerneldichte durchführen und nach lokalen Minima der Dichte suchen, die dort aufgeteilt werden sollen. Das Schöne ist, dass Sie dafür nicht k angeben müssen!
PS Bitte benutzen Sie die Suchfunktion. Hier sind einige Fragen zu 1-D-Datenclustern, die Sie verpasst haben:
quelle
Ist Ihre Frage, ob Sie Clustering durchführen sollen oder welche Methode Sie zum Clustering verwenden sollten?
Ob Sie Clustering durchführen, hängt davon ab, ob Sie Ihre Daten automatisch partitionieren möchten (z. B. wenn Sie diese Partitionierung mehrmals wiederholen möchten). Wenn Sie dies nur einmal tun, können Sie sich das Histogramm der Verteilung Ihrer Werte ansehen und es nach Augenmaß aufteilen, wie in den Kommentaren vorgeschlagen. Ich würde es trotzdem empfehlen, die Daten mit dem Auge zu betrachten, da es Ihnen dabei helfen könnte, festzustellen, wie viele Cluster Sie möchten und ob das Clustering "funktioniert".
In Bezug auf die Art der Clusterung sollte k-means in Ordnung sein, wenn die Daten "echte" Cluster enthalten. Wenn Sie keine Cluster im Histogramm sehen, ist es ohnehin nicht sinnvoll, sie zu gruppieren, da eine Aufteilung Ihres Datenbereichs gültige Cluster ergibt (oder im Fall einer zufälligen Initiierung von kmeans unterschiedliche Cluster erhalten jeder Lauf).
quelle
Du kannst es versuchen:
KMeans, GMM oder andere Methoden durch Angabe von n_clusters = no. von Peaks im Kernel-Dichte-Plot.
KMeans, GMM oder andere Methoden durch Bestimmung der optimalen Nr. von Clustern basierend auf einigen Metriken. Weitere Informationen: [hier] https://en.wikipedia.org/wiki/Determining_the_number_of_clusters_in_a_data_set
quelle