HMM是什么
双序列事件: 序列1相互独立 序列2存在前后依赖关系 序列1的每个事件的发生由序列2对应的事件决定 HMM是双重随机过程形成的两个序列:一个叫观测序列,一个叫隐藏序列,满足以下三个条件: 观测序列的事件相互独立, 隐藏序列的事件(这里叫状态)仅前后存在依赖关系 观测序列事件发生的概率由隐藏序列对应的状态决定,观测序列与隐藏序列事件一一对应 观测:已有统计数据,观察到的统计数据,容易得到或已知数据 隐藏:有了部分数据,不那么容易直接拿到,需要拿到,需要训练个模型预测的数据 https://hmmlearn.readthedocs.io/en/latest/index.html
状态序列: - 初始状态概率矩阵:各个状态最初的概率 - 状态转移矩阵:一个状态到另外一个状态的概率 观察序列: - 发射概率矩阵:各个状态下,观察序列元素的概率分布
HMM算法在行业中的应用
隐马尔可夫模型(HMM):是结构最简单的动态贝叶斯网络,是一种尤其著名的有向图结构, 主要用于时序数据的建模,在语音识别、自然语言处理等领域有广泛应用, 在分词算法中,隐马尔可夫经常用作能够发现新词的算法, 通过海量的数据学习,能够将人名、地名、互联网上的新词等一一识别出来,具有广泛的应用场景。
HMM五元组
观测序列——O(observe) 隐藏状态序列——I 初始状态概率——π 状态转移矩阵——A 观测概率矩阵——B(也叫发射概率) 两个基本假设: 1. 齐次马尔科夫性假设:在t时刻的状态只依赖于t-1时刻的状态 2. 观测独立性假设:在任一时刻的观测只依赖于该时刻的状态
有向图中的序列
状态是有向图,相互关联的状态形成一个网,那状态序列怎么来的? 状态序列是由观察序列得来的,通过观测得到一个序列,每个观测属于一个状态, 这样就有了状态序列
状态转移矩阵——A
状态转移矩阵必是方阵,状态s1永远都不可能转移到状态s3,则标记为0 每个状态转移到的状态可以是自己,也可以是其他状态 每个状态转移出去各个的概率和为1
HMM解决三类问题
给定模型参数和观测数据,估计隐藏状态的最佳序列。 给定模型参数和观测数据,计算模型似然度。 仅给定观察到的数据,估计模型参数。
import numpy as np from hmmlearn import hmm #观测序列 obs = np.array([0,1,0,1,0,0,1,1,1,0]).reshape(-1,1) model=hmm.GaussianHMM(n_components=2, covariance_type="full", n_iter=100) # model.startprob_ = np.array([0.6,0.4]) #初始状态概率 # model.transmat_ = np.array([[0.7,0.3],[0.4,0.6]]) # 状态转移概率矩阵 model.emissionprob_ = np.array([[0.8,0.2],[0.3,0.7]]) #观测概率矩阵 #使用观测序列训练 model.fit(obs) #预测隐藏状态序列 hidden_states = model.predict(X=obs) hidden_states array([0, 1, 0, 1, 0, 0, 1, 1, 1, 0])
init_params='mc'
init_params默认为stmc Can contain any combination of 's' for startprob, 't' for transmat, 'm' for means, and 'c' forcovars. Defaults to all parameters. 去掉st,然后手工指定 初始状态概率 和 状态转移概率矩阵
import numpy as np from hmmlearn import hmm #观测序列 obs = np.array([0,1,0,1,0,0,1,1,1,0]).reshape(-1,1) model=hmm.GaussianHMM(n_components=2, covariance_type="full", n_iter=100,init_params='mc') model.startprob_ = np.array([0.6,0.4]) #初始状态概率 model.transmat_ = np.array([[0.7,0.3],[0.4,0.6]]) # 状态转移概率矩阵 model.emissionprob_ = np.array([[0.8,0.2],[0.3,0.7]]) #观测概率矩阵 #使用观测序列训练 model.fit(obs) #预测隐藏状态序列 hidden_states = model.predict(X=obs) hidden_states array([1, 0, 1, 0, 1, 1, 0, 0, 0, 1])
机器学习 HMM HMM(隐马尔可夫)简介 一站式解决:隐马尔可夫模型(HMM)全过程推导及实现 隐马尔可夫模型(HMM)