Pandas - 从马尔可夫链 df 计算序列的概率
Pandas - Calculate probability of sequence from Markov chain df
我想计算马尔可夫链中几个序列的概率。我准备好了马尔可夫链,但我不确定如何轻松计算特定的序列概率。
我的 pandas dataframe 以左侧的 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
假设我想检查称为序列的概率:['A'、'C'、'D']。这意味着 A 到 C、C 到 D 的转换。结果应该是 0.05。
我使用 pandas .at 函数成功了:
markov.at[sequence[0], sequence[1]] * markov.at[sequence[1], sequence[2]].
但是,我想构建一个函数,当我将每行的长度不同的 table 序列交给它时,它会计算相应的序列概率。在我的方法中,每次我想检查特定序列时都必须手动更改代码。
我怎样才能做到这一点?我是否忽略了 pandas 的建筑特征来执行此类计算?
你可以这样定义一个函数:
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
我想计算马尔可夫链中几个序列的概率。我准备好了马尔可夫链,但我不确定如何轻松计算特定的序列概率。
我的 pandas dataframe 以左侧的 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
假设我想检查称为序列的概率:['A'、'C'、'D']。这意味着 A 到 C、C 到 D 的转换。结果应该是 0.05。
我使用 pandas .at 函数成功了:
markov.at[sequence[0], sequence[1]] * markov.at[sequence[1], sequence[2]].
但是,我想构建一个函数,当我将每行的长度不同的 table 序列交给它时,它会计算相应的序列概率。在我的方法中,每次我想检查特定序列时都必须手动更改代码。
我怎样才能做到这一点?我是否忽略了 pandas 的建筑特征来执行此类计算?
你可以这样定义一个函数:
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