python - 如何从具有转换和计数的字典创建转换矩阵

标签 python hidden-markov-models hmmlearn

我正在尝试创建一个隐马尔可夫模型,我想创建我的转换矩阵,但我不知道如何创建。 我有一本包含转换和这些转换发生的概率的字典,如下所示(只是更大):

{(1, 2): 0.0035842293906810036, (2, 3): 0.0035842293906810036, (3, 4): 0.0035842293906810036, (4, 5): 0.0035842293906810036, (5, 6): 0.0035842293906810036, (6, 7): 0.0035842293906810036, (7, 8)}

我定义如下:

# create a list of bigrams
bigrams = []
for i in range(len(integer_list)):
    if i+1 in range(len(integer_list)):
        bigrams.append((integer_list[i], integer_list[i+1]))

# Create a dictionary containing the counts each bigram occurs in the dataset
bigrams_dict = Counter(bigrams)
values = bigrams_dict.values()

# create a dictionary containing the probability of a word occurring. <- initial probs
frequencies = {key:float(value)/sum(counts_dict.values()) for (key,value) in counts_dict.items()}
frequency_list = []
for value in frequencies.values():
    frequency_list.append(value)

现在我想用它制作一个转换矩阵,这将是一个多维数组,但我不知道如何做到这一点。有人可以帮助我吗?

转换矩阵的示例如下(当然只有更多状态):


   0   1/3  2/3
   0   2/3  1/3
   1    0    0

最佳答案

一般过程只是预先定义一个具有正确尺寸的零矩阵,然后一次填充一个元素。这种任务不要想太多。

例如,如果您知道自己有 8 个状态,则可以使用您的 frequencies 字典构建如下矩阵:

import numpy as np

n_states = 8
transitions = np.zeroes((n_states, n_states), dtype=np.float)

for (state1, state2), probability in frequencies.items():
    transitions[state1, state2] = probability

对于大量状态,这可能需要一段时间,具体取决于您的计算机的速度。

如果您不知道状态总数,可以通过计算数据中最大的状态数来估计:

from itertools import chain

n_states = max(chain.from_iterable(frequencies.keys()))

关于python - 如何从具有转换和计数的字典创建转换矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62324066/

相关文章:

python - "from builtins import *"和 python2 中的 super() : bad practice?

python - 如何更改 pythonanywhere 中的默认 python 版本?

python - scikit-learn HMM 与 HTK 相比速度怎么样?

python - 为 python hmmlearn 包编译 C 代码时出错

python - 使用 hmmlearn 收敛到一种状态的隐马尔可夫模型

python - Hmmlearn分类用法

python - 如何修复 django.db.utils.IntegrityError : duplicate key value violates unique constraint?

python - 如何更改 matplotlib 图中刻度的字体大小?

.net - .NET 可以使用哪些 HMM(隐马尔可夫模型)压缩库?

algorithm - 三面骰子的隐马尔可夫模型