HMM的使用:
用 hmmlearn 学习隐马尔可夫HMM模型
hmmlearn概述
hmmlearn安装很简单,"pip install hmmlearn"即可完成。
hmmlearn实现了三种HMM模型类,按照观测状态是连续状态还是离散状态,可以分为两类。GaussianHMM和GMMHMM是连续观测状态的HMM模型,而MultinomialHMM是离散观测状态的模型。
HMM常用的三种模型
1.GaussianHMM 观测状态连续型且符合高斯分布
2.GMMHMM 观测状态连续型且符合混合高斯分布
3.MultinomialHMM 观测状态离散型
以MultinoialHMM为例:
对于MultinomialHMM的模型,使用比较简单,"startprob_"参数对应我们的隐藏状态初始分布Π , "transmat_"对应我们的状态转移矩阵A, "emissionprob_"对应我们的观测状态概率矩阵B。
对于连续观测状态的HMM模型,GaussianHMM类假设观测状态符合高斯分布,而GMMHMM类则假设观测状态符合混合高斯分布。一般情况下我们使用GaussianHMM即高斯分布的观测状态即可。
在GaussianHMM类中,"startprob_"参数对应我们的隐藏状态初始分布 Π , "transmat_"对应我们的状态转移矩阵A, 比较特殊的是观测状态概率的表示方法,此时由于观测状态是连续值,我们无法像MultinomialHMM一样直接给出矩阵B。而是采用给出各个隐藏状态对应的观测状态高斯分布的概率密度函数的参数。
如果观测序列是一维的,则观测状态的概率密度函数是一维的普通高斯分布。如果观测序列是N维的,则隐藏状态对应的观测状态的概率密度函数是N维高斯分布。高斯分布的概率密度函数参数可以用μ表示高斯分布的期望向量,Σ表示高斯分布的协方差矩阵。在GaussianHMM类中,“means”用来表示各个隐藏状态对应的高斯分布期望向量μ形成的矩阵,而“covars”用来表示各个隐藏状态对应的高斯分布协方差矩阵Σ形成的三维张量。
模型参数:
n_components : 隐藏状态数目
covariance_type: 协方差矩阵的类型
min_covar : 最小方差,防止过拟合
startprob_prior : 初始概率向量
transmat_prior : 转移状态矩阵
means_prior, means_weight : 均值
covars_prior, covars_weight : 协方差
algorithm : 所用算法
random_state : 随机数种子
n_iter : 最大迭代次数
tol : 停机阈值
verbose : 是否打印日志以观察是否已收敛
params : 决定哪些参数在迭代中更新
init_params : 决定哪些参数在迭代前先初始化
模型属性:
n_features:n维高斯分布
monitor_:收敛监测
transmat_:转移矩阵
startprob_:初始向量
means_:均值
covars_:方差
模型常用函数调用:
decode(X, lengths=None, algorithm=None),返回最可能的隐藏状态
sample(n_samples=1, random_state=None), 随机生成一个模型的Z和X
fit(X, lengths=None) ,估计模型参数
predict(X, lengths=None) ,预测最可能的隐藏状态
predict_proba(X, lengths=None) ,预测各状态的概率
score(X, lengths=None) ,当前模型下出现X的概率