Verstecktes Markov-Modell zur Ereignisvorhersage

9

Frage : Ist der Aufbau unten eine sinnvolle Implementierung eines Hidden Markov-Modells?

Ich habe einen Datensatz von 108,000Beobachtungen (über einen Zeitraum von 100 Tagen) und ungefähr 2000Ereignisse während der gesamten Beobachtungszeitspanne. Die Daten sehen wie in der folgenden Abbildung aus, in der die beobachtete Variable 3 diskrete Werte annehmen kann und die roten Spalten Ereigniszeiten hervorheben, dh :[1,2,3]tE

Geben Sie hier die Bildbeschreibung ein

Wie in der Abbildung mit roten Rechtecken gezeigt, habe ich für jedes Ereignis { bis } zerlegt und diese effektiv als "Fenster vor dem Ereignis" behandelt.tEtE5

HMM - Training: Ich plane , zu trainieren , ein Hidden - Markov - Modell (HMM) bezogen auf alle „Pre-Event - Fenster“, mit der Methodik Sequenzen mehrere Beobachtung als auf Pg vorgeschlagen. 273 von Rabiners Papier . Hoffentlich kann ich so ein HMM trainieren, das die Sequenzmuster erfasst, die zu einem Ereignis führen.

HMM-Vorhersage: Dann plane ich, dieses HMM zu verwenden, um das an einem neuen Tag vorherzusagen , an dem ein Schiebefenstervektor sind, der in Echtzeit aktualisiert wird, um die Beobachtungen zwischen der aktuellen Zeit und zu enthalten Laufe des Tages.log[P(Observations|HMM)]Observationstt5

Ich erwarte einen Anstieg von für , die den "Pre-Event-Fenstern" ähneln. Dies sollte es mir tatsächlich ermöglichen, die Ereignisse vorherzusagen, bevor sie eintreten.log[P(Observations|HMM)]Observations

Zhubarb
quelle
Sie können Ihre Daten aufteilen, um ein Modell zu erstellen (z. B. 0,7), und dann Ihr Modell anhand der verbleibenden Daten testen. Nur ein Gedanke, ich bin kein Spezialist auf diesem Gebiet.
Fernando
Ja Dankeschön. Es ist eher die Eignung von HMMs für die Aufgabe, bei der ich mir nicht sicher bin.
Zhubarb
@Zhubarb Ich habe es mit einem ähnlichen Problem zu tun und möchte Ihrem HMM-Ansatz folgen. Wo machst du das erfolgreich? Oder sind Sie endlich zu logistischer Regression / SVM usw. zurückgekehrt?
Javierfdr
@Javierfdr, ich habe es letztendlich aufgrund von Schwierigkeiten bei der Implementierung und den Bedenken, die Alt in seiner Antwort hervorhebt, nicht implementiert. Im Wesentlichen müssen HMMs ein umfangreiches generatives Modell erstellen, während mein Bauchgefühl jetzt für das vorliegende Problem gilt. Man kann mit einem diskriminierenden Modell (SVM, Neuronales Netz usw.) leichter davonkommen, wie Sie vorschlagen .
Zhubarb

Antworten:

3

Ein Problem bei dem von Ihnen beschriebenen Ansatz besteht darin, dass Sie definieren müssen, welche Art von Erhöhung von sinnvoll ist. Dies kann schwierig sein, da P ( O ) im Allgemeinen immer sehr gering ist. Es kann besser sein, zwei HMMs zu trainieren, beispielsweise HMM1 für Beobachtungssequenzen, bei denen das Ereignis von Interesse auftritt, und HMM2 für Beobachtungssequenzen, bei denen das Ereignis nicht auftritt. Daraufhin wird eine Beobachtungssequenz O Sie haben P ( H H M 1 | O )P(O)P(O)O und ebenfalls für HMM2. Dann können Sie vorhersagen, dass das Ereignis eintreten wird, wenn P ( H M M 1 | O )

P(HHM1|O)=P(O|HMM1)P(HMM1)P(O)P(O|HMM1)P(HMM1)
P(HMM1|O)>P(HMM2|O)P(HMM1)P(O|HMM1)P(O)>P(HMM2)P(O|HMM2)P(O)P(HMM1)P(O|HMM1)>P(HMM2)P(O|HMM2).

Haftungsausschluss : Was folgt, basiert auf meiner persönlichen Erfahrung. Nehmen Sie es also als das, was es ist. Eines der schönen Dinge an HMMs ist, dass Sie mit Sequenzen variabler Länge und Effekten variabler Reihenfolge umgehen können (dank der versteckten Zustände). Manchmal ist dies notwendig (wie in vielen NLP-Anwendungen). Es scheint jedoch, als hätten Sie a priori angenommen, dass nur die letzten 5 Beobachtungen für die Vorhersage des interessierenden Ereignisses relevant sind. Wenn diese Annahme realistisch ist, haben Sie möglicherweise erheblich mehr Glück, wenn Sie traditionelle Techniken (logistische Regression, naive Bayes, SVM usw.) verwenden und einfach die letzten 5 Beobachtungen als Merkmale / unabhängige Variablen verwenden. In der Regel sind diese Modelltypen einfacher zu trainieren und führen (meiner Erfahrung nach) zu besseren Ergebnissen.

Alt
quelle
p=log(P(O|hmm))p1=2504,p2=2403,p3=2450p: Ich habe willkürlich 5 Zoll als Fenstergröße gewählt, es ist wahrscheinlich länger als in einer tatsächlichen Implementierung.
Zhubarb
1
P(HMM1)
@Berkan Was die Fenstergröße betrifft, so erwarte ich aufgrund meiner persönlichen Erfahrung, dass das, was ich in dieser Angelegenheit gesagt habe, für jede feste Fenstergröße gilt. Offensichtlich müssen alle Dinge, die ich gesagt habe, empirisch auf Ihr spezielles Problem getestet werden.
Alt
log(P(HMM1))+log(P(O|HMM1))>?log(P(HMM2))+log(P(O|HMM2))log(P(HMM1))log(P(HMM1))
log(P(HMM1))+log(P(O|HMM1))>?log(P(HMM2))+log(P(O|HMM2))log(P(HMM1))HMM1=(52,000)/108,000