为了训练一个HMM模型,我需要启动概率(pi)、转换概率和发射概率。现在我想训练一个具有3个状态(1,2,3)和4个输出(a,b,c,d)的HMM模型。培训数据为:
[[abcdabcdabcdabcdabcdbacbacd,abababcdcdcdcdababab,badcacdabacdbbacd,dacdbacdbbccaaadacdbabd,cababcacdbacacdbdacdacdbacdbab,acddbaacbdcaabdcbabd,cdbadcbacdbbdacdbcdaaabd,bcadabbacbacdbdacddb]]
我试图用石榴来做这件事,但是在这个例子中,所有的州都有这样的概率:
rainy = State( DiscreteDistribution({
'walk': 0.1, 'shop': 0.4, 'clean': 0.5 }),
name='Rainy' )
sunny = State( DiscreteDistribution({
'walk': 0.6, 'shop': 0.3, 'clean': 0.1 }),
name='Sunny' )`
我的问题是如何得到概率。我试图使用石榴方法model.add_transition()
,但我不知道应该给出哪个参数?有没有什么例子可以教我如何从我的数据中得到概率?在
石榴是一个工具,可以给你的状态标签(或概率)为你建模的序列使用HMM。石榴可以计算出你的开始概率,转移概率,和发射概率,如果你给我们的初始转移概率,发射概率基于你的领域知识问题。This是使用石榴的HMM的一个很好的起点。在
如果您不知道所需模型的参数,即您想使用模型来学习这些参数,那么在无监督设置中,您可以使用石榴中的
fit()
函数。model = HiddenMarkovModel() #create reference model.fit(sequences, algorithm='baum-welch') # let model fit to the data model.bake() #finalize the model
(注意:确保输入的每个序列都是一个列表或numpy数组)模型学习参数后,可以使用以下函数提取结果:
要得到转移概率矩阵:
model.dense_transition_matrix()
要获得发射分布:
print(model)
如果希望使用模型生成样本:
model.sample(length=10)
通过使用上面的过渡和发射参数(如您所见)进行调整,并通过以下方式创建新模型,可以进一步改进模型:
custom_model = HiddenMarkovModel.from_matrix(transition_matrix, distributions, start_probs, end_probs)
石榴docs是获得这些函数每个细节的最佳来源。在
相关问题 更多 >
编程相关推荐