来自字符串的马尔可夫链
Markov Chain from String
我目前正面临一个问题,考虑到马尔可夫链是以字符串列表的形式给出输入。该输入必须转换为马尔可夫链。我已经在这个问题上坐了几个小时了。
我的想法:正如您在下面看到的,我尝试使用集合中的计数器来计算所有转换,这很有效。现在我正在尝试计算 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"]))
到目前为止,我无法对元组进行计数。
感谢任何有关如何解决此问题的帮助或新想法
要对元组进行计数,您可以创建另一个计数器。
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 的任务留作练习。
我没有得到你想要的,但这是我认为的:
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)
我目前正面临一个问题,考虑到马尔可夫链是以字符串列表的形式给出输入。该输入必须转换为马尔可夫链。我已经在这个问题上坐了几个小时了。
我的想法:正如您在下面看到的,我尝试使用集合中的计数器来计算所有转换,这很有效。现在我正在尝试计算 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"]))
到目前为止,我无法对元组进行计数。 感谢任何有关如何解决此问题的帮助或新想法
要对元组进行计数,您可以创建另一个计数器。
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 的任务留作练习。
我没有得到你想要的,但这是我认为的:
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)