Suposição de Markov diz que desde que o estado atual seja conhecido os estados anteriores são irrelevantes para calcular o proximo estado.
A Cadeia de Markov é um processo estocástico onde dada uma sequencia de estados X1, X2, X3, ... de variáveis aleatórias, a probabilidade do estado Xn+1 pode ser calculada apenas baseada no estado Xn.
Ou seja para calcular um determinado estado Xn+1 na cadeia de markov basta que tenhamos o estado anterior (Xn) conhecido e conhecer as probabilidades de transição entre os estados dessa cadeia.
Para o codigo desse exemplo foi usada a biblioteca pomegranate
Para o exemplo Sol e Chuva temos que a probabilidade de um dia de sol ser sucedido por um dia chuva é de 10% e a probabilidade de um dia de chuva ser sucedido por um dia de sol é de 60%.
Com essas probabilidades é possivel definir o modelo de transição entre os estados:
Modelo de Transição
Sol | Chuva | |
---|---|---|
Sol | 0.9 | 0.1 |
Chuva | 0.6 | 0.4 |
Que no codigo é definido como:
modeloTransicao = ConditionalProbabilityTable([['sol', 'sol', 0.9],
['sol', 'chuva', 0.1],
['chuva', 'sol', 0.6],
['chuva', 'chuva', 0.4]], [estadoInicial])
Com essas possibilidades basta definir o Estado Inicial, que será o primeiro valor da cadeia. No codigo foi usado 50% de chance de ser sol e 50% de ser chuva.
estadoInicial = DiscreteDistribution({'sol': 0.5, 'chuva': 0.5})
Sol | Chuva |
---|---|
0.5 | 0.5 |
Com essas informações é possivel criar uma cadeia de markov.
model = MarkovChain([d1, d2])
Amostra
Para criar uma amostra basta usar o metodo sample()
e passar como parametro o tamanho da cadeia que deseja gerar.
model.sample(10)
Por exemplo com 10 amostras uma das possiveis cadeias geradas é:
Sol | Chuva | Chuva | Sol | Sol | Sol | Sol | Sol | Chuva | Sol |
---|