Andrei Andreyevich Markov, Célebre matemático Russo
(1856 – 1922)
Cadê o
Markov?
Artigo que publicou acerca de um de seus primeiros temas de pesquisa:
А. А. Марков. "Распространение закона больших чисел на величины, зависящие друг от
друга". "Известия Физико-математического общества при Казанском университете",
2-я сери2-я, том 15, ст. 135–156, 1906.
(hein?)
MC ( Markov Chain) ~ 50 anos HMM (Hidden Markov Model)
(1909) (Final dos anos 50)
•
Os algoritmos de recursão utilizados no ajuste de um HMM, bem como cálculos de
probabilidades marginais foram descritos pela primeira vez por Ruslan L. Stratonovich,
no final dos anos 1950 (artigos publicados em em russo).
•
Os HMM foram posteriormente descritos por Leonard E. Baum e outros autores, na
MC HMM 1913 – Markov aplicou seu modelo a textos escritos em
Russo (de autoria do escritos Pushkin.
1917 - Erlang usou MC para obter fórmulas (modelos) para o tempo de espera de chamadas em redes
telefônicas. …
Física Química
Informática (o ranqueamento de páginas usado pela Google é definido como uma Cadeia de Markov) Economia
Ciências Sociais Biologia
Genética Jogos
Síntese e análise musical Síntese e analise de textos
...
1970 - reconhecimento de voz (1970)
1980 - análise de sequências biológicas (DNA) 1980 …
Análise criptográfica Síntese e análise de voz
Síntese e análise de escrita cursiva Tradução automática
Genética
Alinhamento de sequências
Análise de séries temporais (em financas, por exemplo) …
Nossa abordagem dos modelos de MARKOV: UM PET VIRTUAL
Primeiro um MC para os estados do bichinho
(1,1)
(1, 2)
(1,3)
(2,1)
(2, 2)
(2,3)
(3,1)
(3, 2)
(3,3)
p
p
p
p
p
p
p
p
p
p
=
Com fome
(estado 1)
Com sono
(estado 2)
Brincalhão
(estado 3)
p(1,1)
p(1,2)
p(2,1)
p(2,2)
p(3,3)
p(2,3)
0(1)
0
0(2)
0(3)
p
p
p
p
=
Transições: Iniciais:Mãos à massa!
Mas... por onde começar?
R: por uma boa calculadora científica → SCILAB (www.scilab.org) E depois?
R: Simular uma fonte aleatória de símbolos (usando um gerador pseudo-aleatório)
• Primeiro, simular um dado honesto
evento = ['face 1' 'face 2' 'face 3' 'face 4' 'face 5' 'face 6']; // Definição do conjunto de // eventos elementares
p=[1/6 1/6 1/6 1/6 1/6 1/6 ]; // Massa de probabilidade do dado honesto for i=1:length(p),
F(i)=sum(p(1:i)); // Probabilidade acumulada (CDF) end,
x=rand(1,1); // Gera um número pseudo aleatório entre 0 e 1 (dist. Uniforme) pos=find((x-F)<0);
• Depois, um dado viciado
p=[1/6 2/6 0.5/6 0.5/6 1/6 1/6 ]; // Massa de probabilidade do dado viciado // (em qual face você apostaria?)
E o resto do código? → Que tal “empacotar” isso numa função (computacional)? function [s]=gerador(evento,p)
for i=1:length(p),
F(i)=sum(p(1:i)); // Probabilidade acumulada (CDF) end,
x=rand(1,1); // Gera um número pseudo aleatório entre 0 e 1 (dist. Uniforme) pos=find((x-F)<0);
s=evento(pos(1)); endfunction
Entenda e guarde por perto esta rotina computacional, pois ela será usada muitas vezes nos MC e HMM que serão construídos.
• Checando as frequências relativas esperadas:
for i=1:1000,
[s(i)]=gerador(evento,p); end
Iniciando a montagem do PET VIRTUAL – Primeiro uma MC para gerar os estados
de “comportamento” do bichinho:
estado=['Com fome' 'Com sono' 'Brincalhão']; p = [0.30 0.50 0.20
0.01 0.89 0.10
0.50 0.20 0.30]; // Cada linha é uma Massa de Probabilidades (soma sempre igual a 1) p0 = [0; 0; 1];
estadoAtual=gerador(estado,p0'); clf; titlepage(estadoAtual);
indiceEstado=find(estado==estadoAtual); xpause(1.5*10^6); // Pausa de 1.5 segundos for i=1:20,
indiceEstado=find(estado==estadoAtual); massaProb=p(indiceEstado,:);
estadoAtual=gerador(estado,massaProb); clf; titlepage(estadoAtual);
xpause(1.5*10^6); // Pausa de 1.5 segundos end
Com fome
(estado 1)
Com sono
(estado 2)
Brincalhão
(estado 3)
p(1,1)
p(1,2)
p(2,1)
p(2,2)
p(3,3)
p(2,3)
Completando o PET VIRTUAL – Um HMM gera o “comportamento” do bichinho a
partir de estados que não podemos ver (estados escondidos)
(1,1)
(1, 2)
(1,3)
(1, 4)
(2,1)
(2, 2)
(2,3)
(2, 4)
(3,1)
(3, 2)
(3,3)
(3, 4)
o
o
o
o
o
o
o
o
o
o
o
o
o
=
Prob. De observações, dados os estados:obs=['Alegre' 'Triste' 'Com raiva' 'Doente']; o = [0.5 0.4 0.1 0.0
0.7 0.0 0.1 0.2
0.0 0.0 0.1 0.9]; // Cada linha é uma Massa de Probabilidades (soma sempre igual a 1) // Início:
estadoAtual=gerador(estado,p0');
// Emissão de observação a partir do estado (escondido): indiceEstado=find(estado==estadoAtual);
massaProb=o(indiceEstado,:);
emissao=gerador(obs,massaProb); clf; titlepage(emissao);
xpause(10^6); // Pausa de 1 segundo for i=1:20
// Transição (ou não) de estado:
indiceEstado=find(estado==estadoAtual); massaProb=p(indiceEstado,:);
estadoAtual=gerador(estado,massaProb);
// Emissão de observação a partir do estado (escondido): massaProb=o(indiceEstado,:);
emissao=gerador(obs,massaProb); clf; titlepage(emissao);
// xtitle(estadoAtual); // Descomente esta linha para ver também o estado oculto do processo. xpause(1.5*10^6); // Pausa de 1.5 segundo
A SEGUIR (próximos seminários BioChaves):
→ HMM com observações discretas (densidades de probabilidades no lugar de massas de prob.) Além dos PETS VIRTUAIS, usaremos como ilustração o
processo de decodificação de intenção de escrita em teclados virtuais (sem 'apertar' pelo deslizar de dedos) →
M A R K O V M A R K O V Tarefa: 'escrever' deslizando o mouse X Y M: 233 40 A: 63 63 R: 130 92 K: 246 64 O: 259 90 V: 155 39 X Y
→ Como estimar as probabilidades (e densidades) do HMM quando só temos acesso às observações?