使用石榴:如何在隐马尔可夫模型中生成概率

2024-09-19 23:27:01 发布

您现在位置:Python中文网/ 问答频道 /正文

为了训练一个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(),但我不知道应该给出哪个参数?有没有什么例子可以教我如何从我的数据中得到概率?在


Tags: 数据name模型clean状态pishop概率
2条回答

石榴是一个工具,可以给你的状态标签(或概率)为你建模的序列使用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数组)

模型学习参数后,可以使用以下函数提取结果:

  1. 要得到转移概率矩阵:

    model.dense_transition_matrix()

  2. 要获得发射分布:

    print(model)

  3. 如果希望使用模型生成样本:

    model.sample(length=10)

  4. 通过使用上面的过渡和发射参数(如您所见)进行调整,并通过以下方式创建新模型,可以进一步改进模型:

    custom_model = HiddenMarkovModel.from_matrix(transition_matrix, distributions, start_probs, end_probs)

石榴docs是获得这些函数每个细节的最佳来源。在

相关问题 更多 >