Así que entiendo que cuando entrenas HMM para la clasificación, el enfoque estándar es:
- Separe sus conjuntos de datos en los conjuntos de datos para cada clase
- Entrena un HMM por clase
- 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 .
fuente
Respuestas:
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 tK norte norte× K sk i k=1,…,K i=1,…N t k 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.
fuente