05 隐马尔可夫模型 - 案例一 - hmmlearn框架说明

04 隐马尔可夫模型 - HMM的三个问题 - 预测问题 - Viterbi算法
安装hmmlearn库

hmmlearn框架说明

hmmlearn中主要有两种模型,分布为:GaussianHMM和MultinomialHMM;
如果观测值是连续的,那么建议使用GaussianHMM,否则使用MultinomialHMM;

参数:

初始的隐藏状态概率π参数为: startprob;
状态转移矩阵A参数为: transmat;
状态和观测值之间的转移矩阵B参数为: emissionprob_(MultinomialHMM模型中)或者在GaussianHMM模型中直接给定均值(means)和方差/协方差矩阵(covars)。

MultinomialHMM案例

import numpy as np
import hmmlearn.hmm as hmm

1、定义变量

status = ['盒子1', '盒子2', '盒子3']
obs = ['白球', '黑球']
n_status = len(status)
m_obs = len(obs)
start_probability = np.array([0.2, 0.5, 0.3])
transition_probability = np.array([
    [0.5, 0.4, 0.1],
    [0.2, 0.2, 0.6],
    [0.2, 0.5, 0.3]
])
emission_probalitity = np.array([
    [0.4, 0.6],
    [0.8, 0.2],
    [0.5, 0.5]
])

2、定义模型

model = hmm.MultinomialHMM(n_components=n_status)
model.startprob_ = start_probability
model.transmat_ = transition_probability
model.emissionprob_ = emission_probalitity

3、运行viterbi预测的问题

se = np.array([[0, 1, 0, 0, 1]]).T
logprob, box_index = model.decode(se, algorithm='viterbi')
print("颜色:", end="")
print(" ".join(map(lambda t: obs[t], [0, 1, 0, 0, 1])))
print("盒子:", end="")
print(" ".join(map(lambda t: status[t], box_index)))
print("概率值:", end="")
print(np.exp(logprob)) # 这个是因为在hmmlearn底层将概率进行了对数化,防止出现乘积为0的情况

颜色:白球 黑球 白球 白球
盒子:盒子2 盒子3 盒子2 盒子3
概率值:0.014400000000000001


1、使用MultinomialHMM进行参数的训练

import numpy as np
import hmmlearn.hmm as hmm

2、定义变量

states = ['盒子1', '盒子2', '盒子3']
obs = ['白球', '黑球']
n_states = len(states)
m_obs = len(obs)

model2 = hmm.MultinomialHMM(n_components=n_states, n_iter=20, tol=0.001)
X2 = np.array([
    [0, 1, 0, 0, 1],
    [0, 0, 0, 1, 1],
    [1, 1, 0, 1, 0],
    [0, 1, 0, 1, 1],
    [0, 0, 0, 1, 0]
])
model2.fit(X2)
print("输出根据数据训练出来的π")
print(model2.startprob_)
print("输出根据数据训练出来的A")
print(model2.transmat_)
print("输出根据数据训练出来的B")
print(model2.emissionprob_)

输出根据数据训练出来的π
[6.16633854e-14 9.99980390e-01 1.96102194e-05]
输出根据数据训练出来的A
[[0.23239647 0.31044659 0.45715694]
[0.74925217 0.10476964 0.14597819]
[0.33486432 0.37146448 0.2936712 ]]
输出根据数据训练出来的B
[[0.15719825 0.84280175]
[0.97174604 0.02825396]
[0.68070364 0.31929636]]

06 隐马尔可夫模型 - 案例二 - GMHMM应用

你可能感兴趣的:(05 隐马尔可夫模型 - 案例一 - hmmlearn框架说明)