如何找到某些事件以定义的顺序发生的概率?

数据挖掘 机器学习 Python 可能性
2022-03-08 20:28:02

今天是个好日子!

我有一个问题,我必须编写这样的程序:

我有一些任意数量的事件,让我们调用事件 A、B、C、D、E、F 等。

现在它们以明确定义的顺序出现,如下所示:

[A, A, C, A, A, A, F, B, A]

这只是一个随机样本,我有数千个此类事件序列的数据,每个序列中将有 9 个事件。

我要做的是计算每个单独事件发生的概率。像:

  • 事件 A 先发生的概率是多少
  • 假设前一个事件是 A,事件 B 发生的概率是多少
  • 假设前两个事件是 A 和 B,事件 C 发生的概率是多少

到目前为止,我已经完成了条件/联合概率、马尔可夫链背后的数学,但我无法提出编程部分。是否有任何线索可以让我获得一些框架、库或工具来帮助我使用我的所有序列运行模拟,并给出任何最终的概率?

谢谢!

PS:对于那些了解MLB的人,我只是想根据过去的得分来找出所有9局中某些得分的概率。如果我计算得分的简单概率,我会得到非常高的零概率,但事实并非如此。我只有盒子分数的数据。

1个回答

我的回答受到Code Review SE 中这个问题的启发

import random
import string
from collections import Counter

def test_data(n, m, choices):
    return [[random.choice(choices) for _ in range(m)] for _ in range(n)]

data = test_data(50000, 9, ["A", "B", "C", "D", "E", "F"])

def subsequence_counts(sequences):
    return Counter([seq for seq in map(''.join, sequences)])

counter = subsequence_counts(data)

print(counter['BCEEECFAF'])

上面的代码做了什么:

1) 该函数使用参数的元素test_data创建一个n包含项目的列表mchoices

具体来说,我们使用大写字母创建了 50000 个长度为 9 项的列表A, B, C, D, E, F

这只是为了测试代码

2) 该函数subsequence_counts使用列表推导和 aCounter来跟踪我们拥有的子列表的每一个组合。

3) 最后,您可以访问计数器并获取您想要的任何事件的频率。