Марковская цепь из струн - PullRequest
1 голос
/ 27 мая 2019

Я в настоящее время нахожусь в проблеме, рассматривая цепи Маркова, где вход был дан в форме списка строк. Этот вход должен быть преобразован в цепь Маркова. Я сижу над этой проблемой уже пару часов.

Моя идея: Как вы можете видеть ниже, я попытался использовать счетчик из коллекций для подсчета всех переходов, которые сработали. Теперь я пытаюсь сосчитать все кортежи, где 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"]))

Пока я не могу заставить подсчет кортежей работать. Любая помощь или новые идеи о том, как решить эту проблему, приветствуется

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Я не получил именно то, что вы хотели, но вот что я думаю:

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)
1 голос
/ 27 мая 2019

Для подсчета кортежа вы можете создать еще один счетчик.

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.

...