300x250 AD TOP

Blogger news

AD (728x90)

Tecnologia do Blogger.

Colaboradores

Seguidores

Postagens populares

Tagged under: ,

Modelos ocultos de Markov






Um Modelo oculto de Markov (HMM) é um modelo em que você observa uma sequência de emissões, mas não sabe a sequência de estados que o modelo passou para gerar esses emissões. A analise de um modelo de Markov busca recuperar a sequência de estados de um dado observado.

Por exemplo, considerando um modelo de Markov que 2 estados e 6 possibilidades de emissões. O modelo usa:

  • Um dado vermelho com 6 lados, rotulados de 1 a 6.
  • Um dado verde, com 20 lados, 5 deles estão rotulados de 2 a 6, enquanto os 7 lados remanescestes então rotulados com 1
  • O peso ponderado do vermelho possui a probabilidade de cabeça 9 e a probabilidade da calda 1.
  • O peso ponderado do verde possui a probabilidade de cabeça .95 e a probabilidade de cauda .05

O diagrama de estados para este modelo possui dois estados e é apresentado a imagem a seguir;


Porém esse modelo não é oculto porque você sabe a sequência de estados dos dados. Suponha, entrentando, que outro alguém gerou as emissões sem mostrar a você os dados. Tudo que você vê é a sequência de emissões. Se você começa vendo mais uns dos que outros números, você pode suspeitar que o modelo está em um determinado estado, mas você não pode afirmar com segurança, porque você não pode ver a cor que o dado começou a ser rolado.

Analise do modelo de markov

Hmmgenerate - gerar uma sequência de estados e emissões de um Modelo de Markov.
Hmmestimate - calcula a estimativa de máxima verossimilhança de transição e a probabilidade de emissão a partir de sequência de emissão e uma conhecida sequencia de estados.
hmmtrain - calcula a estimativa máxima verossimilhança de transição e probabilidade de emissão a partir de um sequência de emissões.
hmmviterbi - calcula o caminho de maior probabilidade de um Modelo Oculto de Markov
hmmdecode - calcula a probabilidade de um estado posterior de a sequência de emissões.


Gerando um sequência de Teste

O seguinte comando cria matrizes de transição e emissão for o modelo descrito na introdução.

TRANS = [.9 .1; .05 .95;];
EMIS = [1/6, 1/6, 1/6, 1/6, 1/6, 1/6; 7/12, 1/12, 1/12, 1/12, 1/12, 1/12];

Para gerar a sequência randômica de estados e emissões partir de modelo use:

[seq,states] = hmmgenerate(1000,TRANS,EMIS);

A saída seq é a sequência de emissões e a saída states é o sequência de estados.
hmmgenerate inicia no estado 1 no passo 0, fazendo a transição do estado i1 no passo 1, e retornando i1 como a primeira entrada no estado. Para mudar o estado inicial, veja Mudando a Distribuição do Estado Inicial.

Estimando a sequência de estados

Dado a as matrizes de transição e emissão TRANS e EMIS, a função hmmviterbi usa o algorítimo de Viterbi para computar a sequência mais provável de estados do modelo iria passar para gerar uma dada sequência seq de emissões:

likelystates = hmmviterbi(seq, TRANS, EMIS);

likelystates é um sequência com o mesmo tamanho de seq

Para testar a precisão de hmmviterbi, computar a porcentagem do estado de sequência atual que concorda com a sequência likelystates

sum(states==likelystates)/1000
ans = 0.8200

Nese caso, a sequência mais provável de estados concorda que com a sequência aleatória em 82% das vezes.

Estimando matrizes de transições e emissão

As funções hmmestimate e hmmtrain estima as matrizes de transição e emissão TRANS e EMIS dada um sequência seq de emissões.

A função hmmestimate requer que você conheça a sequência de estados que o modelo atravessou para gerar a seq.

a entrada é a emissão e sequência de estados e o retorno são as matrizes de transição e emissão.

[TRANS_EST, EMIS_EST] = hmmestimate(seq, states)

TRANS_EST =
0.8989 0.1011
0.0585 0.9415

EMIS_EST =
0.1721 0.1721 0.1749 0.1612 0.1803 0.1393
0.5836 0.0741 0.0804 0.0789 0.0726 0.1104

Você pode compara as saídas como as originais TRANS e EMIS

TRANS
TRANS =
0.9000 0.1000
0.0500 0.9500

EMIS
EMIS =
0.1667 0.1667 0.1667 0.1667 0.1667 0.1667
0.5833 0.0833 0.0833 0.0833 0.0833 0.0833

Se você não conhece a sequência de estados, mas você tem uma suposição inicial para TRANS e EMIS, você pode ainda estimar o TRANS e EMIS usando hmmtrain

TRANS_GUESS = [.85 .15; .1 .9];
EMIS_GUESS = [.17 .16 .17 .16 .17 .17;.6 .08 .08 .08 .08 08];

Você estima TRANS e EMIS da seguinte forma:

[TRANS_EST2, EMIS_EST2] = hmmtrain(seq, TRANS_GUESS, EMIS_GUESS)

TRANS_EST2 =
0.2286 0.7714
0.0032 0.9968

EMIS_EST2 =
0.1436 0.2348 0.1837 0.1963 0.2350 0.0066
0.4355 0.1089 0.1144 0.1082 0.1109 0.1220

hmmtrain usa um algorítimo interativo que altera as matrizes TRAN_GUESS e EMIS_GUESS que então para cada passo a matriz de ajuste é mais provável para gerar a sequência observada, seq. O algoritmo para quando as matrizes em duas interações estiver com a pequena tolerância uma da outra.

Se o algoritmo falhar para alcançar essa tolerância dentro de um numero máximo de interações, cujo valor padrão é 100, no algoritmo de parada. Neste caso, hmmtrains retorna os últimos valores de TRANS_EST e EMIS_EST,o problema é o caso em que a tolerância não foi alcançada.

Se o algoritmo falha para alcançar a tolerância desejada, aumente o valor padrão do numero máximo de interações com o comando:

hmmtrain(seq,TRANS_GUESS,EMIS_GUESS,'maxiterations',maxiter)

onde maxitter é o numero máximo de passos que o algorítimo executa.

Muda o valor padrão da tolerância como comando:

hmmtrain(seq, TRANS_GUESS, EMIS_GUESS, 'tolerance', tol)

onde tol e o valor desejado de tolerância. Aumentando o valor do tol faz o algoritmo parar mais cedo, mas os resultato são menos precisos.

[seq,states] = hmmgenerate(100,trans,emis, 'Symbols',{'one','two','three','four','five','six'})

Considerações: 

Esta postagem foi feita com base na documentação do MathLab, (Com algumas alterações, por isso não é totalmente uma tradução)
http://www.mathworks.com/help/stats/hidden-markov-models-hmm.html





0 comentários:

Postar um comentário