Como treino HMM's para classificação?

12

Portanto, entendo que, quando você treina HMMs para classificação, a abordagem padrão é:

  1. Separe seus conjuntos de dados nos conjuntos de dados para cada classe
  2. Treine um HMM por classe
  3. No conjunto de testes, compare a probabilidade de cada modelo para classificar cada janela

Mas como eu treino o HMM em cada classe? Apenas concatenar os dados pertencentes a uma classe juntos? Mas os dados das séries temporais não devem ser seqüenciais - e se eu fizer isso, estou dizendo que alguns pontos de dados são consecutivos quando não são?

Para ser mais concreto, tenho alguns dados de EEG, que são uma matriz de 96xT, onde tenho 96 vetores de características que são as densidades espectrais de potência de diferentes frequências de diferentes canais e T é a duração do sinal (em alguma taxa de amostragem)

Isso pode ser dividido em janelas que eu conheço do protocolo experimental (os dados são rotulados) e para que eu possa reunir conjuntos de matrizes de 96 * t para cada classe. Onde t é menor que T e indica o tamanho de cada janela.

Como eu treino o HMM nesses dados? Se ajudar, estou tentando usar o kit de ferramentas pmtk3, mas estou aberto a usar qualquer coisa realmente - ele só precisa lidar com observações de valor real, pois as densidades espectrais de potência são contínuas e não discretas (a caixa de ferramentas MATLAB padrão só pode lidar com observações discretas).

O objetivo é ser capaz de classificar as janelas de dados do EEG em um determinado estado mental, tendo treinado os dados rotulados. É um problema de interface cérebro-computador usando o dados Berlin BCI Competition .

Alex McMurray
fonte
1
Esta página combina com o que você precisa?
Fxm
Parece - eu vou tentar para ter certeza. Definitivamente, permite modelos gaussianos e de mistura de gaussianos, em vez de apenas multinomiais. E parece que você pode treinar globalmente um modelo em várias observações. Portanto, parece bom. Eu pretendo aprender o Python corretamente de qualquer maneira, pois ele tem um uso muito mais amplo. Obrigado :)
Alex McMurray

Respostas:

9

T série temporalAqui está o que eu tentaria.

Você mencionou em reddit que hesitava em atribuir um único estado para cada classe. Você já tentou isso? Pode não funcionar tão mal quanto você pensa. O problema de estimativa também é significativamente mais fácil neste caso. Estimar as probabilidades de transição é fácil, basta contar essencialmente. Além disso, você pode ajustar as probabilidades de emissão para cada estado com base nos dados observados e na classe correspondente, ignorando os aspectos temporais.

KNN×Kskik=1,,Ki=1,Ntkt é uma excelente referência. Ele também discute a conversão de HHMMs em HMMs.

Por fim, você pode mudar para um modelo discriminativo, como um campo aleatório condicional. Um modelo discriminativo permitirá incorporar facilmente recursos mais complexos e abordar mais diretamente o problema em questão (estimando densidades condicionais). Provavelmente é isso que eu tentaria primeiro.

alto
fonte
Os valores observados são contínuos, então eu ajustaria um gaussiano ou GMM. Como discutido no reddit, isso limita a capacidade do modelo. Estou usando esse modelo para ver como o aspecto temporal afeta a precisão da classificação em comparação com os modelos estáticos. Estou ciente de que os modelos discriminativos podem ser melhores para a classificação e leram alguns trechos da tese de Murphy. Isso parece interessante, mas o HMM me foi recomendado pelo meu professor (é um projeto em aberto), então vou tentar isso. Quero trabalhar mais com sinais de EEG / MEG no futuro, portanto, tentarei os outros métodos em algum momento. :)
Alex McMurray
1
No final, usei o sklearn e seu suporte para várias observações. Pareceu funcionar corretamente. Eu deveria cavar o código e ver como ele realmente lida com ele.
Alex McMurray
1
Alex, você poderia fornecer um link ou exemplo para o que você chama de "sklearn e seu suporte para várias observações"? Eu tenho lidado com esse problema (e o problema relacionado de como "dizer" a um HMM que várias observações pertencem a um único rótulo de classe) há muitos anos e gostaria de saber como você os abordou.
Rubenulis