Algorithmus zur Segmentierung von Sequenzdaten


8

Ich habe eine große Folge von Vektoren der Länge N. Ich brauche einen unbeaufsichtigten Lernalgorithmus, um diese Vektoren in M ​​Segmente zu unterteilen.

Zum Beispiel:

Geben Sie hier die Bildbeschreibung ein

K-means ist nicht geeignet, da es ähnliche Elemente von verschiedenen Standorten in einem einzigen Cluster zusammenfasst.

Aktualisieren:

Die realen Daten sehen folgendermaßen aus:

Geben Sie hier die Bildbeschreibung ein

Hier sehe ich 3 Cluster: [0..50], [50..200], [200..250]

Update 2:

Ich habe modifizierte k-Mittel verwendet und dieses akzeptable Ergebnis erhalten:

Geben Sie hier die Bildbeschreibung ein

Grenzen von Clustern: [0, 38, 195, 246]


2
Die Qualität der Frage sollte verbessert werden, um eine richtige Antwort zu erhalten. Ändern sich beispielsweise alle Sequenzen immer an derselben Stelle (wie Sie es im Beispiel dargestellt haben)?
Kasra Manshaei

Meine realen Daten sind komplizierter. Es ist eine Liste von 9-dimensionalen Vektoren. Ich werde dem Hauptabschnitt ein Bild hinzufügen.
allgemein

Antworten:


8

Bitte lesen Sie meinen Kommentar oben und dies ist meine Antwort gemäß dem, was ich aus Ihrer Frage verstanden habe:

Geben Sie hier die Bildbeschreibung eindx<- -20dx>20

Vorverarbeitung

Bitte beachten Sie, dass es einen Kompromiss zwischen der genauen Position des Änderungspunkts und der genauen Anzahl von Segmenten gibt. Wenn Sie also die Originaldaten verwenden, finden Sie die genauen Änderungspunkte, aber die gesamte Methode ist zu rauschempfindlich, aber wenn Sie glätten Ihre Signale zuerst finden Sie möglicherweise nicht die genauen Änderungen, aber der Rauscheffekt ist viel geringer, wie in den folgenden Abbildungen gezeigt:

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Fazit

Mein Vorschlag ist , Ihre Signale zuerst und gehen für ein einfaches Clustering mthod (zB mit glätten GMM s) eine genaue Schätzung der Anzahl der Segmente in Signale zu finden. Anhand dieser Informationen können Sie Änderungspunkte finden, die durch die Anzahl der Segmente eingeschränkt sind, die Sie im vorherigen Teil gefunden haben.

Ich hoffe es hat alles geholfen :)

Viel Glück!

AKTUALISIEREN

Zum Glück sind Ihre Daten ziemlich einfach und sauber. Ich empfehle dringend Algorithmen zur Reduzierung der Dimensionalität (z . B. einfache PCA ). Ich denke, es zeigt die interne Struktur Ihrer Cluster. Sobald Sie PCA auf die Daten angewendet haben, können Sie k-means viel einfacher und genauer verwenden.

Eine ernsthafte (!) Lösung

Nach Ihren Angaben sehe ich, dass die generative Verteilung verschiedener Segmente unterschiedlich ist, was eine große Chance für Sie ist, Ihre Zeitreihen zu segmentieren. Sehen Sie sich dies an (Original , Archiv , andere Quelle ), die wahrscheinlich die beste und modernste Lösung für Ihr Problem ist. Die Hauptidee hinter diesem Artikel ist, dass, wenn verschiedene Segmente einer Zeitreihe durch verschiedene zugrunde liegende Verteilungen erzeugt werden, Sie diese Verteilungen finden, dies als Grundwahrheit für Ihren Clustering-Ansatz festlegen und Cluster finden können.

Nehmen wir zum Beispiel ein langes Video an, in dem in den ersten 10 Minuten jemand Fahrrad fährt, in den zweiten 10 Minuten läuft er und in der dritten sitzt er. Mit diesem Ansatz können Sie diese drei verschiedenen Segmente (Aktivitäten) gruppieren.


Vielen Dank für die ausführliche Antwort. Wie Sie oben sehen können, kann ich keine Schwellenwerte für meine reale Datensequenz verwenden. Ich denke, das ist zu kompliziert. Ich versuche, den k-means-Algorithmus zu modifizieren, er berücksichtigt die Bedingung der Sequenz (Element kann nur zu einem von zwei benachbarten Clustern gehören). Ich hoffe, dass ich das Rad nicht neu erfinde. :)
allgemein

1
Ich denke, Ihre Daten sind nicht so verrauscht (dh kompliziert) und Sie können sich für Schwellenwerte entscheiden. Der Punkt ist, dass Sie einen Eindruck von den Daten haben, so dass Sie einen irgendwie überwachten Algorithmus verwenden können, dh versuchen, Schwellenwerte zu lernen (und hoffen, dass er sich gut verallgemeinert!). Ich aktualisiere auch meine Antwort für eine nette Lösung :)
Kasra Manshaei

Vielen Dank für die interessanten Links, ich denke, es kann für meinen Zweck verwendet werden, aber im Moment verwende ich k-means mit meinen Modifikationen, was mir akzeptable Ergebnisse liefert (Bild in Frage).
allgemein

1
sehr schöne Ergebnisse! kluger Zug. Ich bin stolz auf dich: D Viel Glück!
Kasra Manshaei

1

Es ist bekannt, dass K-Means-Clustering lokale Minima ergibt, abhängig von Ihrer anfänglichen Initialisierung der Cluster-Zentren.

Die k-Mittelwert-Segmentierung kann jedoch meines Erachtens global gelöst werden, da wir bei der Suche nach der Lösung nichts zulassen.

Ich kann Ihren Kommentaren entnehmen, dass Sie es schließlich geschafft haben, eine Segmentierung zu erreichen. Könnten Sie bitte ein Feedback geben? Ist Ihre Lösung die beste Lösung? Oder haben Sie sich mit einer ausreichend guten Lösung zufrieden gegeben?


Die K-Mittel-Segmentierung kann auch lokale Minima ergeben, da Sie immer noch anfängliche Medoide \ Zentroide auswählen müssen. Meine aktuelle Lösung ist gut genug für mich, aber ich kann nicht behaupten, dass es die beste ist. Ich kann Details meiner Lösung teilen, wenn Sie daran interessiert sind.
allgemein

Es hängt davon ab, wie Sie es implementieren. In der Zwischenzeit habe ich in einigen Literaturstellen herausgefunden, dass es für die Segmentierung möglich ist, das globale Minimum in Polynomzeit zu finden.
Nolatar

0

Nur als Vorschlag: Sie könnten versuchen, den DBSCAN-Algorithmus zu verwenden, da dieser beim Clustering oft viel besser funktioniert als K-means

Wenn Sie ansonsten etwas Neues für das Clustering ausprobieren und einige interessante Dinge lernen möchten, empfehlen wir Ihnen, eine topologische Datenanalyse anhand persistenter Diagramme durchzuführen. I'mma lass dir hier ein schönes einfaches Intro :)

https://towardsdatascience.com/persistent-homology-with-examples-1974d4b9c3d0

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.