Comment former les HMM pour la classification?


12

Je comprends donc que lorsque vous formez des HMM à la classification, l'approche standard est la suivante:

  1. Séparez vos ensembles de données dans les ensembles de données pour chaque classe
  2. Former un HMM par classe
  3. Sur l'ensemble de test, comparez la probabilité de chaque modèle de classer chaque fenêtre

Mais comment puis-je former le HMM sur chaque classe? Dois-je simplement concaténer les données relatives à une classe ensemble? Mais les données de séries temporelles ne sont-elles pas censées être séquentielles - et si je le fais, je dis que certains points de données sont consécutifs alors qu'ils ne le sont pas?

Pour être plus concret, j'ai quelques données EEG qui sont une matrice 96xT où j'ai 96 vecteurs de caractéristiques qui sont les densités spectrales de puissance de différentes fréquences de différents canaux et T est la durée du signal (à une certaine fréquence d'échantillonnage)

Cela peut être divisé en fenêtres que je connais du protocole expérimental (les données sont étiquetées) et je peux donc rassembler des ensembles de matrices 96 * t pour chaque classe. Où t est inférieur à T et indique la taille de chaque fenêtre.

Comment puis-je former le HMM sur ces données? Si cela aide, j'essaie d'utiliser la boîte à outils pmtk3, mais je suis ouvert à l'utilisation de tout ce qui est vraiment - il suffit de pouvoir traiter des observations de valeur réelle car les densités spectrales de puissance sont continues et non discrètes (la boîte à outils MATLAB par défaut ne peut traiter que avec observations discrètes).

Le but est de pouvoir classer les fenêtres de données EEG à un état mental donné après avoir été formé sur les données étiquetées. Il s'agit d'un problème d'interface cerveau-ordinateur utilisant les données du concours BCI de Berlin .


1
Est -ce que cette page suit ce que vous avez besoin?
merours

Il semble que - je vais essayer de m'en assurer. Il permet certainement des modèles gaussiens et mixtes de gaussiens plutôt que de simples multinômes. Et il semble que vous pouvez former globalement un modèle à plusieurs observations . J'ai voulu apprendre Python correctement de toute façon car il a une utilisation beaucoup plus large. Merci :)
Alex McMurray

Réponses:


9

T

Vous avez mentionné sur reddit que vous hésitiez à attribuer un seul état à chaque classe. Avez-vous essayé cela? Cela peut ne pas fonctionner aussi mal que vous le pensez. Le problème d'estimation est également beaucoup plus facile dans ce cas. Estimer les probabilités de transition est simple, il suffit de compter essentiellement. De plus, vous pouvez simplement ajuster les probabilités d'émission pour chaque état en fonction des données observées et de la classe correspondante, en ignorant les aspects temporels.

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

Enfin, vous pouvez passer à un modèle discriminant comme un champ aléatoire conditionnel. Un modèle discriminant vous permettra d'incorporer facilement des caractéristiques plus complexes et de traiter plus directement le problème en question (estimation des densités conditionnelles). C'est probablement ce que j'essaierais en premier.


Les valeurs observées sont continues donc j'adapterais un gaussien ou un GMM. Comme discuté sur reddit, cela limite la capacité du modèle. J'utilise ce modèle pour voir comment l'aspect temporel affecte la précision de la classification par rapport aux modèles statiques. Je suis conscient que les modèles discriminants pourraient être meilleurs pour la classification et j'ai lu des extraits de la thèse de Murphy. Cela semble intéressant mais le HMM m'a été recommandé par mon professeur (c'est un projet à durée indéterminée) donc je vais essayer. Je veux travailler davantage avec les signaux EEG / MEG à l'avenir, alors je vais essayer les autres méthodes à un moment donné. :)
Alex McMurray

1
Au final, j'ai utilisé sklearn et son support pour de multiples observations. Cela semblait fonctionner correctement. Je devrais fouiller dans le code et voir comment il le gère réellement.
Alex McMurray

1
Alex, pourriez-vous fournir un lien ou un exemple vers ce que vous appelez «sklearn et son support pour de multiples observations»? Je m'occupe de ce problème (et du problème connexe de savoir comment "dire" à un HMM que plusieurs observations appartiennent à une seule étiquette de classe) depuis de nombreuses années maintenant et j'aimerais savoir comment vous les avez résolus.
Rubenulis
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.