Portanto, entendo que, quando você treina HMMs para classificação, a abordagem padrão é:
- Separe seus conjuntos de dados nos conjuntos de dados para cada classe
- Treine um HMM por classe
- 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 .
fonte
Respostas:
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.
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.
fonte