¿Cómo entreno HMM para la clasificación?


12

Así que entiendo que cuando entrenas HMM para la clasificación, el enfoque estándar es:

  1. Separe sus conjuntos de datos en los conjuntos de datos para cada clase
  2. Entrena un HMM por clase
  3. En el conjunto de prueba, compare la probabilidad de cada modelo para clasificar cada ventana

Pero, ¿cómo entreno al HMM en cada clase? ¿Acabo de concatenar los datos pertenecientes a una clase juntos? Pero, ¿no se supone que los datos de la serie temporal son secuenciales, y si lo hago, estoy diciendo que algunos puntos de datos son consecutivos cuando no lo son?

Para ser más concreto, tengo algunos datos de EEG, que es una matriz de 96xT, donde tengo 96 vectores de características que son las densidades espectrales de potencia de diferentes frecuencias de diferentes canales y T es el período de tiempo de la señal (a alguna frecuencia de muestreo)

Esto se puede dividir en ventanas que conozco del protocolo experimental (los datos están etiquetados) y así puedo reunir conjuntos de matrices de 96 * t para cada clase. Donde t es menor que T y denota el tamaño de cada ventana.

¿Cómo entreno al HMM sobre estos datos? Si ayuda, estoy tratando de usar el kit de herramientas pmtk3, pero me abro a usar cualquier cosa realmente: solo tiene que ser capaz de manejar observaciones de valor real, ya que las densidades espectrales de potencia son continuas, no discretas (la caja de herramientas MATLAB predeterminada solo puede manejar con observaciones discretas).

El objetivo es poder clasificar las ventanas de datos de EEG a un estado mental dado que se haya entrenado sobre los datos etiquetados. Es un problema de interfaz cerebro-computadora que utiliza los datos de la competencia BCI de Berlín .


1
¿ Esta página se adapta a lo que necesitas?
fxm

Parece que lo intentaré para asegurarme. Definitivamente permite modelos gaussianos y mezcla de gaussianos en lugar de solo multinomios. Y parece que se puede entrenar globalmente un modelo en múltiples observaciones. Así se ve bien He tenido la intención de aprender Python correctamente de todos modos, ya que tiene un uso mucho más amplio. Gracias :)
Alex McMurray

Respuestas:


9

El enfoque que describe para usar HMM para la clasificación en realidad solo se aplica a configuraciones en las que tiene secuencias independientes que desea clasificar. Por ejemplo, si clasificara el sentimiento de las oraciones como positivo o negativo, podría construir un HMM para cada uno como usted ha descrito. Vea la respuesta relacionada que di aquí . Observe cómo esto se basa en la suposición de que puedo dividir las secuencias en fragmentos significativos para clasificar antes de comparar las posteriores. Este no parece ser el caso para su problema, ya que efectivamente tiene una serie de tiempo gran longitud . Esto es lo que intentaría.T

Usted mencionó en reddit que dudaba en asignar un solo estado para cada clase. ¿Has probado esto? Puede que no funcione tan mal como piensas. El problema de estimación también es significativamente más fácil en este caso. Calcular las probabilidades de transición es fácil, solo cuenta esencialmente. Además, puede ajustar las probabilidades de emisión para cada estado en función de los datos observados y la clase correspondiente, ignorando los aspectos temporales.

Si está convencido de que esta es una mala idea, o encuentra que funciona mal pero aún quiere seguir con los modelos generativos, podría usar algo como un HMM jerárquico. Por ejemplo, podría permitir que los estados en el nivel superior representen las clases y luego permitir que los HMM de nivel inferior modelen la variación temporal dentro de las clases. También podría usar un gran HMM para lograr algo similar. Si tiene clases, asignar estados para cada clase (por lo que afirma en total) de forma , , . Durante el entrenamiento, necesitaría forzar al HMM a asignar solo probabilidad positiva a la transición a un estado en el momento dondeN N × K s k i k = 1 , ... , K i = 1 , ... N t k tKNN×Kskik=1,,Ki=1,Ntk coincide con la etiqueta en el momento . Podría haber redactado esto un poco incómodo, así que espero que quede claro a qué me refiero. Obviamente, puede generalizar esto para tener diferentes números de estados por clase. Probablemente hay otros tipos de redes dinámicas bayesianas que también podría usar. La tesis de Kevin Murphy es una excelente referencia. También analiza la conversión de HHMM a HMM.t

Por último, puede cambiar a un modelo discriminativo como un campo aleatorio condicional. Un modelo discriminatorio le permitirá incorporar fácilmente características más complejas y abordará más directamente el problema en cuestión (estimando densidades condicionales). Esto es probablemente lo que probaría primero.


Los valores observados son continuos, por lo que encajaría en un gaussiano o GMM. Como se discutió en reddit, esto limita la capacidad del modelo. Estoy usando este modelo para ver cómo el aspecto temporal afecta la precisión de la clasificación en comparación con los modelos estáticos. Soy consciente de que los modelos discriminativos podrían ser mejores para la clasificación y he leído fragmentos de la tesis de Murphy. Esto parece interesante, pero mi profesor me recomendó el HMM (es un proyecto abierto), así que lo intentaré. Sin embargo, quiero trabajar más con señales EEG / MEG en el futuro, así que intentaré los otros métodos en algún momento. :)
Alex McMurray

1
Al final usé sklearn y su soporte para múltiples observaciones. Parecía funcionar correctamente. Debería profundizar en el código y ver cómo se trata realmente con él.
Alex McMurray

1
Alex, ¿podrías proporcionar un enlace o ejemplo a lo que llamas "sklearn y su soporte para múltiples observaciones"? He estado lidiando con este problema (y el problema relacionado de cómo "decirle" a un HMM que las observaciones múltiples pertenecen a una sola etiqueta de clase) desde hace muchos años y me encantaría saber cómo las abordó.
Rubenulis
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.