HMM模型

隐马尔可夫模型(HHM)是统计模型,用来描述一个含有隐含未知参数的马尔可夫过程
其难点是从可观察的参数中确定该过程的隐含参数,然后利用这些参数来作进一步分析,例如模式识别
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

马尔可夫链

状态空间中从一个状态到另一个状态转换的随机过程
在这里插入图片描述
在这里插入图片描述

HMM模型基础

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

前向算法评估观察序列概率

在这里插入图片描述

后向算法评估观察序列概率

在这里插入图片描述
在这里插入图片描述

维特比算法解码隐藏状态序列

在这里插入图片描述
在这里插入图片描述

鲍姆-韦尔奇算法

在这里插入图片描述
在这里插入图片描述

HMM模型API介绍

import numpy as np
from hmmlearn import hmm
# 设定隐藏状态的集合
states = ["box 1", "box 2", "box3"]
n_states = len(states)

# 设定观察状态的集合
observations = ["red", "white"]
n_observations = len(observations)

# 设定初始状态分布
start_probability = np.array([0.2, 0.4, 0.4])

# 设定状态转移概率分布矩阵
transition_probability = np.array([
  [0.5, 0.2, 0.3],
  [0.3, 0.5, 0.2],
  [0.2, 0.3, 0.5]
])

# 设定观测状态概率矩阵
emission_probability = np.array([
  [0.5, 0.5],
  [0.4, 0.6],
  [0.7, 0.3]
])
# 设定模型参数
model = hmm.MultinomialHMM(n_components=n_states)
# 设定初始状态分布
model.startprob_ = start_probability
# 设定状态转移概率矩阵
model.transmat_ = transition_probability
# 设定观测状态概率矩阵
model.emissionprob_ = emission_probability
# 设定观测序列
seen = np.array([[0, 1, 0]]).T
print("球的观测顺序为:\n", ",".join(map(lambda x: observations[x], seen.flatten())))

球的观测顺序为:
red,white,red

# 维特比 - 模型训练
box = model.predict(seen)
print("盒子最可能的隐藏状态顺序为:\n", ",".join(map(lambda x: states[x], box)))

盒子最可能的隐藏状态顺序为:
box3,box3,box3

# 观测序列的概率的问题
model.score(seen)

-2.038545309915233

import math

math.exp(-2.038545309915233)

0.13021800000000003

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐