300x250 AD TOP

Blogger news

AD (728x90)

Tecnologia do Blogger.

Colaboradores

Seguidores

Postagens populares

Mostrando postagens com marcador AMMD. Markov. Mostrar todas as postagens
Mostrando postagens com marcador AMMD. Markov. Mostrar todas as postagens
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