slides do seminário I
Transcrição
slides do seminário I
Cadê o Markov? Andrei Andreyevich Markov, Célebre matemático Russo (1856 – 1922) Artigo que publicou acerca de um de seus primeiros temas de pesquisa: А. А. Марков. "Распространение закона больших чисел на величины, зависящие друг от друга". "Известия Физико-математического общества при Казанском университете", 2я серия, том 15, ст. 135–156, 1906. (hein?) MC ( Markov Chain) (1909) • • ~ 50 anos HMM (Hidden Markov Model) (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 segunda metade da década de 1960. MC 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 ... HMM 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 p(1,1) Com fome (estado 1) Transições: p (1,1) p = p (2,1) p (3,1) Iniciais: p (1, 2) p(2, 2) p (3, 2) p (1,3) p(2,3) p (3,3) p0(1) p0 = p0(2) p0(3) p(2,2) p(1,2) p(2,1) Com sono (estado 2) p(2,3) Brincalhão (estado 3) p(3,3) 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); clf; titlepage(evento(pos(1))); // Mostra o evento sorteado aleatoriamente • 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)); end, x=rand(1,1); pos=find((x-F)<0); s=evento(pos(1)); endfunction // Probabilidade acumulada (CDF) // Gera um número pseudo aleatório entre 0 e 1 (dist. Uniforme) 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 sum(s=='face 2')/1000 // Devemos encontrar aprox. 2/6 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 p(1,1) Com fome (estado 1) p(2,2) p(1,2) p(2,1) Com sono (estado 2) p(2,3) Brincalhão (estado 3) p(3,3) Completando o PET VIRTUAL – Um HMM gera o “comportamento” do bichinho a partir de estados que não podemos ver (estados escondidos) Prob. De observações, dados os estados: o(1,1) o(1, 2) o(1,3) o(1, 4) o = o(2,1) o(2, 2) o(2,3) o(2, 4) o(3,1) o(3, 2) o(3,3) o(3, 4) 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 end 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) → Tarefa: 'escrever' M A R K O V Y deslizando o mouse X M: A: R: K: O: V: X 233 63 130 246 259 155 Y 40 63 92 64 90 39 → Como estimar as probabilidades (e densidades) do HMM quando só temos acesso às observações? (estes slides serão disponibilizados para download em http://www.biochaves.com/ )