Pandas - вычислить вероятность последовательности из цепи Маркова df - PullRequest
1 голос
/ 17 июня 2019

Я хочу вычислить вероятность нескольких последовательностей в цепи Маркова. Я подготовил цепь Маркова, но я не уверен, как легко рассчитать вероятности определенной последовательности.

Мой кадр данных pandas с A-E слева как индекс и A-E сверху как столбцы называется Марков, выглядит следующим образом:

    A   B   C   D   E
A   0.3 0.2 0.5 0.0 0.2
B   0.2 0.4 0   0   0.4
C   0.5 0.4 0   0.1 0
D   0.2 0.2 0.2 0.2 0.2 
E   0.6 0.1 0.1 0.1 0.1

давайте предположим, что я хочу проверить вероятность последовательности, называемой sequence: ['A', 'C', 'D']. Что означало бы переход A в C, C в D. Это должно привести к 0,05.

Мне удалось использовать функцию .at панд:

markov.at[sequence[0], sequence[1]] * markov.at[sequence[1], sequence[2]].

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

Как я мог этого достичь? Я пропускаю строительную особенность панд, чтобы выполнить такие вычисления?

1 Ответ

1 голос
/ 17 июня 2019

Вы можете определить функцию следующим образом:

def get_prob(*args):
    ret = 1
    for i, j in zip(args, args[1:]):
        ret *= markov.at[i,j]

    return ret

И затем вызвать:

get_prob('A','C','D')
# 0.05

get_prob('A', 'C', 'D', 'E')
# 0.010000000000000002

Или вы можете сделать:

def get_prob2(lst):
    ret = 1
    for i,j in zip(lst, lst[1:]):
        ret *= markov.at[i,j]

    return ret

, чтобы вы моглипередать строку (или список):

get_prob2('ACDE')
# 0.010000000000000002
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...