Modèle de Markov caché pour la prédiction d'événements

9

Question : La configuration ci-dessous est-elle une implémentation sensée d'un modèle de Markov caché?

J'ai un ensemble de données d' 108,000observations (prises sur une période de 100 jours) et approximativement des 2000événements tout au long de la période d'observation. Les données ressemblent à la figure ci-dessous où la variable observée peut prendre 3 valeurs discrètes et les colonnes rouges mettent en évidence les temps d'événements, c'est-à-dire les :t E[1,2,3]tE

entrez la description de l'image ici

Comme indiqué avec des rectangles rouges sur la figure, j'ai disséqué { à } pour chaque événement, les traitant effectivement comme des "fenêtres de pré-événement".t E - 5tEtE5

Formation HMM: Je prévois de former un modèle de Markov caché (HMM) basé sur toutes les "fenêtres pré-événement", en utilisant la méthodologie des séquences d'observation multiples comme suggéré sur Pg. 273 du papier de Rabiner . J'espère que cela me permettra de former un HMM qui capture les modèles de séquence qui conduisent à un événement.

Prédiction HMM: Je prévois ensuite d'utiliser ce HMM pour prédire le un nouveau jour, où les seront un vecteur de fenêtre glissante, mis à jour en temps réel pour contenir les observations entre l'heure actuelle et au de la journée.O b s e r v a t i o n s t t - 5log[P(Observunetjeons|HMM)]Observunetjeonstt-5

Je m'attends à voir le augmenter pour les qui ressemblent aux "fenêtres de pré-événement". Cela devrait en effet me permettre de prédire les événements avant qu'ils ne se produisent.O b s e r v a t i o n slog[P(Observunetjeons|HMM)]Observunetjeons

Zhubarb
la source
Vous pouvez diviser vos données pour créer un modèle (disons 0,7), puis tester votre modèle sur les données restantes. Juste une pensée, je ne suis pas un spécialiste dans ce domaine.
Fernando
Oui merci. C'est plutôt l'adéquation des HMM à la tâche dont je ne suis pas certain.
Zhubarb du
@Zhubarb Je suis confronté à un problème similaire et je voudrais suivre votre approche HMM. Où avez-vous réussi à faire cela? Ou êtes-vous finalement revenu à la régression logistique / SVM, etc.?
Javierfdr
@Javierfdr, j'ai fini par ne pas le mettre en œuvre en raison de difficultés de mise en œuvre et des préoccupations qu'alto met en évidence dans sa réponse. Essentiellement, les HMM viennent avec le fardeau d'avoir à construire un modèle génératif étendu, alors que mon instinct est maintenant pour le problème actuel, on peut plus facilement s'en tirer avec un modèle discriminatoire (SVM, Neural Net, etc.) comme vous le suggérez .
Zhubarb

Réponses:

3

P(O)P(O)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).

Avertissement : ce qui suit est basé sur ma propre expérience personnelle, alors prenez-la pour ce qu'elle est. L'un des avantages des HMM est qu'ils vous permettent de gérer des séquences de longueur variable et des effets d'ordre variable (grâce aux états cachés). Parfois, cela est nécessaire (comme dans de nombreuses applications PNL). Cependant, il semble que vous ayez a priori supposé que seules les 5 dernières observations sont pertinentes pour prédire l'événement d'intérêt. Si cette hypothèse est réaliste, vous pouvez avoir beaucoup plus de chance en utilisant des techniques traditionnelles (régression logistique, bayes naïves, SVM, etc.) et en utilisant simplement les 5 dernières observations comme caractéristiques / variables indépendantes. En règle générale, ces types de modèles seront plus faciles à former et (selon mon expérience) produiront de meilleurs résultats.

alto
la source
p=log(P(O|hmm))p1=-2504,p2=-2403,p3=-2450p: J'ai choisi arbitrairement 5 pouces comme taille de fenêtre, elle sera probablement plus longue que celle d'une implémentation réelle.
Zhubarb
1
P(HMM1)
@Berkan En ce qui concerne la taille de la fenêtre, sur la base de ma propre expérience personnelle, je m'attends à ce que ce que j'ai dit à ce sujet soit valable pour toute taille de fenêtre fixe . Évidemment, toutes les choses que j'ai dites devront être testées empiriquement pour votre problème particulier.
alto
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