Wie trainiere ich HMMs für die Klassifizierung?

12

Daher verstehe ich, dass der Standardansatz beim Trainieren von HMMs für die Klassifizierung wie folgt lautet:

  1. Teilen Sie Ihre Datensätze in die Datensätze für jede Klasse auf
  2. Trainiere ein HMM pro Klasse
  3. Vergleichen Sie im Testset die Wahrscheinlichkeit, mit der jedes Modell die einzelnen Fenster klassifiziert

Aber wie trainiere ich das HMM in jeder Klasse? Verknüpfe ich nur die Daten einer Klasse miteinander? Aber sollen die Zeitreihendaten nicht sequentiell sein - und wenn ich das tue, sage ich, dass einige Datenpunkte aufeinanderfolgend sind, wenn dies nicht der Fall ist?

Genauer gesagt habe ich einige EEG-Daten, die eine 96xT-Matrix sind, wobei ich 96 Merkmalsvektoren habe, die die Leistungsspektraldichten verschiedener Frequenzen von verschiedenen Kanälen sind und T die Zeitdauer des Signals ist (bei einer bestimmten Abtastrate).

Dies kann in Fenster unterteilt werden, die ich aus dem Versuchsprotokoll kenne (die Daten sind beschriftet), und so kann ich Sätze von 96 * t-Matrizen für jede Klasse zusammenstellen. Wobei t kleiner als T ist und die Größe jedes Fensters bezeichnet.

Wie trainiere ich dann das HMM mit diesen Daten? Wenn es hilft, versuche ich, das pmtk3-Toolkit zu verwenden, aber ich bin offen dafür, wirklich alles zu verwenden - es muss nur in der Lage sein, mit real bewerteten Beobachtungen umzugehen, da die spektralen Leistungsdichten kontinuierlich und nicht diskret sind (die standardmäßige MATLAB-Toolbox kann nur damit umgehen mit diskreten Beobachtungen).

Ziel ist es, EEG-Datenfenster in einen bestimmten mentalen Zustand einordnen zu können, der auf die gekennzeichneten Daten trainiert hat. Es handelt sich um ein Problem mit der Schnittstelle zwischen Gehirn und Computer, bei dem die Daten des Berliner BCI-Wettbewerbs verwendet werden .

Alex McMurray
quelle
1
Entspricht diese Seite Ihren Vorstellungen?
Am
Es scheint - ich werde es versuchen, um sicher zu gehen. Es erlaubt definitiv Gauß'sche und Gauß'sche Modelle und nicht nur Multinomiale. Und es scheint, dass Sie ein Modell global auf mehrere Beobachtungen trainieren können. So sieht es gut aus. Ich wollte Python sowieso richtig lernen, da es eine viel breitere Verwendung hat. Danke :)
Alex McMurray

Antworten:

9

T

Sie haben bei reddit erwähnt, dass Sie zögerten, jeder Klasse einen einzelnen Status zuzuweisen. Hast du das versucht? Es funktioniert möglicherweise nicht so schlecht, wie Sie denken. Auch in diesem Fall ist das Schätzproblem wesentlich einfacher. Das Abschätzen der Übergangswahrscheinlichkeiten ist einfach, Sie zählen nur im Wesentlichen. Darüber hinaus können Sie die Emissionswahrscheinlichkeiten für jeden Zustand anhand der beobachteten Daten und der entsprechenden Klasse anpassen, wobei die zeitlichen Aspekte ignoriert werden.

KNN×Kskik=1,,Ki=1,Ntkt

Zuletzt können Sie zu einem Unterscheidungsmodell wie einem bedingten Zufallsfeld wechseln. Mithilfe eines Unterscheidungsmodells können Sie auf einfache Weise komplexere Features integrieren und das vorliegende Problem direkter angehen (Schätzung der bedingten Dichten). Dies ist wahrscheinlich, was ich zuerst versuchen würde.

Alt
quelle
Die beobachteten Werte sind stetig, daher würde ich einen Gaußschen oder GMM anpassen. Wie bei reddit diskutiert, schränkt dies die Fähigkeit des Modells ein. Ich benutze dieses Modell, um zu sehen, wie der zeitliche Aspekt die Klassifikationsgenauigkeit im Vergleich zu statischen Modellen beeinflusst. Mir ist bewusst, dass diskriminierende Modelle für die Klassifizierung besser geeignet sind und Teile von Murphys These gelesen haben. Das scheint interessant zu sein, aber das HMM wurde mir von meinem Professor empfohlen (es ist ein unbefristetes Projekt), deshalb werde ich das versuchen. Ich möchte aber in Zukunft mehr mit EEG / MEG-Signalen arbeiten, also werde ich irgendwann die anderen Methoden ausprobieren. :)
Alex McMurray
1
Am Ende habe ich sklearn und seine Unterstützung für mehrere Beobachtungen verwendet. Es schien richtig zu funktionieren. Ich sollte mich mit dem Code befassen und sehen, wie er tatsächlich damit umgeht.
Alex McMurray
1
Alex, könnten Sie einen Link oder ein Beispiel zu dem, was Sie als "sklearn und seine Unterstützung für mehrere Beobachtungen" bezeichnen, bereitstellen? Ich beschäftige mich seit vielen Jahren mit diesem Problem (und dem damit verbundenen Problem, wie man einem HMM sagt, dass mehrere Beobachtungen zu einer einzelnen Klassenbezeichnung gehören) und würde gerne wissen, wie Sie sie angesprochen haben.
Rubenulis