python - 使用石榴:如何在隐马尔可夫模型中生成概率
问题描述
为了训练 HMM 模型,我需要开始概率 (pi)、转移概率和发射概率。现在我想训练一个具有 3 个状态(1、2、3)和 4 个输出(a、b、c、d)的 HMM 模型。训练数据为:
[[abcdabcdabcdabcdabcdbacbacd,abababcdcdcdcdababab,badcacdabacdbbacd,dacdbacdbbccaaadacdbabd,cababcacdbacacdbdacdacdbacdbab,acddbaacbdcaabdcbabd,cdbadcbacdbbdacdbcdaaabd,bcadabbacbacdbdacddb]]
我正在尝试使用 pomegranate 来做到这一点,但在示例中,所有州的概率都指定如下:
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()
,但我不知道我应该给哪个参数?是否有任何示例可以教我如何获取数据中的概率?
解决方案
如果您不知道所需模型的参数,即您想使用模型来学习这些参数,那么在无监督设置中,您可以使用fit()
pomegranate 中的函数。
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)
Pomegranate docs是获取这些函数的详细信息的最佳来源。
推荐阅读
- tensorflow - 不允许迭代 `tf.Tensor`:AutoGraph 确实转换了这个函数。这可能表明您正在尝试使用不受支持的功能
- rust - 如何在 Rust 中保存子图像?
- doctrine-orm - Symfony 4 - 如何订购但 DISTINCT 和第二次订购 - Createquerybuilder?
- assembly - 为什么将 init_task 结构地址保存到 arm64 引导代码 __primary_switched 中的 sp_el0?
- python - 如何执行独特的随机函数
- javascript - 我们如何在 ANT D 列中获取/重新呈现异步数据
- spring - 在 Spring Security 中注销后重定向到外部身份验证时出现 Cors 问题
- python - 如何使用 Discord.py 发送消息
- matlab - 从 3 个向量创建热图
- regex - 正则表达式从字符串获取链接,除了多个 www