Python hmmlearn中的混淆矩阵是怎么表示的
发布网友
发布时间:2022-04-27 03:58
我来回答
共1个回答
热心网友
时间:2022-06-25 20:32
hmmlearn这个库有三种模型,分别是Gaussian,Multinomial和GMMHMM。这三种模型对应的就是三种emission
matrix(即混淆矩阵,也就是隐状态到观察态的概率)。Gaussian就是说混淆矩阵是一个高斯分布,即观察态是连续的。Multinomiual就是说混淆矩阵事一个Multibimiual
distribution,即观察态势离散的。GMMHMM则是说混淆矩阵是遵循gaussinan
mixture
分布,也是连续的。
题主问如何把混淆矩阵输入到模型里面。首先你要确定你的混淆矩阵的类型。对于Gaussian类型,就是把你希望的
mean和variance值放到模型里面。我就直接把文档里面的例子搬过来,例子里是建立了一个高斯分布的隐马尔科夫模型。
>>>
import
numpy
as
np
>>>
from
hmmlearn
import
hmm
#一个隐马尔科夫模型由(p向量,状态转移矩阵,混淆矩阵)来定义。
>>>
startprob
=
np.array([0.6,
0.3,
0.1])
#
定义初始状态的概率
>>>
transmat
=
np.array([[0.7,
0.2,
0.1],
[0.3,
0.5,
0.2],
[0.3,
0.3,
0.4]])#定义转移矩阵的概率
>>>
means
=
np.array([[0.0,
0.0],
[3.0,
-3.0],
[5.0,
10.0]])
#定义混淆矩阵的均值
>>>
covars
=
np.tile(np.identity(2),
(3,
1,
1))#
定义混淆矩阵的方差
>>>
model
=
hmm.GaussianHMM(3,
"full",
startprob,
transmat)#
定义一个混淆矩阵为高斯分布的隐马尔科夫模型。
这里‘full’的意思就是说你输入的方差矩阵每个元素都给出了,不是一个只是对角线上的元素为0的矩阵
>>>
model.means_
=
means
>>>
model.covars_
=
covars#把你希望的均值方差输入你定义的模型里面,到此你就把混淆矩阵输入进模型了
>>>
X,
Z
=
model.sample(100)
对于Multinomial
和
GMM,我还没用,不过Multinomial应该是需要你自己手动输入隐状态到观察态的概率的,而GMM应该是和Gaussian类型类似,只是需要多输入一个权重因子。
对于第二个问题,covariance_type意思是你的混淆矩阵的covariance
matrix是什么类型,比如若只是对角线上的元素不为0,则把covariance_type设为‘diag’。