【问题标题】:Markov Chain from String来自字符串的马尔可夫链
【发布时间】:2019-05-27 17:14:01
【问题描述】:

考虑到马尔可夫链是否以字符串列表的形式给出输入,我目前正面临一个问题。该输入必须转换为马尔可夫链。我已经坐在这个问题上几个小时了。

我的想法:正如您在下面看到的,我尝试使用集合中的计数器来计算所有转换,这很有效。现在我正在尝试计算 A 和 B 是第一个元素的所有元组。这给了我所有可能的 A 转换。

然后我将计算像 (A, B) 这样的转换。 然后我想用这些来创建一个具有所有概率的矩阵。

def markov(seq):

    states = Counter(seq).keys()
    liste = []
    print(states)
    a = zip(seq[:-1], seq[1:])
    print(list(a))

print(markov(["A","A","B","B","A","B","A","A","A"]))

到目前为止,我无法计算元组。 任何有关如何解决此问题的帮助或新想法表示赞赏

【问题讨论】:

    标签: python markov-chains


    【解决方案1】:

    要计算元组,您可以创建另一个计数器。

    b = Counter()
    for word_pair in a:
        b[word_pair] += 1
    

    b 将保留对的计数。

    要创建矩阵,可以使用 numpy。

    c = np.array([[b[(i,j)] for j in states] for i in states], dtype = float)
    

    我将把每行总和归一化为 1 的任务留作练习。

    【讨论】:

      【解决方案2】:

      我没有得到你想要的,但这是我认为的:

      from collections import Counter
      
      def count_occurence(seq):
      
          counted_states = []
          transition_dict = {}
          for tup in seq:
              if tup not in counted_states:
                  transition_dict[tup] = seq.count(tup)
              counted_states.append(tup)
          print(transition_dict)
          #{('A', 'A'): 3, ('A', 'B'): 2, ('B', 'B'): 1, ('B', 'A'): 2}
      
      def markov(seq):
      
          states = Counter(seq).keys()
          print(states)
          #dict_keys(['A', 'B'])
          a = list(zip(seq[:-1], seq[1:]))
          print(a)
          #[('A', 'A'), ('A', 'B'), ('B', 'B'), ('B', 'A'), ('A', 'B'), ('B', 
          #'A'), ('A', 'A'), ('A', 'A')]
          return a
      
      seq = markov(["A","A","B","B","A","B","A","A","A"])
      count_occurence(seq)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-15
        • 1970-01-01
        相关资源
        最近更新 更多